|
1 | 1 | cmake_minimum_required(VERSION 3.15)
|
2 |
| -project(sfcio VERSION 1.1.0) |
3 |
| -enable_language (Fortran) |
4 | 2 |
|
5 |
| -if (NOT CMAKE_BUILD_TYPE) |
6 |
| - set (CMAKE_BUILD_TYPE RELEASE CACHE STRING |
7 |
| - "Choose the type of build, options are: PRODUCTION Debug Release." |
8 |
| - FORCE) |
9 |
| -endif() |
| 3 | +file(STRINGS "VERSION" pVersion) |
10 | 4 |
|
11 |
| -if(CMAKE_CXX_COMPILER_ID STREQUAL "Intel") |
12 |
| - set(IntelComp true ) |
13 |
| -elseif(CMAKE_CXX_COMPILER_ID MATCHES "GNU*" OR CMAKE_CXX_COMPILER_ID MATCHES "Clang*") |
14 |
| - set(GNUComp true ) |
15 |
| -elseif(CMAKE_CXX_COMPILER_ID MATCHES "pgc*") |
16 |
| - set(PGIComp true ) |
17 |
| -endif() |
| 5 | +project(sfcio VERSION ${pVersion} LANGUAGES Fortran) |
18 | 6 |
|
19 |
| -STRING(COMPARE EQUAL ${CMAKE_BUILD_TYPE} "RelWithDebInfo" BUILD_RELEASE) |
20 |
| -STRING(COMPARE EQUAL ${CMAKE_BUILD_TYPE} "RELEASE" BUILD_RELEASE) |
21 |
| -STRING(COMPARE EQUAL ${CMAKE_BUILD_TYPE} "PRODUCTION" BUILD_PRODUCTION) |
22 |
| -STRING(COMPARE EQUAL ${CMAKE_BUILD_TYPE} "DEBUG" BUILD_DEBUG) |
| 7 | +option(ENABLE_TESTS "Enable tests" OFF) |
23 | 8 |
|
24 |
| -if( (BUILD_RELEASE) OR (BUILD_PRODUCTION) ) |
25 |
| - if(IntelComp) |
26 |
| - set(fortran_flags "-O2" "-g" "-xHOST" "-traceback" "-free" "-convert" "big_endian" |
27 |
| - "-assume" "byterecl") |
28 |
| - elseif(GNUComp) |
29 |
| - set(fortran_flags "-O2" "-ggdb" "-fbacktrace" "-ffree-form" |
30 |
| - "-fconvert=big-endian" "-funroll-loops" "-Wall") |
31 |
| - else() |
32 |
| - message("unknown compiler!") |
33 |
| - exit() |
34 |
| - endif() |
| 9 | +if(NOT CMAKE_BUILD_TYPE MATCHES "^(Debug|Release|RelWithDebInfo|MinSizeRel)$") |
| 10 | + message(STATUS "Setting build type to 'Release' as none was specified.") |
| 11 | + set(CMAKE_BUILD_TYPE |
| 12 | + "Release" |
| 13 | + CACHE STRING "Choose the type of build." FORCE) |
| 14 | + set_property(CACHE CMAKE_BUILD_TYPE PROPERTY STRINGS "Debug" "Release" |
| 15 | + "MinSizeRel" "RelWithDebInfo") |
35 | 16 | endif()
|
36 | 17 |
|
37 |
| -set(lib_name ${PROJECT_NAME}) |
38 |
| -set(versioned_lib_name ${PROJECT_NAME}_v${PROJECT_VERSION}) |
39 |
| - |
40 |
| -file(GLOB fortran_src ${CMAKE_CURRENT_SOURCE_DIR}/src/*.f) |
41 |
| -add_library(${lib_name} STATIC ${fortran_src}) |
42 |
| -set_target_properties(${lib_name} PROPERTIES OUTPUT_NAME "${versioned_lib_name}") |
43 |
| - |
44 |
| -target_compile_options(${lib_name} PRIVATE ${fortran_flags}) |
45 |
| - |
46 |
| -set(module_dir "${PROJECT_BINARY_DIR}/include_4") |
47 |
| -set_target_properties(${lib_name} PROPERTIES Fortran_MODULE_DIRECTORY ${module_dir}) |
48 |
| - |
49 |
| -target_include_directories(${lib_name} PUBLIC |
50 |
| - $<BUILD_INTERFACE:${module_dir}> |
51 |
| - $<INSTALL_INTERFACE:${CMAKE_INSTALL_PREFIX}/include_4>) |
| 18 | +if(NOT CMAKE_Fortran_COMPILER_ID MATCHES "^(Intel|GNU|Clang|AppleClang)$") |
| 19 | + message( |
| 20 | + WARNING "Compiler not officially supported: ${CMAKE_Fortran_COMPILER_ID}") |
| 21 | +endif() |
52 | 22 |
|
53 |
| -install(TARGETS ${lib_name} |
54 |
| - EXPORT ${PROJECT_NAME}-config |
55 |
| - RUNTIME DESTINATION bin |
56 |
| - LIBRARY DESTINATION lib |
57 |
| - ARCHIVE DESTINATION lib) |
58 |
| -install(DIRECTORY ${module_dir} DESTINATION ${CMAKE_INSTALL_PREFIX}) |
59 |
| -install(EXPORT ${PROJECT_NAME}-config DESTINATION ${CMAKE_INSTALL_PREFIX}) |
| 23 | +add_subdirectory(src) |
60 | 24 |
|
| 25 | +if (ENABLE_TESTS) |
| 26 | + find_package(PFUNIT REQUIRED) |
| 27 | + enable_testing() |
| 28 | + add_subdirectory(tests) |
| 29 | +endif() |
0 commit comments