From 1c0eea679ae4351c77c912988d0a24d90809965a Mon Sep 17 00:00:00 2001 From: Martijn van Beurden Date: Sat, 17 Sep 2022 09:20:15 +0200 Subject: [CMake] Prepend compiler flags, fix Clang compiler warnings Because of issue https://github.com/xiph/flac/issues/437 compiler flags are prepended instead of appended, so the user can override them without altering the CMakeLists.txt. Also, Clang doesn't support per-function optimize options, so in CMake the fma file gets that option per-file. This is not supported by automake. --- CMakeLists.txt | 9 +++++---- src/libFLAC/CMakeLists.txt | 3 +++ src/libFLAC/include/private/cpu.h | 2 +- 3 files changed, 9 insertions(+), 5 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 73a36cc1..b255f7b3 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -83,14 +83,15 @@ if(NOT WIN32) endif() if(CMAKE_C_COMPILER_ID MATCHES "GNU|Clang") - set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wall -Wextra -Wstrict-prototypes -Wmissing-prototypes -Waggregate-return -Wcast-align -Wnested-externs -Wshadow -Wundef -Wmissing-declarations -Winline") - set(CMAKE_C_FLAGS_RELEASE "${CMAKE_C_FLAGS_RELEASE} -O3 -funroll-loops") + set(CMAKE_C_FLAGS "-Wall -Wextra -Wstrict-prototypes -Wmissing-prototypes -Waggregate-return -Wcast-align -Wnested-externs -Wshadow -Wundef -Wmissing-declarations -Winline ${CMAKE_C_FLAGS}") + set(CMAKE_C_FLAGS_RELEASE "-DNDEBUG ${CMAKE_C_FLAGS_RELEASE}") endif() if(CMAKE_CXX_COMPILER_ID MATCHES "GNU|Clang") - set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wall -Wextra -Wcast-align -Wshadow -Wwrite-strings -Wctor-dtor-privacy -Wnon-virtual-dtor -Wreorder -Wsign-promo -Wundef") + set(CMAKE_CXX_FLAGS "-Wall -Wextra -Wcast-align -Wshadow -Wwrite-strings -Wctor-dtor-privacy -Wnon-virtual-dtor -Wreorder -Wsign-promo -Wundef ${CMAKE_CXX_FLAGS}") + set(CMAKE_C_FLAGS_RELEASE "-DNDEBUG ${CMAKE_CXX_FLAGS_RELEASE}") endif() if(MSVC) - set(CMAKE_C_FLAGS_RELEASE "${CMAKE_C_FLAGS_RELEASE} /O2 /Ob2 /Oi /Ot /Oy") + set(CMAKE_C_FLAGS_RELEASE "/O2 /Ob2 /Oi /Ot /Oy /DNDEBUG ${CMAKE_C_FLAGS_RELEASE}") endif() include(CMakePackageConfigHelpers) diff --git a/src/libFLAC/CMakeLists.txt b/src/libFLAC/CMakeLists.txt index 50cb6dbf..13dc129d 100644 --- a/src/libFLAC/CMakeLists.txt +++ b/src/libFLAC/CMakeLists.txt @@ -24,6 +24,9 @@ if(FLAC__CPU_X86_64 OR FLAC__CPU_IA32) set_source_files_properties(lpc_intrin_avx2.c stream_encoder_intrin_avx2.c PROPERTIES COMPILE_FLAGS /arch:AVX2) set_source_files_properties(lpc_intrin_fma.c PROPERTIES COMPILE_FLAGS "/arch:AVX2 /fp:fast") endif() + if(WITH_AVX AND (CMAKE_C_COMPILER_ID MATCHES "Clang")) + set_source_files_properties(lpc_intrin_fma.c PROPERTIES COMPILE_FLAGS "-ffast-math") + endif() else() check_cpu_arch_ppc64(FLAC__CPU_PPC64) if(FLAC__CPU_PPC64) diff --git a/src/libFLAC/include/private/cpu.h b/src/libFLAC/include/private/cpu.h index e5d23a7f..335b2f81 100644 --- a/src/libFLAC/include/private/cpu.h +++ b/src/libFLAC/include/private/cpu.h @@ -81,7 +81,7 @@ #endif #elif defined __clang__ && __has_attribute(__target__) /* clang */ #define FLAC__SSE_TARGET(x) __attribute__ ((__target__ (x))) - #define FLAC__FAST_MATH_TARGET(x) __attribute__ ((__target__ (x), optimize("-ffast-math"))) + #define FLAC__FAST_MATH_TARGET(x) __attribute__ ((__target__ (x))) #if __has_builtin(__builtin_ia32_maxps) #define FLAC__SSE_SUPPORTED 1 #endif -- cgit v1.2.1