11cmake_minimum_required (VERSION 3.21 FATAL_ERROR)
22
3- # See here: https://gitlab.kitware.com/cmake/community/-/wikis/doc/cmake/RPATH-handling
4- set (CMAKE_SKIP_BUILD_RPATH FALSE )
5- set (CMAKE_BUILD_WITH_INSTALL_RPATH FALSE )
6- set (CMAKE_INSTALL_RPATH "${CMAKE_INSTALL_PREFIX} /lib" )
7- set (CMAKE_INSTALL_RPATH_USE_LINK_PATH TRUE )
8-
93#---[ CMake Config ]--------------------
104set_property (GLOBAL PROPERTY USE_FOLDERS ON )
11- set (CMAKE_MODULE_PATH "${CMAKE_CURRENT_SOURCE_DIR} /cmake" )
5+ # See here: https://gitlab.kitware.com/cmake/community/-/wikis/doc/cmake/RPATH-handling
6+ set (CMAKE_SKIP_BUILD_RPATH FALSE )
7+ set (CMAKE_BUILD_WITH_INSTALL_RPATH FALSE )
8+ set (CMAKE_INSTALL_RPATH_USE_LINK_PATH TRUE )
9+
10+ set (CMAKE_INSTALL_RPATH "${CMAKE_INSTALL_PREFIX} /lib" )
11+ set (CMAKE_MODULE_PATH "${CMAKE_CURRENT_SOURCE_DIR} /cmake" )
1212
1313message (STATUS "Using CMake version ${CMAKE_VERSION} " )
1414cmake_policy (SET CMP0054 NEW)
@@ -17,38 +17,39 @@ cmake_policy(SET CMP0056 NEW)
1717
1818#---[ Build Config ]--------------------
1919project (OCCA
20- VERSION 2.0.0
20+ VERSION 2.0.0
2121 DESCRIPTION "JIT Compilation for Multiple Architectures: C++, OpenMP, CUDA, HIP, OpenCL, Metal"
2222 HOMEPAGE_URL "https://github.com/libocca/occa"
23- LANGUAGES C CXX)
23+ LANGUAGES C CXX
24+ )
2425
2526if (NOT CMAKE_BUILD_TYPE )
2627 set (CMAKE_BUILD_TYPE "Release" CACHE STRING "Build type" FORCE)
2728endif ()
2829
2930# CMake will decay to a previous C++ standard if a compiler does not support C++17
30- set (CMAKE_CXX_STANDARD 17)
31- set (CMAKE_CXX_STANDARD_REQUIRED ON )
32- set (CMAKE_CXX_EXTENSIONS OFF )
31+ set (CMAKE_CXX_STANDARD 17)
32+ set (CMAKE_CXX_STANDARD_REQUIRED ON )
33+ set (CMAKE_CXX_EXTENSIONS OFF )
3334set (CMAKE_POSITION_INDEPENDENT_CODE ON )
3435
35- option (OCCA_ENABLE_OPENMP "Build with OpenMP if available" ON )
36- option (OCCA_ENABLE_CUDA "Build with CUDA if available" ON )
37- option (OCCA_ENABLE_OPENCL "Build with OpenCL if available" ON )
38- option (OCCA_ENABLE_HIP "Build with HIP if available" ON )
39- option (OCCA_ENABLE_METAL "Build with Metal if available" ON )
40- option (OCCA_ENABLE_DPCPP "Build with SYCL/DPCPP if available" ON )
36+ option (OCCA_ENABLE_OPENMP "Build with OpenMP if available" ON )
37+ option (OCCA_ENABLE_CUDA "Build with CUDA if available" ON )
38+ option (OCCA_ENABLE_OPENCL "Build with OpenCL if available" ON )
39+ option (OCCA_ENABLE_HIP "Build with HIP if available" ON )
40+ option (OCCA_ENABLE_METAL "Build with Metal if available" ON )
41+ option (OCCA_ENABLE_DPCPP "Build with SYCL/DPCPP if available" ON )
4142
42- option (OCCA_ENABLE_TESTS "Build tests" OFF )
43- option (OCCA_ENABLE_EXAMPLES "Build simple examples" OFF )
44- option (OCCA_ENABLE_FORTRAN "Enable Fortran interface" OFF )
45- option (OCCA_CLANG_BASED_TRANSPILER "Build with occa-transpiler dependecy" OFF )
43+ option (OCCA_ENABLE_TESTS "Build tests" OFF )
44+ option (OCCA_ENABLE_EXAMPLES "Build simple examples" OFF )
45+ option (OCCA_ENABLE_FORTRAN "Enable Fortran interface" OFF )
46+ option (OCCA_CLANG_BASED_TRANSPILER "Build with occa-transpiler dependecy" OFF )
4647
4748if (OCCA_ENABLE_FORTRAN)
4849 enable_language (Fortran)
4950endif ()
5051
51- option (ENABLE_SHARABLE_DEVICE "Enable sharable device by multiple threads" OFF )
52+ option (ENABLE_SHARABLE_DEVICE "Enable sharable device by multiple threads" OFF )
5253if (ENABLE_SHARABLE_DEVICE)
5354 set (OCCA_THREAD_SHARABLE_ENABLED 1)
5455 message ("-- OCCA sharable by multi-threads : Enabled" )
@@ -73,11 +74,6 @@ else()
7374 set (OCCA_OS "OCCA_WINDOWS_OS" )
7475endif ()
7576
76- # INFO: order is important, deps should not apply compiler flags
77- if (OCCA_CLANG_BASED_TRANSPILER)
78- find_package (oklt REQUIRED)
79- endif ()
80-
8177include (SetCompilerFlags)
8278
8379string (TOUPPER ${CMAKE_BUILD_TYPE} CMAKE_BUILD_TYPE_UPPER)
@@ -99,32 +95,32 @@ set(namespace "${PROJECT_NAME}::")
9995#---[ libocca.so ]----------------------
10096add_library (libocca SHARED)
10197add_library (${namespace} libocca ALIAS libocca)
98+ target_include_directories (libocca
99+ PUBLIC
100+ $<BUILD_INTERFACE:${OCCA_SOURCE_DIR} /include >
101+ $<BUILD_INTERFACE:${OCCA_SOURCE_DIR} /src>
102+ $<BUILD_INTERFACE:${OCCA_BUILD_DIR} /include >
103+ $<INSTALL_INTERFACE:include >
104+ )
102105
103106# Without this, CMake will create liblibocca.so
104- set_target_properties (libocca PROPERTIES
105- OUTPUT_NAME occa
106- LIBRARY_OUTPUT_DIRECTORY ${OCCA_BUILD_DIR} /lib)
107+ set_target_properties (libocca
108+ PROPERTIES
109+ OUTPUT_NAME
110+ occa
111+ LIBRARY_OUTPUT_DIRECTORY
112+ ${OCCA_BUILD_DIR} /lib
113+ )
107114
108115# Find needed and requested packages
109116find_package (Threads REQUIRED)
110117
111118# Use the provided imported target Threads::Threads, to make our package relocatable
112- target_link_libraries (libocca PRIVATE
113- Threads::Threads ${CMAKE_DL_LIBS} )
114-
115- target_include_directories (libocca PUBLIC
116- $<BUILD_INTERFACE:${OCCA_SOURCE_DIR} /include >
117- $<BUILD_INTERFACE:${OCCA_BUILD_DIR} /include >
118- $<INSTALL_INTERFACE:include >)
119-
120- target_include_directories (libocca PRIVATE
121- $<BUILD_INTERFACE:${OCCA_SOURCE_DIR} /src>)
122-
123- if (OCCA_CLANG_BASED_TRANSPILER)
124- target_link_libraries (libocca PRIVATE occa::occa-transpiler)
125- target_compile_definitions (libocca PRIVATE -DBUILD_WITH_CLANG_BASED_TRANSPILER)
126- endif ()
127-
119+ target_link_libraries (libocca
120+ PRIVATE
121+ Threads::Threads
122+ ${CMAKE_DL_LIBS}
123+ )
128124#=======================================
129125
130126#---[ OpenMP ]--------------------------
@@ -157,7 +153,7 @@ if(OCCA_ENABLE_CUDA)
157153 message ("-- CUDA driver library: ${CUDAToolkit_LIBRARY_DIR} " )
158154
159155 # Use the provided imported target CUDA::cuda_driver, to make our package relocatable
160- target_link_libraries (libocca PUBLIC CUDA::cuda_driver)
156+ target_link_libraries (libocca PRIVATE CUDA::cuda_driver)
161157 else ()
162158 set (OCCA_CUDA_ENABLED 0)
163159 endif ()
@@ -244,10 +240,18 @@ if(OCCA_ENABLE_METAL AND APPLE)
244240endif ()
245241#=======================================
246242
243+ #---[ Clang Transpiler ]---------------------------
244+ # INFO: order is important, deps should not apply compiler flags
245+ if (OCCA_CLANG_BASED_TRANSPILER)
246+ find_package (oklt REQUIRED)
247+ target_link_libraries (libocca PRIVATE occa::occa-transpiler)
248+ target_compile_definitions (libocca PRIVATE -DBUILD_WITH_CLANG_BASED_TRANSPILER)
249+ endif ()
250+
247251include (CheckRequiredCompilerFeatures)
248252
249253if (NOT OCCA_IS_TOP_LEVEL)
250- # OCCA is being built as a subdirectory in another project
254+ # OCCA is being built as a subdirectory in another project
251255 set (OCCA_OPENMP_ENABLED ${OCCA_OPENMP_ENABLED} PARENT_SCOPE)
252256 set (OCCA_CUDA_ENABLED ${OCCA_CUDA_ENABLED} PARENT_SCOPE)
253257 set (OCCA_HIP_ENABLED ${OCCA_HIP_ENABLED} PARENT_SCOPE)
@@ -287,7 +291,26 @@ if(OCCA_ENABLE_TESTS)
287291 add_subdirectory (tests)
288292endif ()
289293
290- install (TARGETS libocca EXPORT occaExport DESTINATION lib)
294+ if (OCCA_ENABLE_FORTRAN)
295+ install (TARGETS
296+ libocca
297+ c_api
298+ fortran_api
299+ EXPORT
300+ occaExport
301+ DESTINATION
302+ lib
303+ )
304+ else ()
305+ install (TARGETS
306+ libocca
307+ c_api
308+ EXPORT
309+ occaExport
310+ DESTINATION
311+ lib
312+ )
313+ endif ()
291314install (DIRECTORY include / DESTINATION include )
292315
293316# Create a package config and associated files.
0 commit comments