@@ -8,8 +8,10 @@ set(CMAKE_CXX_STANDARD 17)
88set (CMAKE_CXX_STANDARD_REQUIRED ON )
99set (CMAKE_CXX_EXTENSIONS OFF )
1010
11+ # Default to Debug build type if not set
1112if (NOT CMAKE_BUILD_TYPE )
12- set (CMAKE_BUILD_TYPE Release)
13+ message (STATUS "No build type selected, defaulting to Debug." )
14+ set (CMAKE_BUILD_TYPE "Debug" CACHE STRING "Choose the type of build." FORCE)
1315endif ()
1416
1517message (STATUS "Build type: ${CMAKE_BUILD_TYPE} " )
@@ -44,22 +46,35 @@ endif()
4446option (OpenPFC_BUILD_DOCUMENTATION "Build documentation" ON )
4547
4648if (OpenPFC_BUILD_DOCUMENTATION)
47- message (STATUS "Generating sources for documentation (build with target docs)" )
49+ message (STATUS "📚 Generating sources for documentation (build with target docs)" )
4850 find_package (Doxygen)
4951
5052 if (Doxygen_FOUND)
51- message (STATUS "Using Doxygen ${DOXYGEN_VERSION} found from ${DOXYGEN_EXECUTABLE} " )
53+ message (STATUS "✅ Doxygen v ${DOXYGEN_VERSION} found at ${DOXYGEN_EXECUTABLE} " )
5254 add_subdirectory (docs)
5355 else ()
54- message (STATUS " Doxygen not found, not building documentation" )
56+ message (WARNING "⚠️ Doxygen not found, skipping documentation generation. " )
5557 endif ()
5658endif ()
5759
5860# Prefer "config mode", i.e. system wide installed packages
5961set (CMAKE_FIND_PACKAGE_PREFER_CONFIG ON )
6062
6163find_package (MPI REQUIRED)
62- find_package (Heffte REQUIRED)
64+
65+ # Try to find HeFFTe installed on the system (e.g., installed by Nix)
66+ find_package (Heffte CONFIG QUIET )
67+ # If not found, fallback to downloading via FetchContent
68+ if (Heffte_FOUND)
69+ message (STATUS "✅ HeFFTe v${Heffte_VERSION} found at ${Heffte_DIR} " )
70+ else ()
71+ message (WARNING "⚠️ Heffte not found via find_package(), falling back to FetchContent." )
72+ include (cmake/FindHeffte.cmake)
73+ if (NOT Heffte_FOUND)
74+ message (FATAL_ERROR "HeFFTe not found. Please install HeFFTe or set the Heffte_DIR variable to the location of HeffteConfig.cmake." )
75+ endif ()
76+ endif ()
77+
6378find_package (nlohmann_json REQUIRED)
6479
6580add_library (OpenPFC INTERFACE )
@@ -77,18 +92,29 @@ option(OpenPFC_BUILD_TESTS "Build OpenPFC tests" ON)
7792option (OpenPFC_ENABLE_CODE_COVERAGE "Enable coverage" ON )
7893
7994if (OpenPFC_BUILD_TESTS)
80- add_subdirectory (tests)
95+ message (STATUS "🔍 Building tests" )
96+ find_package (Catch2 REQUIRED)
97+ if (Catch2_FOUND)
98+ message (STATUS "✅ Catch2 v${Catch2_VERSION} found at ${Catch2_DIR} " )
99+ add_subdirectory (tests)
100+ else ()
101+ message (WARNING "⚠️ Catch2 not found, skipping tests." )
102+ message (WARNING "⚠️ Please install Catch2 or set the CATCH2_DIR variable to the location of Catch2Config.cmake." )
103+ endif ()
81104endif ()
82105
83106if (OpenPFC_BUILD_APPS)
107+ message (STATUS "📦 Building applications" )
84108 add_subdirectory (apps)
85109endif ()
86110
87111if (OpenPFC_BUILD_EXAMPLES)
112+ message (STATUS "📚 Building examples" )
88113 add_subdirectory (examples)
89114endif ()
90115
91116if (OpenPFC_ENABLE_CODE_COVERAGE)
117+ message (STATUS "📊 Enabling code coverage" )
92118 set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} --coverage" )
93119 set (CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} --coverage" )
94120endif ()
@@ -141,3 +167,51 @@ install(FILES
141167export (EXPORT OpenPFCTargets
142168 FILE "${CMAKE_CURRENT_BINARY_DIR} /OpenPFCTargets.cmake"
143169)
170+
171+ # -----------------------------------------------------------------------------------
172+ # Final Build Summary
173+ # -----------------------------------------------------------------------------------
174+
175+ message (STATUS "-------------------------------------------------------------" )
176+ message (STATUS " ✅ OpenPFC Build Configuration Summary" )
177+ message (STATUS "-------------------------------------------------------------" )
178+
179+ message (STATUS " CMake Version : ${CMAKE_VERSION} " )
180+ message (STATUS " C++ Compiler : ${CMAKE_CXX_COMPILER_ID} ${CMAKE_CXX_COMPILER_VERSION} " )
181+ message (STATUS " C++ Standard : ${CMAKE_CXX_STANDARD} " )
182+ message (STATUS " Build Type : ${CMAKE_BUILD_TYPE} " )
183+ message (STATUS " Install RPATH : ${CMAKE_INSTALL_RPATH_USE_LINK_PATH} " )
184+
185+ message (STATUS "-------------------------------------------------------------" )
186+ message (STATUS " 📦 Third-Party Packages:" )
187+ message (STATUS " MPI : ${MPI_CXX_COMPILER} " )
188+ message (STATUS " Heffte_DIR : ${Heffte_DIR} " )
189+ message (STATUS " nlohmann_json : ${nlohmann_json_DIR} " )
190+ if (Doxygen_FOUND)
191+ message (STATUS " Doxygen : ${DOXYGEN_EXECUTABLE} (version ${DOXYGEN_VERSION} )" )
192+ else ()
193+ message (STATUS " Doxygen : NOT FOUND" )
194+ endif ()
195+ if (Catch2_FOUND)
196+ message (STATUS " Catch2 : ${Catch2_DIR} (version ${Catch2_VERSION} )" )
197+ else ()
198+ message (STATUS " Catch2 : NOT FOUND" )
199+ endif ()
200+
201+ message (STATUS "-------------------------------------------------------------" )
202+ message (STATUS " 🛠 Build Options:" )
203+ message (STATUS " OpenPFC_BUILD_APPS = ${OpenPFC_BUILD_APPS} " )
204+ message (STATUS " OpenPFC_BUILD_EXAMPLES = ${OpenPFC_BUILD_EXAMPLES} " )
205+ message (STATUS " OpenPFC_BUILD_TESTS = ${OpenPFC_BUILD_TESTS} " )
206+ message (STATUS " OpenPFC_BUILD_DOCUMENTATION = ${OpenPFC_BUILD_DOCUMENTATION} " )
207+ message (STATUS " OpenPFC_ENABLE_CODE_COVERAGE = ${OpenPFC_ENABLE_CODE_COVERAGE} " )
208+ message (STATUS " USE_CLANG_TIDY = ${USE_CLANG_TIDY} " )
209+ message (STATUS "-------------------------------------------------------------" )
210+ message (STATUS " 📂 Install prefix : ${CMAKE_INSTALL_PREFIX} " )
211+ message (STATUS "-------------------------------------------------------------" )
212+ message (STATUS " 🎉 Ready to build OpenPFC!" )
213+ message (STATUS "-------------------------------------------------------------" )
214+ message (STATUS "To build OpenPFC, run:" )
215+ message (STATUS " cmake --build build" )
216+ message (STATUS "-------------------------------------------------------------" )
217+
0 commit comments