@@ -2,10 +2,11 @@ cmake_minimum_required(VERSION 3.20)
22project (fdm)
33set (CMAKE_EXPORT_COMPILE_COMMANDS ON )
44
5- find_program (ICPX_EXECUTABLE
6- NAMES icpx
5+ find_program (SYCL_COMPILER_EXECUTABLE
6+ NAMES icpx acpp
77 HINTS
88 ENV SYCL_ROOT
9+ $ENV{HOME} /opt/adaptivecpp/bin
910 /opt/intel/oneapi/compiler/latest/bin
1011 $ENV{ONEAPI_ROOT} /compiler/latest/bin
1112)
@@ -16,21 +17,58 @@ find_path(ONEMATH_INCLUDE_DIR
1617 /usr/local/include
1718)
1819
19- if (ICPX_EXECUTABLE AND ONEMATH_INCLUDE_DIR)
20- message (STATUS "Found icpx: ${ICPX_EXECUTABLE} " )
21- message (STATUS "Found oneapi/math.hpp in: ${ONEMATH_INCLUDE_DIR} " )
22- set (SYCL_FOUND TRUE CACHE BOOL "Found SYCL/icpx + oneapi/math.hpp" )
20+ find_library (ONEMATH_LIBRARY
21+ NAMES onemath
22+ HINTS
23+ /usr/local/lib
24+ )
25+
26+ if (SYCL_COMPILER_EXECUTABLE)
27+ get_filename_component (_sycl_compiler_name ${SYCL_COMPILER_EXECUTABLE} NAME )
28+ if (_sycl_compiler_name STREQUAL "icpx" )
29+ set (_sycl_flags_default "-fsycl -fsycl-targets=nvptx64-nvidia-cuda,spir64 -qopenmp" )
30+ set (_sycl_omp_libraries_default "" )
31+ else ()
32+ # acpp on macOS needs explicit libomp
33+ if (APPLE )
34+ find_library (LIBOMP_LIBRARY NAMES omp
35+ HINTS /opt/homebrew/opt/libomp/lib )
36+ find_path (LIBOMP_INCLUDE_DIR NAMES omp.h
37+ HINTS /opt/homebrew/opt/libomp/include )
38+ if (LIBOMP_LIBRARY AND LIBOMP_INCLUDE_DIR)
39+ get_filename_component (_libomp_lib_dir ${LIBOMP_LIBRARY} DIRECTORY )
40+ set (_sycl_flags_default "--acpp-targets=generic -fopenmp -I${LIBOMP_INCLUDE_DIR} " )
41+ set (_sycl_omp_libraries_default "${_libomp_lib_dir} " )
42+ else ()
43+ set (_sycl_flags_default "--acpp-targets=generic" )
44+ set (_sycl_omp_libraries_default "" )
45+ endif ()
46+ else ()
47+ set (_sycl_flags_default "--acpp-targets=generic -fopenmp" )
48+ set (_sycl_omp_libraries_default "" )
49+ endif ()
50+ endif ()
51+ set (SYCL_FLAGS "${_sycl_flags_default} " CACHE STRING "Flags passed to the SYCL compiler" )
52+ set (SYCL_OMP_LIBRARIES "${_sycl_omp_libraries_default} " CACHE STRING "OpenMP libraries for SYCL compiler (auto-set for acpp on macOS)" )
53+
54+ message (STATUS "Found SYCL compiler: ${SYCL_COMPILER_EXECUTABLE} " )
55+ message (STATUS "SYCL flags: ${SYCL_FLAGS} " )
56+ set (SYCL_FOUND TRUE CACHE BOOL "Found SYCL compiler (icpx or acpp)" )
57+ set (CMAKE_CXX_COMPILER ${SYCL_COMPILER_EXECUTABLE} CACHE FILEPATH "C++ compiler for SYCL" FORCE )
58+ set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS } ${SYCL_FLAGS} " )
2359else ()
24- message (WARNING "SYCL compiler (icpx) or oneapi/math.hpp not found" )
25- set (SYCL_FOUND FALSE CACHE BOOL "Found SYCL/ icpx + oneapi/math.hpp " )
60+ message (STATUS "SYCL compiler (icpx/acpp) not found — SYCL targets will be skipped " )
61+ set (SYCL_FOUND FALSE CACHE BOOL "Found SYCL compiler ( icpx or acpp) " )
2662endif ()
2763
28- if (SYCL_FOUND)
29- set (CMAKE_CXX_COMPILER ${ICPX_EXECUTABLE} CACHE FILEPATH "C++ compiler for SYCL target" FORCE )
30- set (CMAKE_CXX_FLAGS
31- "${CMAKE_CXX_FLAGS } -qopenmp -fsycl -fsycl-targets=nvptx64-nvidia-cuda,spir64 -DHAVE_ONEMATH"
32- )
33- endif ()
64+ if (ONEMATH_INCLUDE_DIR AND ONEMATH_LIBRARY)
65+ message (STATUS "Found oneapi/math.hpp in: ${ONEMATH_INCLUDE_DIR} " )
66+ message (STATUS "Found onemath library: ${ONEMATH_LIBRARY} " )
67+ set (ONEMATH_FOUND TRUE CACHE BOOL "Found oneMath headers and library" )
68+ else ()
69+ message (STATUS "oneMath not found (oneapi/math.hpp or libonemath) — HAVE_ONEMATH disabled" )
70+ set (ONEMATH_FOUND FALSE CACHE BOOL "Found oneMath headers and library" )
71+ endif ()
3472
3573find_package (PkgConfig REQUIRED )
3674find_package (OpenMP )
@@ -171,10 +209,14 @@ target_link_directories(fdm PUBLIC ${PLPLOT_LIBRARY_DIRS} ${BLAS_LIBRARY_DIRS} $
171209target_link_libraries (fdm PUBLIC ${PLPLOT_LIBRARIES} ${BLAS_LIBRARIES} ${LAPACK_LIBRARIES} arpack superlu umfpack ${FFTW3_LIBRARIES} ${FFTW3F_LIBRARIES} ${NETCDF_LIBRARIES} )
172210if (OpenMP_CXX_FOUND)
173211 target_link_libraries (fdm PUBLIC OpenMP::OpenMP_CXX )
212+ elseif (SYCL_OMP_LIBRARIES)
213+ target_link_directories (fdm PUBLIC ${SYCL_OMP_LIBRARIES} )
214+ endif ()
215+ if (ONEMATH_FOUND)
216+ target_compile_definitions (fdm PUBLIC HAVE_ONEMATH )
217+ target_include_directories (fdm PUBLIC ${ONEMATH_INCLUDE_DIR} )
218+ target_link_libraries (fdm PUBLIC onemath_dft_mklgpu ${ONEMATH_LIBRARY} )
174219endif ()
175- if (SYCL_FOUND)
176- target_link_libraries (fdm PUBLIC onemath_dft_mklgpu onemath )
177- endif ()
178220
179221add_subdirectory (test )
180222add_subdirectory (utils )
0 commit comments