1- cmake_minimum_required (VERSION 3.0.2 )
1+ cmake_minimum_required (VERSION 3.12...3.31 )
22
33# Disable the use of RPATHS - we probably are not
44# that interested in relocatable binaries and it
@@ -20,37 +20,37 @@ set(CMAKE_CXX_STANDARD 11)
2020set (CMAKE_CXX_STANDARD_REQUIRED ON )
2121set (CMAKE_CXX_EXTENSIONS OFF )
2222set (VERSION 2.0.10)
23- include (CheckCXXCompilerFlag)
24- if (${CMAKE_CXX_COMPILER_ID} MATCHES "GNU" )
25- set (CXX_FLAGS_TO_CHECK "-Wall -Wextra -fvisibility-inlines-hidden -fmessage-length=0 -ftree-vectorize -fstack-protector-strong -O2 -pipe -fext-numeric-literals" )
26- set (CXX_FLAGS_DEBUG_TO_CHECK "${CMAKE_CXX_FLAGS_DEBUG} -fsanitize=address ${CMAKE_CXX_FLAGS_TO_CHECK} " )
27- set (CMAKE_EXE_LINKER_FLAGS_DEBUG "-fsanitize=address" )
28- else ()
29- set (CXX_FLAGS_TO_CHECK "-Wall -Wextra" )
30- set (CXX_FLAGS_DEBUG_TO_CHECK "${CMAKE_CXX_FLAGS_DEBUG} -fsanitize=address ${CMAKE_CXX_FLAGS_TO_CHECK} " )
31- endif ()
32- set (CXX_FLAGS_PASSED )
33- set (CXX_FLAGS_DEBUG_PASSED )
34- foreach (fl ${CXX_FLAGS_TO_CHECK} )
35- CHECK_CXX_COMPILER_FLAG(${fl} COMPILER_SUPPORTS_${fl} )
36- if (COMPILER_SUPPORTS_${fl} )
37- set (CXX_FLAGS_PASSED "${CXX_FLAGS_PASSED} ${fl} " )
23+
24+ # Set default CXXFLAGS but allow for environment override
25+ # c.f. https://cmake.org/cmake/help/v3.31/envvar/CXXFLAGS.html
26+ if (NOT CMAKE_CXX_FLAGS )
27+ # c.f. https://cmake.org/cmake/help/latest/variable/CMAKE_LANG_COMPILER_ID.html
28+ if (${CMAKE_CXX_COMPILER_ID} MATCHES "GNU" )
29+ set (CMAKE_CXX_FLAGS "-Wall -Wextra -fvisibility-inlines-hidden -fmessage-length=0 -ftree-vectorize -fstack-protector-strong -O2 -pipe -fext-numeric-literals" )
30+ else ()
31+ set (CMAKE_CXX_FLAGS "-Wall -Wextra" )
3832 endif ()
39- endforeach ()
40- foreach (fl ${CXX_FLAGS_DEBUG_TO_CHECK} )
41- CHECK_CXX_COMPILER_FLAG(${fl} COMPILER_SUPPORTS_${fl} )
42- if (COMPILER_SUPPORTS_${fl} )
43- set (CXX_FLAGS_DEBUG_PASSED "${CXX_FLAGS_DEBUG_PASSED} ${fl} " )
33+ else ()
34+ if (${CMAKE_CXX_COMPILER_ID} MATCHES "GNU" )
35+ # Ensure -fext-numeric-literals is in CMAKE_CXX_FLAGS
36+ string (FIND "${CMAKE_CXX_FLAGS} " "-fext-numeric-literals" _found_ext_numeric_literals)
37+ if (_found_ext_numeric_literals EQUAL -1)
38+ set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fext-numeric-literals" CACHE STRING "Update environment CXXFLAGS" FORCE)
39+ endif ()
4440 endif ()
45- endforeach ()
46- set (CMAKE_CXX_FLAGS ${CXX_FLAGS_PASSED} )
47- set (CMAKE_CXX_FLAGS_DEBUG ${CXX_FLAGS_DEBUG_PASSED} )
48- message (STATUS "CMAKE_CXX_FLAGS=${CMAKE_CXX_FLAGS} " )
49- message (STATUS "CMAKE_CXX_FLAGS_DEBUG=${CMAKE_CXX_FLAGS_DEBUG} " )
41+ endif ()
42+
43+ # TODO: QCDLoop is currently only well tested on GNU, so other compiler
44+ # and linker defaults should be added as they become known
45+ if (${CMAKE_CXX_COMPILER_ID} MATCHES "GNU" )
46+ set (CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} -fsanitize=address ${CMAKE_CXX_FLAGS} " CACHE STRING "debug CXXFLAGS" FORCE)
47+ set (CMAKE_EXE_LINKER_FLAGS_DEBUG "${CMAKE_EXE_LINKER_FLAGS_DEBUG} -fsanitize=address" CACHE STRING "debug linker flags" FORCE)
48+ endif ()
49+
5050set (prefix ${CMAKE_INSTALL_PREFIX} )
5151set (exec_prefix ${CMAKE_INSTALL_PREFIX} )
52- set (includedir " ${CMAKE_INSTALL_INCLUDE_DIR} " )
53- set (libdir " ${CMAKE_INSTALL_LIBDIR} " )
52+ set (includedir ${CMAKE_INSTALL_INCLUDEDIR} )
53+ set (libdir ${CMAKE_INSTALL_LIBDIR} )
5454
5555configure_file (
5656 "${PROJECT_SOURCE_DIR} /src/qcdloop/config.h.in"
@@ -75,6 +75,7 @@ find_library(QUADMATH_LIBRARY
7575 /usr/local/lib /usr/x86_64-linux-gnu/*
7676 /usr/lib/gcc/x86_64-linux-gnu/*
7777 /usr/lib/gcc/x86_64-redhat-linux/*
78+ "${CMAKE_INSTALL_PREFIX} /${CMAKE_INSTALL_LIBDIR} "
7879)
7980
8081if (QUADMATH_LIBRARY)
0 commit comments