1+ # --------------------- CMake configuration --------------------
12cmake_minimum_required (VERSION 3.20 )
23set (CMAKE_OSX_DEPLOYMENT_TARGET "15.0" CACHE STRING "Minimum OS X deployment version" )
3- project (SuPyMode VERSION " ${SUPYMODE_VERSION} " LANGUAGES CXX )
4+ project (SuPyMode LANGUAGES CXX )
45
56# CMake settings
67set (CMAKE_VERBOSE_MAKEFILE ON )
7- set (CMAKE_CXX_STANDARD 17 )
8+ set (CMAKE_CXX_STANDARD 20 )
89set (CMAKE_CXX_STANDARD_REQUIRED ON )
910set (CMAKE_POSITION_INDEPENDENT_CODE ON )
1011set (CMAKE_BUILD_TYPE "Release" CACHE STRING "Type of build" )
12+ # --------------------- CMake configuration --------------------
1113
12- # Set the output directory for libraries
14+
15+ # --------------------- Set the output directory for libraries --------------------
1316set (LOCAL_CXX_DIR "${PROJECT_NAME} /cpp" )
1417set (LOCAL_BIN_DIR "${CMAKE_SOURCE_DIR} /${PROJECT_NAME} /binary" )
18+ include_directories (${NAME} ${LOCAL_CXX_DIR} )
19+ # --------------------- Set the output directory for libraries --------------------
1520
16- # Find dependencies
21+ # --------------------- Platform-specific compiler and linker options --------------------
1722if (APPLE AND CMAKE_CXX_COMPILER_ID STREQUAL "AppleClang" )
1823 set (OpenMP_CXX_FLAGS "-Xpreprocessor -fopenmp" CACHE STRING "" )
1924 set (OpenMP_CXX_LIB_NAMES "omp" CACHE STRING "" )
@@ -23,10 +28,6 @@ if(APPLE AND CMAKE_CXX_COMPILER_ID STREQUAL "AppleClang")
2328 endif ()
2429endif ()
2530
26- find_package (OpenMP REQUIRED )
27- find_package (Python REQUIRED COMPONENTS Interpreter Development.Module )
28- find_package (pybind11 CONFIG REQUIRED )
29-
3031# Platform-specific settings for static linking
3132if (WIN32 AND CMAKE_CXX_COMPILER_ID STREQUAL "GNU" )
3233 message ("MinGW detected on Windows" )
@@ -35,17 +36,74 @@ if (WIN32 AND CMAKE_CXX_COMPILER_ID STREQUAL "GNU")
3536 add_link_options (-static -fopenmp -Wl,--whole-archive -lgomp -Wl,--no-whole-archive )
3637endif ()
3738
38- # Compiler and linker options
39- add_compile_options (-Wall -Wextra -pedantic-errors )
39+ if (WIN32 AND CMAKE_CXX_COMPILER_ID STREQUAL "MSVC" )
40+ add_compile_options (/W4 /permissive- /Zc:preprocessor )
41+ else ()
42+ add_compile_options (-Wall -Wextra -pedantic-errors -Wno-unused-parameter )
43+ endif ()
44+ # --------------------- Platform-specific compiler and linker options --------------------
45+
46+ # --------------------- Find dependencies and compile options --------------------
47+ find_package (OpenMP REQUIRED )
48+ find_package (Python REQUIRED COMPONENTS Interpreter Development.Module )
49+ find_package (pybind11 CONFIG REQUIRED )
50+ # --------------------- Find dependencies and compile options --------------------
51+
52+ # ----------------- logging build configuration --------------------
53+ message (STATUS "" )
54+ message (STATUS "==================== Build configuration ====================" )
55+
56+ message (STATUS "Compiler information" )
57+ message (STATUS " C compiler : ${CMAKE_C_COMPILER} " )
58+ message (STATUS " C compiler ID : ${CMAKE_C_COMPILER_ID} " )
59+ message (STATUS " C compiler version : ${CMAKE_C_COMPILER_VERSION} " )
60+
61+ message (STATUS " CXX compiler : ${CMAKE_CXX_COMPILER} " )
62+ message (STATUS " CXX compiler ID : ${CMAKE_CXX_COMPILER_ID} " )
63+ message (STATUS " CXX compiler version : ${CMAKE_CXX_COMPILER_VERSION} " )
64+
65+ message (STATUS " Fortran compiler : ${CMAKE_Fortran_COMPILER} " )
66+ message (STATUS " Fortran ID : ${CMAKE_Fortran_COMPILER_ID} " )
67+ message (STATUS " Fortran version : ${CMAKE_Fortran_COMPILER_VERSION} " )
68+
69+ message (STATUS "" )
70+ message (STATUS "OpenMP configuration" )
71+ message (STATUS " OpenMP flags : ${OpenMP_CXX_FLAGS} " )
72+ message (STATUS " OpenMP detected : ${OpenMP_FOUND} " )
73+ message (STATUS " OpenMP version : ${OpenMP_CXX_VERSION} " )
4074
41- # Print some messages
42- message (STATUS "OPENMP flags: ${OpenMP_CXX_FLAGS} " )
43- message (STATUS "SuPyMode version is : ${SUPYMODE_VERSION } " )
44- message (STATUS "SuPyMode includes directory is : ${SUPYMODE_CXX_DIR } " )
45- message (STATUS "Python version to be compiled against : ${PYBIND11_PYTHON_VERSION } " )
46- message (STATUS "Binary will be installed in location : ${LOCAL_BIN_DIR } " )
75+ message ( STATUS "" )
76+ message (STATUS "Python configuration " )
77+ message (STATUS " Python executable : ${Python_EXECUTABLE } " )
78+ message (STATUS " Python version : ${PYBIND11_PYTHON_VERSION } " )
79+ message (STATUS " Python include dir : ${Python_INCLUDE_DIRS } " )
80+ message (STATUS " Python site packages : ${Python_SITELIB } " )
4781
82+ message (STATUS "" )
83+ message (STATUS "SuPyMode integration" )
84+ message (STATUS " SuPyMode version : ${SUPYMODE_VERSION} " )
85+ message (STATUS " SuPyMode include dir : ${LOCAL_CXX_DIR} " )
86+
87+ message (STATUS "" )
88+ message (STATUS "Install destination" )
89+ message (STATUS " Binary output path : ${LOCAL_BIN_DIR} " )
90+
91+ message (STATUS "==============================================================" )
92+ message (STATUS "" )
93+ # ----------------- logging build configuration --------------------
94+
95+ # ----------------- collect subdirectories --------------------
4896add_subdirectory (SuPyMode/cpp/mesh ) # mesh
4997add_subdirectory (SuPyMode/cpp/model_parameters ) # model_parameters
5098add_subdirectory (SuPyMode/cpp/supermode ) # supermode
5199add_subdirectory (SuPyMode/cpp/eigensolver ) # eigen_solver
100+ # ----------------- collect subdirectories --------------------
101+
102+ get_property (SUPYMODE_TARGETS GLOBAL PROPERTY SUPYMODE_TARGETS )
103+
104+ install (
105+ TARGETS ${SUPYMODE_TARGETS}
106+ LIBRARY DESTINATION ${LOCAL_BIN_DIR}
107+ ARCHIVE DESTINATION ${LOCAL_BIN_DIR}
108+ RUNTIME DESTINATION ${LOCAL_BIN_DIR}
109+ )
0 commit comments