|
1 |
| -################################################################# |
2 |
| -# HEADER |
3 |
| -################################################################# |
4 |
| -CMAKE_MINIMUM_REQUIRED(VERSION 2.8.7) |
5 |
| -PROJECT(PENF Fortran) |
6 |
| - |
7 |
| -SET(${PROJECT_NAME}_VERSION 0.0.1) |
8 |
| -SET(${PROJECT_NAME}_SOVERSION 1) |
9 |
| -SET(LIB ${PROJECT_NAME}) |
| 1 | +# The target of the library PENF is exported |
| 2 | +# as PENF::PENF to a package config file for PENF |
| 3 | +# |
| 4 | +# usage find_package(PENF) |
| 5 | +# ... |
| 6 | +# target_link_library(<target> PENF) |
| 7 | +# |
| 8 | +# the config file is generatet in the build and install directories |
10 | 9 |
|
11 |
| -#SET(CMAKE_VERBOSE_MAKEFILE TRUE) |
12 |
| - |
13 |
| -################################################################# |
14 |
| -# DEFINE PATHS |
15 | 10 | #################################################################
|
16 |
| - |
17 |
| -SET(SRC_PATH ${CMAKE_SOURCE_DIR}/src) |
18 |
| -SET(LIB_PATH ${SRC_PATH}/lib) |
19 |
| -SET(TESTS_PATH ${SRC_PATH}/tests) |
20 |
| - |
21 |
| -#SET(CMAKE_MODULE_PATH "${CMAKE_SOURCE_DIR}/CMake/Modules/") |
22 |
| - |
23 |
| - |
24 |
| -################################################################# |
25 |
| -# BUILD PATHS |
| 11 | +# HEADER |
26 | 12 | #################################################################
|
27 |
| - |
28 |
| -SET(LIBRARY_OUTPUT_PATH ${PROJECT_BINARY_DIR}/lib) |
29 |
| -SET(EXECUTABLE_OUTPUT_PATH ${PROJECT_BINARY_DIR}/bin) |
30 |
| -SET(CMAKE_Fortran_MODULE_DIRECTORY ${PROJECT_BINARY_DIR}/modules) |
31 |
| -SET(THIRDPARTY_OUTPUT_PATH ${PROJECT_BINARY_DIR}/thirdparty) |
32 |
| -INCLUDE_DIRECTORIES(${CMAKE_Fortran_MODULE_DIRECTORY}) |
| 13 | +cmake_minimum_required(VERSION 3.10...3.11) |
| 14 | +project(PENF VERSION 1.2.1 LANGUAGES Fortran) |
33 | 15 |
|
34 | 16 | #################################################################
|
35 | 17 | # CONFIGURATION TYPES & BUILD MODE & BUILD_TESTS
|
36 | 18 | #################################################################
|
37 | 19 |
|
38 |
| -SET(CMAKE_CONFIGURATION_TYPES DEBUG RELEASE) |
39 |
| -IF(NOT CMAKE_BUILD_TYPE) |
40 |
| - SET(CMAKE_BUILD_TYPE DEBUG CACHE STRING |
41 |
| - "Choose the type of build, options are: NONE DEBUG RELEASE" |
42 |
| - FORCE) |
43 |
| - |
44 |
| - SET_PROPERTY(CACHE CMAKE_BUILD_TYPE PROPERTY STRINGS NONE DEBUG RELEASE) |
45 |
| -ENDIF(NOT CMAKE_BUILD_TYPE) |
46 |
| - |
47 |
| -IF(NOT ${PROJECT_NAME}_ENABLE_TESTS) |
48 |
| - OPTION(${PROJECT_NAME}_ENABLE_TESTS "Enable/disable tests compilation" OFF) |
49 |
| -ENDIF(NOT ${PROJECT_NAME}_ENABLE_TESTS) |
50 |
| - |
51 | 20 | #################################################################
|
52 |
| -# FFLAGS depend on the compiler and the build type |
| 21 | +# set export variables needed for building |
53 | 22 | #################################################################
|
54 | 23 |
|
55 |
| -GET_FILENAME_COMPONENT(Fortran_COMPILER_NAME ${CMAKE_Fortran_COMPILER} NAME) |
56 |
| - |
57 |
| -IF(CMAKE_BUILD_TYPE STREQUAL "DEBUG") |
58 |
| -# SET(MACROS "${MACROS} -DDEBUG -Dmemcheck") |
59 |
| - ADD_DEFINITIONS(-DDEBUG) |
60 |
| - ADD_DEFINITIONS(-Dmemcheck) |
61 |
| -ENDIF() |
62 |
| - |
63 |
| -ADD_DEFINITIONS(-D${CMAKE_Fortran_COMPILER_ID}) |
64 |
| - |
65 |
| -message(STATUS "COMPILER INFO: ${CMAKE_Fortran_COMPILER_ID} - ${Fortran_COMPILER_NAME}") |
66 |
| - |
67 |
| -IF (${CMAKE_Fortran_COMPILER_ID} STREQUAL "GNU" OR Fortran_COMPILER_NAME MATCHES "gfortran*") |
68 |
| - # gfortran |
69 |
| - set(FORTRAN_FLAGS "-fdefault-real-8 -ffree-line-length-0 -cpp -Wimplicit-interface ${EXTRA_FLAGS} ") |
70 |
| - set (CMAKE_Fortran_FLAGS "${FORTRAN_FLAGS} ${MACROS} ${INCLUDES} " CACHE STRING "" FORCE) |
71 |
| - set (CMAKE_Fortran_FLAGS_RELEASE "-O3 ${EXTRA_FLAGS} " CACHE STRING "" FORCE) |
72 |
| - set (CMAKE_Fortran_FLAGS_DEBUG "-g -fbacktrace -fbounds-check -fprofile-arcs -ftest-coverage -Wimplicit-interface ${EXTRA_FLAGS} " CACHE STRING "" FORCE) |
73 |
| -ELSEIF (${CMAKE_Fortran_COMPILER_ID} STREQUAL "Intel" OR Fortran_COMPILER_NAME MATCHES "ifort*") |
74 |
| - # ifort (untested) |
75 |
| - set(FORTRAN_FLAGS "-r8 -fpp -W1 ${EXTRA_FLAGS} ") |
76 |
| - set (CMAKE_Fortran_FLAGS "${FORTRAN_FLAGS} ${MACROS} ${INCLUDES}" CACHE STRING "" FORCE) |
77 |
| - set (CMAKE_Fortran_FLAGS_RELEASE "-O3 ${EXTRA_FLAGS} " CACHE STRING "" FORCE) |
78 |
| - set (CMAKE_Fortran_FLAGS_DEBUG "-O0 -traceback -g -debug all -check all -ftrapuv -warn nointerfaces ${EXTRA_FLAGS} " CACHE STRING "" FORCE) |
79 |
| -# A partir de CMake 3.1 |
80 |
| -# -prof-gen:srcpos -prof-dir${PROJECT_BINARY_DIR} |
81 |
| - |
82 |
| -ELSEIF (${CMAKE_Fortran_COMPILER_ID} STREQUAL "XL" OR Fortran_COMPILER_NAME MATCHES "xlf*") |
83 |
| - # xlf (untested) |
84 |
| - set(FORTRAN_FLAGS "-q64 -qrealsize=8 -qsuffix=f=f90:cpp=f90 ${EXTRA_FLAGS} ") |
85 |
| - set (CMAKE_Fortran_FLAGS "${FORTRAN_FLAGS} ${MACROS} ${INCLUDES}" CACHE STRING "" FORCE) |
86 |
| - set (CMAKE_Fortran_FLAGS_RELEASE "-O3 -qstrict ${EXTRA_FLAGS} " CACHE STRING "" FORCE) |
87 |
| - set (CMAKE_Fortran_FLAGS_DEBUG "-O0 -g -qfullpath -qkeepparm ${EXTRA_FLAGS} " CACHE STRING "" FORCE) |
88 |
| -ELSE () |
89 |
| - message ("No optimized Fortran compiler flags are known, we just try -O2...") |
90 |
| - set (CMAKE_Fortran_FLAGS_RELEASE "-O2") |
91 |
| - set (CMAKE_Fortran_FLAGS_DEBUG "-O0 -g") |
92 |
| -ENDIF () |
93 |
| - |
94 |
| -SET(CMAKE_MODULE_LINKER_FLAGS "${CMAKE_MODULE_LINKER_FLAGS} -Wl,--allow-multiple-definition") |
95 |
| -SET(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -Wl,--allow-multiple-definition") |
96 |
| - |
97 |
| -message (STATUS "CMAKE_Fortran_COMPILER full path: " ${CMAKE_Fortran_COMPILER}) |
98 |
| -message (STATUS "CMAKE_Fortran_FLAGS: " ${CMAKE_Fortran_FLAGS}) |
99 |
| -message (STATUS "CMAKE_Fortran_FLAGS_RELEASE: " ${CMAKE_Fortran_FLAGS_RELEASE}) |
100 |
| -message (STATUS "CMAKE_Fortran_FLAGS_DEBUG: " ${CMAKE_Fortran_FLAGS_DEBUG}) |
| 24 | +set(TARGETS_EXPORT_NAME "${PROJECT_NAME}-targets") |
| 25 | +set(NAMESPACE "${PROJECT_NAME}::") |
101 | 26 |
|
102 | 27 | #################################################################
|
103 |
| -# ENABLE TESTING |
| 28 | +# generate the library and install instructions |
104 | 29 | #################################################################
|
105 | 30 |
|
106 |
| -SET(BUILDNAME ${CMAKE_Fortran_COMPILER_ID}_${CMAKE_BUILD_TYPE}_MKL=${${PROJECT_NAME}_ENABLE_MKL} CACHE STRING "" ) |
107 |
| -IF(${PROJECT_NAME}_ENABLE_TESTS) |
108 |
| - ENABLE_TESTING() |
109 |
| - INCLUDE(CTest) |
110 |
| -ENDIF() |
| 31 | +add_subdirectory(src/lib) |
111 | 32 |
|
112 | 33 | #################################################################
|
113 |
| -# STATIC LIBRARIES |
114 |
| -################################################################# |
115 |
| -# Try to search first static libraries |
116 |
| -IF(NOT ${BUILD_SHARED_LIBS}) |
117 |
| - SET(CMAKE_FIND_LIBRARY_SUFFIXES ".a ${CMAKE_FIND_LIBRARY_SUFFIXES}") |
118 |
| -ENDIF() |
119 |
| - |
120 |
| -################################################################# |
121 |
| -# ADD SOURCE SUBDIRS |
| 34 | +# ENABLE TESTING |
122 | 35 | #################################################################
|
123 | 36 |
|
124 |
| -ADD_SUBDIRECTORY(${LIB_PATH}) |
125 |
| -IF(${PROJECT_NAME}_ENABLE_TESTS) |
126 |
| - ADD_SUBDIRECTORY(${TESTS_PATH}) |
127 |
| -ENDIF() |
128 |
| - |
| 37 | +option(BUILD_TESTING "Build the testing tree." OFF) |
| 38 | +if(BUILD_TESTING) |
| 39 | + include(CTest) |
| 40 | + add_subdirectory(src/tests) |
| 41 | +endif() |
| 42 | + |
| 43 | +################################################################# |
| 44 | +# generate package config files |
| 45 | +################################################################# |
| 46 | + |
| 47 | +include(GNUInstallDirs) |
| 48 | +set(project_config "${PROJECT_NAME}-config.cmake") |
| 49 | +set(cmake_files_dir "${CMAKE_CURRENT_BINARY_DIR}/CMakeFiles") |
| 50 | +set(config_install_dir "${CMAKE_INSTALL_LIBDIR}/cmake/${PROJECT_NAME}") |
| 51 | +set(config_build_dir "${CMAKE_CURRENT_BINARY_DIR}/${config_install_dir}") |
| 52 | + |
| 53 | +# export targets for install |
| 54 | +install(EXPORT ${TARGETS_EXPORT_NAME} |
| 55 | + NAMESPACE |
| 56 | + ${NAMESPACE} |
| 57 | + DESTINATION |
| 58 | + ${config_install_dir} |
| 59 | + COMPONENT Development |
| 60 | +) |
| 61 | + |
| 62 | +# export targets into build |
| 63 | +export(EXPORT ${TARGETS_EXPORT_NAME} |
| 64 | + NAMESPACE |
| 65 | + ${NAMESPACE} |
| 66 | + FILE |
| 67 | + ${config_build_dir}/${TARGETS_EXPORT_NAME}.cmake |
| 68 | +) |
| 69 | + |
| 70 | +#create package config |
| 71 | +include(CMakePackageConfigHelpers) |
| 72 | +configure_package_config_file(cmake/${project_config}.in ${cmake_files_dir}/${project_config} |
| 73 | + INSTALL_DESTINATION ${config_install_dir} |
| 74 | +) |
| 75 | +install(FILES ${cmake_files_dir}/${project_config} |
| 76 | + DESTINATION ${config_install_dir} |
| 77 | +) |
| 78 | + |
| 79 | +configure_package_config_file(cmake/${project_config}.in ${config_build_dir}/${project_config} |
| 80 | + INSTALL_DESTINATION ${config_build_dir} |
| 81 | + INSTALL_PREFIX ${CMAKE_CURRENT_BINARY_DIR} |
| 82 | +) |
0 commit comments