Skip to content

Commit 1bc31df

Browse files
authored
Merge pull request #29 from matthewfeickert/fix/allow-setting-cmake-cxx-flags-from-cxx-flags
fix: Allow for environment override of CMAKE_CXX_FLAGS
2 parents b778fa9 + deac7cf commit 1bc31df

File tree

2 files changed

+33
-29
lines changed

2 files changed

+33
-29
lines changed

.gitignore

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -51,4 +51,7 @@ src/qcdloop/config.h
5151
src/qcdloop/stamp-h1
5252
examples/cache_test
5353
examples/cmass_test
54-
examples/trigger_test
54+
examples/trigger_test
55+
# pixi environments
56+
.pixi
57+
*.egg-info

CMakeLists.txt

Lines changed: 29 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
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)
2020
set(CMAKE_CXX_STANDARD_REQUIRED ON)
2121
set(CMAKE_CXX_EXTENSIONS OFF)
2222
set(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+
5050
set(prefix ${CMAKE_INSTALL_PREFIX})
5151
set(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

5555
configure_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

8081
if(QUADMATH_LIBRARY)

0 commit comments

Comments
 (0)