1
0
Fork 0
mirror of https://github.com/gwm17/catima.git synced 2024-11-22 18:28:51 -05:00
catima/CMakeLists.txt
2018-08-13 18:08:54 +02:00

209 lines
7.2 KiB
CMake

cmake_minimum_required(VERSION 3.2.0)
project(catima)
############ options #############
#option(THREADS "Use multi-threading" ON)
option(PYTHON_MODULE "compile the Catima python module(requires numpy and cython installed)" OFF)
option(TESTS "build tests" OFF)
option(EXAMPLES "build examples" ON)
option(GSL_INTEGRATION "use GSL integration" ON)
option(GENERATE_DATA "make data tables generator" OFF)
option(THIN_TARGET_APPROXIMATION "thin target approximation" ON)
option(DOCS "build documentation (requires doxygen)" OFF)
option(GLOBAL "build with global, sources are required" OFF)
option(REACTIONS "enable/disable nuclear reaction rate" ON)
option(APPS "build catima applications" ON)
######## build type ############
set(CMAKE_BUILD_TYPE Release)
#set(CMAKE_BUILD_TYPE Debug)
#set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} -g")
################################
######### compiler flags ###########
set(CMAKE_CXX_EXTENSIONS OFF)
set(CMAKE_CXX_STANDARD 14)
set(CMAKE_CXX_STANDARD_REQUIRED ON)
if ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "GNU" OR
"${CMAKE_CXX_COMPILER_ID}" STREQUAL "Clang")
set(warnings "-Wall -Wextra -Werror")
endif()
if(APPLE)
set(RPATH_VARIABLE "DYLD_LIBRARY_PATH")
else()
set(RPATH_VARIABLE "LD_LIBRARY_PATH")
endif()
MESSAGE(STATUS "install prefix: " ${CMAKE_INSTALL_PREFIX})
############# Requirements ##################
find_package(GSL REQUIRED)
MESSAGE(STATUS "GSL include dirs: " ${GSL_INCLUDE_DIRS})
#if(THREADS)
# find_package(Threads REQUIRED)
# set (EXTRA_LIBS ${EXTRA_LIBS} ${CMAKE_THREAD_LIBS_INIT})
# set (USE_THREADS ON)
# MESSAGE(STATUS "Nurex will use threads")
#endif(THREADS)
find_package(PythonInterp)
if(PYTHONINTERP_FOUND)
message("-- Python found: ${PYTHON_EXECUTABLE}")
endif()
find_package(nurex QUIET)
if(nurex_FOUND)
message(STATUS "nurex library found")
set(NUREX ON)
list(APPEND EXTRA_LIBS nurex::nurex)
endif(nurex_FOUND)
configure_file(
"${CMAKE_CURRENT_SOURCE_DIR}/build_config.in"
"${CMAKE_CURRENT_BINARY_DIR}/include/catima/build_config.h"
)
configure_file("${PROJECT_SOURCE_DIR}/init.sh.in"
"${PROJECT_BINARY_DIR}/init.sh"
)
############### main build ###########################
file(GLOB SOURCES *.cpp)
if(GLOBAL)
file(GLOB GLOBAL_SOURCES global/*.c)
LIST (APPEND SOURCES ${GLOBAL_SOURCES})
endif(GLOBAL)
file(GLOB HEADERS *.h)
add_library(catima SHARED ${SOURCES})
add_library(catima_static STATIC ${SOURCES})
set_target_properties(catima PROPERTIES
POSITION_INDEPENDENT_CODE ON
LIBRARY_OUTPUT_DIRECTORY ${PROJECT_BINARY_DIR}/lib
)
set_target_properties(catima_static
PROPERTIES OUTPUT_NAME catima
POSITION_INDEPENDENT_CODE ON
ARCHIVE_OUTPUT_DIRECTORY ${PROJECT_BINARY_DIR}/lib
)
target_link_libraries(catima ${EXTRA_LIBS} ${GSL_LIBRARIES})
target_link_libraries(catima_static ${EXTRA_LIBS} ${GSL_LIBRARIES})
target_include_directories(catima
PUBLIC $<BUILD_INTERFACE:${PROJECT_BINARY_DIR}/include>
$<BUILD_INTERFACE:${GSL_INCLUDE_DIRS}>
)
target_include_directories(catima_static
PUBLIC $<BUILD_INTERFACE:${PROJECT_BINARY_DIR}/include>
$<BUILD_INTERFACE:${GSL_INCLUDE_DIRS}>
)
add_library(catima::catima ALIAS catima)
add_library(catima::catima_static ALIAS catima_static)
FILE(COPY ${HEADERS} DESTINATION ${PROJECT_BINARY_DIR}/include/catima)
# the compiler used for C++ files
MESSAGE( STATUS "CMAKE_CXX_COMPILER: " ${CMAKE_CXX_COMPILER} )
# the compiler flags for compiling C++ sources
MESSAGE( STATUS "CMAKE_CXX_FLAGS: " ${CMAKE_CXX_FLAGS_RELEASE} )
######## for python module
if(PYTHON_MODULE)
if(NOT PYTHONINTERP_FOUND)
MESSAGE(SEND_ERROR "Python is required to build nurex python modules")
endif(NOT PYTHONINTERP_FOUND)
find_program(CYTHON_EXECUTABLE
NAMES cython cython2 cython3 cython.bat
DOC "path to the cython executable"
)
if(NOT CYTHON_EXECUTABLE)
MESSAGE(SEND_ERROR "Cython not found, it is required to build nurex python modules")
endif(NOT CYTHON_EXECUTABLE)
MESSAGE(STATUS "Cython found: " ${CYTHON_EXECUTABLE})
### build libraries string
foreach(entry ${EXTRA_LIBS} ${GSL_LIBRARIES} catima)
LIST (APPEND EXTRA_PYTHON_LIBS \"${entry}\")
endforeach(entry ${EXTRA_LIBS} ${GSL_LIBRARIES} catima)
string (REPLACE ";" "," EXTRA_PYTHON_LIBS "${EXTRA_PYTHON_LIBS}")
# if(THREADS)
# set (CYTHON_DEFINES "-DUSE_THREADS=1")
# endif(THREADS)
### insert libraries string and create setup.py
FILE(COPY catimac.pxd catima.pyx DESTINATION ${PROJECT_BINARY_DIR})
set(CATIMA_LIB ${CMAKE_SHARED_LIBRARY_PREFIX}catima${CMAKE_SHARED_LIBRARY_SUFFIX})
configure_file(${CMAKE_CURRENT_SOURCE_DIR}/setup.py.in ${PROJECT_BINARY_DIR}/setup.py)
add_custom_target(target_python ALL DEPENDS catima)
add_custom_command(TARGET target_python
COMMAND ${PYTHON_EXECUTABLE} ${PROJECT_BINARY_DIR}/setup.py build_ext ${CYTHON_DEFINES} -i
)
endif(PYTHON_MODULE )
########## Sub Directories ###########
if(EXAMPLES)
file(GLOB EXAMPLES examples/*.cpp)
FILE(COPY ${EXAMPLES} DESTINATION ${PROJECT_BINARY_DIR}/examples)
FILE(COPY examples/makefile DESTINATION ${PROJECT_BINARY_DIR}/examples)
#add_subdirectory("examples")
endif(EXAMPLES)
if(TESTS)
enable_testing()
add_subdirectory("tests")
endif(TESTS)
########## data generator ########
if(GENERATE_DATA)
add_executable(generate_ls_coeff utils/generator.cpp)
target_link_libraries(generate_ls_coeff catima)
#add_custom_command(
# OUTPUT ${CMAKE_CURRENT_BINARY_DIR/include/generated_LS_coeff.h}
# COMMAND
#)
endif(GENERATE_DATA)
####### DOCS generation #########
if(DOCS)
find_package(Doxygen REQUIRED)
if(DOXYGEN_FOUND)
configure_file(${CMAKE_CURRENT_SOURCE_DIR}/doxygen.in ${CMAKE_CURRENT_BINARY_DIR}/Doxyfile @ONLY)
add_custom_target(docs
COMMAND ${DOXYGEN_EXECUTABLE} ${CMAKE_CURRENT_BINARY_DIR}/Doxyfile COMMENT "Generating API documentation with Doxygen" VERBATIM )
endif(DOXYGEN_FOUND)
endif(DOCS)
###### subdirectories ######
if(APPS)
add_subdirectory("bin")
endif(APPS)
####### install part #######
FILE(GLOB headers "*.h")
include(GNUInstallDirs)
install (TARGETS catima catima_static
EXPORT catimaConfig
LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}
ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR})
install (FILES ${headers} DESTINATION include/catima)
install(EXPORT catimaConfig
NAMESPACE catima::
DESTINATION lib/cmake/catima
)
export(TARGETS catima catima_static NAMESPACE catima:: FILE catimaConfig.cmake)
export(PACKAGE catima)
###### packaging #######
set(CPACK_PACKAGE_NAME "catima")
set(CPACK_PACKAGE_VENDOR "A. Prochazka")
set(CPACK_PACKAGE_DESCRIPTION_SUMMARY "")
set(CPACK_PACKAGE_VERSION "1.0.0")
set(CPACK_PACKAGE_VERSION_MAJOR "1")
set(CPACK_PACKAGE_VERSION_MINOR "0")
set(CPACK_PACKAGE_VERSION_PATCH "0")
set(CPACK_PACKAGE_INSTALL_DIRECTORY "catima")
include(CPack)