Skip to content

Commit 4fc6101

Browse files
committed
Refactor CMakeLists.txt
- By default, build Debug instead or Relase if not defined - Be more verbose about what has been found and what is missing - Make it "Nix compatible" - Add summary to the end, clearly showing what has been opted in and out
1 parent 51f94f4 commit 4fc6101

File tree

1 file changed

+80
-6
lines changed

1 file changed

+80
-6
lines changed

CMakeLists.txt

Lines changed: 80 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -8,8 +8,10 @@ set(CMAKE_CXX_STANDARD 17)
88
set(CMAKE_CXX_STANDARD_REQUIRED ON)
99
set(CMAKE_CXX_EXTENSIONS OFF)
1010

11+
# Default to Debug build type if not set
1112
if(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)
1315
endif()
1416

1517
message(STATUS "Build type: ${CMAKE_BUILD_TYPE}")
@@ -44,22 +46,35 @@ endif()
4446
option(OpenPFC_BUILD_DOCUMENTATION "Build documentation" ON)
4547

4648
if(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()
5658
endif()
5759

5860
# Prefer "config mode", i.e. system wide installed packages
5961
set(CMAKE_FIND_PACKAGE_PREFER_CONFIG ON)
6062

6163
find_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+
6378
find_package(nlohmann_json REQUIRED)
6479

6580
add_library(OpenPFC INTERFACE)
@@ -77,18 +92,29 @@ option(OpenPFC_BUILD_TESTS "Build OpenPFC tests" ON)
7792
option(OpenPFC_ENABLE_CODE_COVERAGE "Enable coverage" ON)
7893

7994
if(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()
81104
endif()
82105

83106
if(OpenPFC_BUILD_APPS)
107+
message(STATUS "📦 Building applications")
84108
add_subdirectory(apps)
85109
endif()
86110

87111
if(OpenPFC_BUILD_EXAMPLES)
112+
message(STATUS "📚 Building examples")
88113
add_subdirectory(examples)
89114
endif()
90115

91116
if(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")
94120
endif()
@@ -141,3 +167,51 @@ install(FILES
141167
export(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

Comments
 (0)