@@ -29,18 +29,23 @@ set(CMAKE_POSITION_INDEPENDENT_CODE ON)
2929set (BASE_C_FLAGS "-fPIC -fno-strict-overflow -fno-strict-aliasing" )
3030set (BASE_CXX_FLAGS "-fPIC -fno-strict-overflow -fno-strict-aliasing" )
3131
32- # Compiler-specific flags
32+ # Compiler-specific flags.
3333if (CMAKE_CXX_COMPILER_ID STREQUAL "GNU" )
34- set (COMPILER_SPECIFIC_FLAGS "-Wno-cast-user-defined -Wno-array-bounds -Wno-type-limits" )
35- elseif (CMAKE_CXX_COMPILER_ID STREQUAL "Clang" )
36- set (COMPILER_SPECIFIC_FLAGS "-Wno-array-bounds" )
34+ set (COMPILER_SPECIFIC_C_FLAGS "-Wno-array-bounds -Wno-type-limits" )
35+ set (COMPILER_SPECIFIC_CXX_FLAGS "-Wno-cast-user-defined ${COMPILER_SPECIFIC_C_FLAGS} " )
36+ elseif (CMAKE_CXX_COMPILER_ID MATCHES "Clang" )
37+ # GLCache/segment.c stores INT64_MAX into a double field; AppleClang 21 flags the
38+ # value change as -Wimplicit-const-int-float-conversion and -Werror makes it fatal.
39+ set (COMPILER_SPECIFIC_C_FLAGS "-Wno-array-bounds -Wno-implicit-const-int-float-conversion" )
40+ set (COMPILER_SPECIFIC_CXX_FLAGS "${COMPILER_SPECIFIC_C_FLAGS} " )
3741else ()
38- set (COMPILER_SPECIFIC_FLAGS "" )
42+ set (COMPILER_SPECIFIC_C_FLAGS "" )
43+ set (COMPILER_SPECIFIC_CXX_FLAGS "" )
3944endif ()
4045
4146# Apply flags
42- set (CMAKE_C_FLAGS "${CMAKE_C_FLAGS } ${BASE_C_FLAGS} " )
43- set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS } ${BASE_CXX_FLAGS} ${COMPILER_SPECIFIC_FLAGS } " )
47+ set (CMAKE_C_FLAGS "${CMAKE_C_FLAGS } ${BASE_C_FLAGS} ${COMPILER_SPECIFIC_C_FLAGS} " )
48+ set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS } ${BASE_CXX_FLAGS} ${COMPILER_SPECIFIC_CXX_FLAGS } " )
4449
4550# =============================================================================
4651# Git Submodule Management
@@ -80,13 +85,16 @@ endif()
8085function (build_libcachesim )
8186 message (STATUS "Building libCacheSim..." )
8287
83- # Prepare CMake arguments for subproject
88+ # Prepare CMake arguments for subproject.
89+ # The C flags carry the compiler-specific suppressions too: libCacheSim is mostly
90+ # C, and passing them only to the C++ compiler left its C sources exposed to
91+ # upstream's -Werror.
8492 set (CMAKE_ARGS
85- "-DCMAKE_C_FLAGS=${BASE_C_FLAGS} "
86- "-DCMAKE_CXX_FLAGS=${BASE_CXX_FLAGS} ${COMPILER_SPECIFIC_FLAGS } "
87- "-DCMAKE_CXX_FLAGS_DEBUG=-g ${BASE_CXX_FLAGS} ${COMPILER_SPECIFIC_FLAGS } "
88- "-DCMAKE_CXX_FLAGS_RELEASE=-O3 ${BASE_CXX_FLAGS} ${COMPILER_SPECIFIC_FLAGS } "
89- "-DCMAKE_CXX_FLAGS_RELWITHDEBINFO=-O2 -g -DNDEBUG ${BASE_CXX_FLAGS} ${COMPILER_SPECIFIC_FLAGS } "
93+ "-DCMAKE_C_FLAGS=${BASE_C_FLAGS} ${COMPILER_SPECIFIC_C_FLAGS} "
94+ "-DCMAKE_CXX_FLAGS=${BASE_CXX_FLAGS} ${COMPILER_SPECIFIC_CXX_FLAGS } "
95+ "-DCMAKE_CXX_FLAGS_DEBUG=-g ${BASE_CXX_FLAGS} ${COMPILER_SPECIFIC_CXX_FLAGS } "
96+ "-DCMAKE_CXX_FLAGS_RELEASE=-O3 ${BASE_CXX_FLAGS} ${COMPILER_SPECIFIC_CXX_FLAGS } "
97+ "-DCMAKE_CXX_FLAGS_RELWITHDEBINFO=-O2 -g -DNDEBUG ${BASE_CXX_FLAGS} ${COMPILER_SPECIFIC_CXX_FLAGS } "
9098 )
9199
92100 # Configure libCacheSim
0 commit comments