Skip to content

Commit 4d5d3fa

Browse files
committed
Merge pull request #121 from torbjoernk/feature/build-tweaks
Some awesome CMake tweaks and tricks for advanced feature reporting at the end of a CMake run
2 parents 73d8c40 + 23f3949 commit 4d5d3fa

File tree

10 files changed

+163
-92
lines changed

10 files changed

+163
-92
lines changed

.travis.yml

Lines changed: 0 additions & 47 deletions
This file was deleted.

3rdparty/CMakeLists.txt

Lines changed: 97 additions & 35 deletions
Original file line numberDiff line numberDiff line change
@@ -13,12 +13,14 @@ if(${compiler_version_available} AND ${CMAKE_CXX_COMPILER_ID} MATCHES Clang)
1313
set(Boost_COMPILER "-clang${CMAKE_CXX_COMPILER_VERSION_MAJOR}${CMAKE_CXX_COMPILER_VERSION_MINOR}")
1414
endif()
1515

16-
if(${CMAKE_VERBOSE_MAKEFILE})
17-
set(Boost_DEBUG ON)
18-
set(Boost_DETAILED_FAILURE_MSG ON)
19-
endif()
20-
2116
find_package(Boost 1.53.0 COMPONENTS program_options REQUIRED)
17+
set_package_properties(Boost
18+
PROPERTIES
19+
DESCRIPTION "C++ libraries"
20+
URL "http://boost.org/"
21+
TYPE REQUIRED
22+
PURPOSE "command line parameter parsing"
23+
)
2224
message(STATUS "Boost include path: ${Boost_INCLUDE_DIRS}")
2325
message(STATUS "Boost library path: ${Boost_LIBRARY_DIRS}")
2426
list(APPEND 3rdparty_INCLUDES ${Boost_INCLUDE_DIRS})
@@ -29,6 +31,13 @@ message(STATUS "----------------------------------------------------------------
2931
message(STATUS "Eigen3")
3032

3133
find_package(Eigen3)
34+
set_package_properties(Eigen3
35+
PROPERTIES
36+
DESCRIPTION "linear algebra library"
37+
URL "http://eigen.tuxfamily.org/"
38+
TYPE REQUIRED
39+
PURPOSE "matrix and vector types and arithmetics"
40+
)
3241

3342
if(NOT EIGEN3_FOUND)
3443
set(EIGEN3_SOURCE_URL "http://bitbucket.org/eigen/eigen/get/3.2.2.tar.bz2")
@@ -57,50 +66,92 @@ if(NOT EIGEN3_FOUND)
5766
)
5867

5968
# Specify include dir
60-
set(Eigen3_INCLUDE_PATH "${Eigen3_SOURCE_DIR}")
69+
set(Eigen3_INCLUDE_PATH "${Eigen3_SOURCE_DIR}" CACHE PATH "" FORCE)
70+
71+
mark_as_advanced(Eigen3_INCLUDE_PATH)
72+
set(Eigen3_FOUND TRUE)
73+
set_property(GLOBAL APPEND PROPERTY PACKAGES_FOUND "Eigen3")
74+
get_property(packages_not_found GLOBAL PROPERTY PACKAGES_NOT_FOUND)
75+
list(REMOVE_ITEM packages_not_found "Eigen3")
76+
set_property(GLOBAL PROPERTY PACKAGES_NOT_FOUND ${packages_not_found})
77+
unset(packages_not_found)
78+
6179
list(APPEND pfasst_DEPENDEND_TARGETS Eigen3)
6280
endif()
6381

6482
list(APPEND 3rdparty_INCLUDES "${Eigen3_INCLUDE_PATH}")
6583

6684

6785
message(STATUS "--------------------------------------------------------------------------------")
68-
message(STATUS "easyloggingpp")
69-
70-
set(EASYLOGGINGPP_SOURCE_URL "https://github.com/easylogging/easyloggingpp/releases/download/v9.75/easyloggingpp_v9.75.tar.gz")
71-
# message(STATUS "easyloggingpp not found on your system")
72-
message(STATUS " going to download sources")
73-
message(STATUS " download URL: ${EASYLOGGINGPP_SOURCE_URL}")
74-
set(easyloggingpp_SOURCE_DIR "${pfasst_BINARY_DIR}/3rdparty/src/easyloggingpp")
75-
76-
ExternalProject_Add(
77-
easyloggingpp
78-
LIST_SEPARATOR " "
79-
URL ${EASYLOGGINGPP_SOURCE_URL}
80-
URL_MD5 3e37462b30cb6ee49faeed6a94d1bc1e
81-
TIMEOUT 30
82-
UPDATE_COMMAND ""
83-
PATCH_COMMAND ""
84-
CONFIGURE_COMMAND ""
85-
BUILD_COMMAND ""
86-
TEST_COMMAND ""
87-
INSTALL_DIR ""
88-
INSTALL_COMMAND ""
89-
LOG_DOWNLOAD ON
90-
LOG_CONFIGURE OFF
91-
LOG_BUILD OFF
86+
message(STATUS "Easyloggingpp")
87+
88+
set(EASYLOGGINGPP_SOURCE_URL
89+
"https://github.com/easylogging/easyloggingpp/releases/download/v9.75/easyloggingpp_v9.75.tar.gz"
9290
)
9391

94-
# Specify include dir
95-
set(easyloggingpp_INCLUDE_PATH "${easyloggingpp_SOURCE_DIR}")
96-
list(APPEND 3rdparty_INCLUDES "${easyloggingpp_INCLUDE_PATH}")
92+
find_package(Easyloggingpp)
93+
set_package_properties(Easyloggingpp
94+
PROPERTIES
95+
DESCRIPTION "Easylogging++ logging library"
96+
URL "https://github.com/easylogging/easyloggingpp"
97+
TYPE REQUIRED
98+
PURPOSE "provides functionality for versatile logging"
99+
)
100+
101+
if(NOT Easyloggingpp_FOUND)
102+
unset(Easyloggingpp_INCLUDE_PATH)
103+
unset(Easyloggingpp_INCLUDE_PATH CACHE)
104+
unset(Easyloggingpp_FOUND)
105+
message(STATUS "Easyloggingpp not found on your system")
106+
message(STATUS " going to download sources")
107+
message(STATUS " download URL: ${EASYLOGGINGPP_SOURCE_URL}")
108+
set(Easyloggingpp_SOURCE_DIR "${pfasst_BINARY_DIR}/3rdparty/src/Easyloggingpp")
109+
ExternalProject_Add(
110+
Easyloggingpp
111+
LIST_SEPARATOR " "
112+
URL ${EASYLOGGINGPP_SOURCE_URL}
113+
URL_MD5 3e37462b30cb6ee49faeed6a94d1bc1e
114+
TIMEOUT 30
115+
UPDATE_COMMAND ""
116+
PATCH_COMMAND ""
117+
CONFIGURE_COMMAND ""
118+
BUILD_COMMAND ""
119+
TEST_COMMAND ""
120+
INSTALL_DIR ""
121+
INSTALL_COMMAND ""
122+
LOG_DOWNLOAD ON
123+
LOG_CONFIGURE OFF
124+
LOG_BUILD OFF
125+
)
126+
127+
# Specify include dir and hack on CMake internals to overwrite internal not-found flag
128+
set(Easyloggingpp_INCLUDE_PATH "${Easyloggingpp_SOURCE_DIR}" CACHE PATH "" FORCE)
129+
mark_as_advanced(Easyloggingpp_INCLUDE_PATH)
130+
set(Easyloggingpp_FOUND TRUE)
131+
set_property(GLOBAL APPEND PROPERTY PACKAGES_FOUND "Easyloggingpp")
132+
get_property(packages_not_found GLOBAL PROPERTY PACKAGES_NOT_FOUND)
133+
list(REMOVE_ITEM packages_not_found "Easyloggingpp")
134+
set_property(GLOBAL PROPERTY PACKAGES_NOT_FOUND ${packages_not_found})
135+
unset(packages_not_found)
136+
137+
list(APPEND pfasst_DEPENDEND_TARGETS Easyloggingpp)
138+
endif()
139+
140+
list(APPEND 3rdparty_INCLUDES "${Easyloggingpp_INCLUDE_PATH}")
97141

98142

99143
if(pfasst_BUILD_EXAMPLES)
100144
message(STATUS "--------------------------------------------------------------------------------")
101145
message(STATUS "FFTW3")
102146

103147
find_package(FFTW)
148+
set_package_properties(FFTW
149+
PROPERTIES
150+
DESCRIPTION "FFTW3"
151+
URL "http://fftw.org/"
152+
TYPE REQUIRED
153+
PURPOSE "fast Fourier transformation"
154+
)
104155

105156
if(NOT FFTW_FOUND)
106157
set(FFTW3_SOURCE_URL "http://fftw.org/fftw-3.3.4.tar.gz")
@@ -129,8 +180,19 @@ if(pfasst_BUILD_EXAMPLES)
129180
LOG_BUILD ON
130181
)
131182
# Specify include dir
132-
set(FFTW_INCLUDE_PATH ${fftw3_INSTALL_DIR}/include PARENT_SCOPE)
133-
set(FFTW_LIBRARIES ${fftw3_INSTALL_DIR}/lib/libfftw3.a PARENT_SCOPE)
183+
set(FFTW_INCLUDE_PATH ${fftw3_INSTALL_DIR}/include CACHE PATH "" FORCE PARENT_SCOPE)
184+
set(FFTW_LIBRARIES ${fftw3_INSTALL_DIR}/lib/libfftw3.a CACHE FILEPATH "" FORCE PARENT_SCOPE)
185+
186+
mark_as_advanced(FFTW_INCLUDE_PATH FFTW_LIBRARIES)
187+
set(FFTW_FOUND TRUE)
188+
set_property(GLOBAL APPEND PROPERTY PACKAGES_FOUND "FFTW")
189+
get_property(packages_not_found GLOBAL PROPERTY PACKAGES_NOT_FOUND)
190+
list(REMOVE_ITEM packages_not_found "FFTW")
191+
set_property(GLOBAL PROPERTY PACKAGES_NOT_FOUND ${packages_not_found})
192+
unset(packages_not_found)
193+
194+
list(APPEND pfasst_DEPENDEND_LIBS FFTW)
195+
134196
else()
135197
set(FFTW_INCLUDE_PATH ${FFTW_INCLUDE_PATH} PARENT_SCOPE)
136198
set(FFTW_LIBRARIES ${FFTW_LIBRARIES} PARENT_SCOPE)

CMakeLists.txt

Lines changed: 30 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,14 +5,17 @@ list(APPEND CMAKE_MODULE_PATH ${pfasst_SOURCE_DIR}/cmake)
55
include(cmake/utility_functions.cmake)
66
include(CheckCXXCompilerFlag)
77
include(ExternalProject)
8+
include(CMakeDependentOption)
9+
include(FeatureSummary)
810

911
# Set default ExternalProject root directory
1012
set_directory_properties(PROPERTIES EP_PREFIX ${CMAKE_BINARY_DIR}/3rdparty)
1113

1214
option(pfasst_DISABLE_LIBCXX "Disable use of LLVM's libc++ when compiling with Clang." ON )
1315
option(pfasst_BUILD_SHARED_LIBS "Build shared libraries." OFF)
1416
option(pfasst_BUILD_EXAMPLES "Build example programs." ON )
15-
option(pfasst_INSTALL_EXAMPLES "Install example programs." OFF)
17+
CMAKE_DEPENDENT_OPTION(pfasst_INSTALL_EXAMPLES "Install example programs." ON
18+
"pfasst_BUILD_EXAMPLES" OFF)
1619
option(pfasst_BUILD_TESTS "Build test suite for PFASST." ON )
1720
option(pfasst_WITH_MPI "Build with MPI enabled." OFF)
1821
option(pfasst_WITH_GCC_PROF "Enable excessive debugging & profiling output with GCC." OFF)
@@ -78,6 +81,27 @@ endif()
7881
# Enable all compiler warnings
7982
add_to_string_list("${CMAKE_CXX_FLAGS}" CMAKE_CXX_FLAGS "-Wall -Wextra -Wpedantic")
8083

84+
85+
# Set features from options
86+
add_feature_info(Examples
87+
pfasst_BUILD_EXAMPLES
88+
"build example programs"
89+
)
90+
add_feature_info(Tests
91+
pfasst_BUILD_TESTS
92+
"build test suite"
93+
)
94+
add_feature_info(MPI
95+
pfasst_WITH_MPI
96+
"build with MPI"
97+
)
98+
if(${CMAKE_CXX_COMPILER_ID} MATCHES GNU)
99+
add_feature_info(Profiling
100+
pfasst_WITH_GCC_PROF
101+
"build-in profiling support"
102+
)
103+
endif()
104+
81105
set(3rdparty_INCLUDES)
82106
set(3rdparty_DEPENDEND_LIBS)
83107
set(pfasst_INCLUDES)
@@ -152,3 +176,8 @@ if(${CMAKE_VERBOSE_MAKEFILE})
152176
message(STATUS "C++ link flags: ${CMAKE_CXX_LINK_FLAGS}")
153177
message(STATUS "********************************************************************************")
154178
endif()
179+
180+
feature_summary(WHAT ENABLED_FEATURES DESCRIPTION "Enabled Features:")
181+
feature_summary(WHAT DISABLED_FEATURES DESCRIPTION "Disabled Features:")
182+
feature_summary(WHAT PACKAGES_FOUND DESCRIPTION "Packages Found (or auto-added):")
183+
feature_summary(WHAT PACKAGES_NOT_FOUND DESCRIPTION "Packages Not Found:")

cmake/FindEasyloggingpp.cmake

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
# - Find Easyloggingpp
2+
# Find the native Easyloggingpp includes
3+
#
4+
# Easyloggingpp_INCLUDE_PATH - where to find the single header file
5+
# Easyloggingpp_FOUND - True if Easyloggingpp found.
6+
7+
if(Easyloggingpp_INCLUDE_PATH)
8+
# Already in cache, be silent
9+
set(Easyloggingpp_FIND_QUIETLY TRUE)
10+
endif(Easyloggingpp_INCLUDE_PATH)
11+
12+
find_path(Easyloggingpp_INCLUDE_PATH
13+
easylogging++.h
14+
PATH_SUFFIXES easyloggingpp
15+
)
16+
17+
# handle the QUIETLY and REQUIRED arguments and set Easyloggingpp_FOUND to TRUE if
18+
# all listed variables are TRUE
19+
include(FindPackageHandleStandardArgs)
20+
find_package_handle_standard_args(Easyloggingpp
21+
DEFAULT_MSG
22+
Easyloggingpp_INCLUDE_PATH
23+
)
24+
25+
mark_as_advanced(Easyloggingpp_INCLUDE_PATH)

include/CMakeLists.txt

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -23,8 +23,8 @@ endif()
2323
# add_library(pfasst ${pfasst_SOURCES})
2424
# target_link_libraries(pfasst
2525
# ${3rdparty_DEPENDEND_LIBS}
26-
# ${pfasst_DEPENDED_LIBS}
26+
# ${pfasst_DEPENDEND_LIBS}
2727
# )
2828

2929
set(pfasst_INCLUDES ${pfasst_INCLUDES} PARENT_SCOPE)
30-
set(pfasst_DEPENDED_LIBS ${pfasst_DEPENDED_LIBS} PARENT_SCOPE)
30+
set(pfasst_DEPENDEND_LIBS ${pfasst_DEPENDEND_LIBS} PARENT_SCOPE)

tests/CMakeLists.txt

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@ foreach(test ${TESTS})
1818
target_link_libraries(${test}
1919
${3rdparty_DEPENDEND_LIBS}
2020
${TESTS_3rdparty_DEPENDEND_LIBS}
21-
${pfasst_DEPENDED_LIBS}
21+
${pfasst_DEPENDEND_LIBS}
2222
)
2323
if(pfasst_WITH_GCC_PROF AND ${CMAKE_CXX_COMPILER_ID} MATCHES GNU)
2424
set_target_properties(${test}
@@ -31,4 +31,6 @@ foreach(test ${TESTS})
3131
)
3232
endforeach(test)
3333

34-
add_subdirectory(examples)
34+
if(${pfasst_BUILD_EXAMPLES})
35+
add_subdirectory(examples)
36+
endif()

tests/examples/advection_diffusion/CMakeLists.txt

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,7 @@ foreach(test ${TESTS})
2727
${3rdparty_DEPENDEND_LIBS}
2828
${TESTS_3rdparty_DEPENDEND_LIBS}
2929
${FFTW_LIBRARIES}
30-
${pfasst_DEPENDED_LIBS}
30+
${pfasst_DEPENDEND_LIBS}
3131
)
3232
if(pfasst_WITH_GCC_PROF AND ${CMAKE_CXX_COMPILER_ID} MATCHES GNU)
3333
set_target_properties(${test}
@@ -66,7 +66,7 @@ if(${pfasst_WITH_MPI})
6666
${3rdparty_DEPENDEND_LIBS}
6767
${TESTS_3rdparty_DEPENDEND_LIBS}
6868
${FFTW_LIBRARIES}
69-
${pfasst_DEPENDED_LIBS}
69+
${pfasst_DEPENDEND_LIBS}
7070
${MPI_CXX_LIBRARIES}
7171
)
7272
add_test(NAME ${test}

tests/examples/boris/CMakeLists.txt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@ foreach(test ${TESTS})
1717
target_link_libraries(${test}
1818
${3rdparty_DEPENDEND_LIBS}
1919
${TESTS_3rdparty_DEPENDEND_LIBS}
20-
${pfasst_DEPENDED_LIBS}
20+
${pfasst_DEPENDEND_LIBS}
2121
)
2222
if(pfasst_WITH_GCC_PROF AND ${CMAKE_CXX_COMPILER_ID} MATCHES GNU)
2323
set_target_properties(${test}

tests/examples/scalar/CMakeLists.txt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@ foreach(test ${TESTS})
1717
target_link_libraries(${test}
1818
${3rdparty_DEPENDEND_LIBS}
1919
${TESTS_3rdparty_DEPENDEND_LIBS}
20-
${pfasst_DEPENDED_LIBS}
20+
${pfasst_DEPENDEND_LIBS}
2121
)
2222
if(pfasst_WITH_GCC_PROF AND ${CMAKE_CXX_COMPILER_ID} MATCHES GNU)
2323
set_target_properties(${test}

tests/examples/vanderpol/CMakeLists.txt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@ foreach(test ${TESTS})
1616
target_link_libraries(${test}
1717
${3rdparty_DEPENDEND_LIBS}
1818
${TESTS_3rdparty_DEPENDEND_LIBS}
19-
${pfasst_DEPENDED_LIBS}
19+
${pfasst_DEPENDEND_LIBS}
2020
)
2121
if(pfasst_WITH_GCC_PROF AND ${CMAKE_CXX_COMPILER_ID} MATCHES GNU)
2222
set_target_properties(${test}

0 commit comments

Comments
 (0)