|
@@ -3,6 +3,7 @@ set(_GNU_COMMON_C_CXX_FLAGS "\
|
|
|
-fno-common \
|
|
|
-fcolor-diagnostics \
|
|
|
-faligned-allocation \
|
|
|
+ -fdebug-default-version=4 \
|
|
|
-ffunction-sections \
|
|
|
-fdata-sections \
|
|
|
-Wall \
|
|
@@ -18,60 +19,79 @@ set(_GNU_COMMON_C_CXX_FLAGS "\
|
|
|
-D_LARGEFILE_SOURCE \
|
|
|
-D__STDC_CONSTANT_MACROS \
|
|
|
-D__STDC_FORMAT_MACROS \
|
|
|
- -D_GNU_SOURCE \
|
|
|
-D__LONG_LONG_SUPPORTED \
|
|
|
- -D_YNDX_LIBUNWIND_ENABLE_EXCEPTION_BACKTRACE \
|
|
|
- -D_libunwind_ \
|
|
|
- -DLIBCXX_BUILDING_LIBCXXRT \
|
|
|
")
|
|
|
|
|
|
-set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${_GNU_COMMON_C_CXX_FLAGS} \
|
|
|
- -D_FILE_OFFSET_BITS=64 \
|
|
|
-")
|
|
|
-set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${_GNU_COMMON_C_CXX_FLAGS} \
|
|
|
- -Woverloaded-virtual \
|
|
|
- -Wimport-preprocessor-directive-pedantic \
|
|
|
- -Wno-undefined-var-template \
|
|
|
- -Wno-return-std-move \
|
|
|
- -Wno-defaulted-function-deleted \
|
|
|
- -Wno-pessimizing-move \
|
|
|
- -Wno-deprecated-anon-enum-enum-conversion \
|
|
|
- -Wno-deprecated-enum-enum-conversion \
|
|
|
- -Wno-deprecated-enum-float-conversion \
|
|
|
- -Wno-ambiguous-reversed-operator \
|
|
|
- -Wno-deprecated-volatile \
|
|
|
-")
|
|
|
+if (CMAKE_SYSTEM_NAME MATCHES "^(Android|Linux)$")
|
|
|
+ string(APPEND _GNU_COMMON_C_CXX_FLAGS " -D_GNU_SOURCE")
|
|
|
+endif()
|
|
|
+
|
|
|
+if (CMAKE_SYSTEM_NAME MATCHES "^(Darwin|Linux)$")
|
|
|
+ string(APPEND _GNU_COMMON_C_CXX_FLAGS " -DLIBCXX_BUILDING_LIBCXXRT")
|
|
|
+endif()
|
|
|
|
|
|
-if (NOT APPLE)
|
|
|
- set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fuse-init-array")
|
|
|
- set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fuse-init-array")
|
|
|
+if (CMAKE_SYSTEM_NAME STREQUAL "Linux")
|
|
|
+ # Use .init_array instead of .ctors (default for old clang versions)
|
|
|
+ # See: https://maskray.me/blog/2021-11-07-init-ctors-init-array
|
|
|
+ string(APPEND _GNU_COMMON_C_CXX_FLAGS " -fuse-init-array")
|
|
|
endif()
|
|
|
|
|
|
if (ANDROID)
|
|
|
include_directories(SYSTEM ${CMAKE_ANDROID_NDK}/sources/cxx-stl/llvm-libc++abi/include)
|
|
|
- set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fsigned-char")
|
|
|
- set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fsigned-char")
|
|
|
+
|
|
|
+ # There is no usable _FILE_OFFSET_BITS=64 support in Androids until API 21. And it's incomplete until at least API 24.
|
|
|
+ # https://android.googlesource.com/platform/bionic/+/master/docs/32-bit-abi.md
|
|
|
else()
|
|
|
- set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -D_FILE_OFFSET_BITS=64")
|
|
|
+ string(APPEND _GNU_COMMON_C_CXX_FLAGS " -D_FILE_OFFSET_BITS=64")
|
|
|
endif()
|
|
|
|
|
|
-if (CMAKE_SYSTEM_PROCESSOR STREQUAL "aarch64")
|
|
|
- set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fsigned-char")
|
|
|
- set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fsigned-char")
|
|
|
+if (CMAKE_SYSTEM_PROCESSOR MATCHES "^(arm.*|aarch64)")
|
|
|
+ string(APPEND _GNU_COMMON_C_CXX_FLAGS " -fsigned-char")
|
|
|
endif()
|
|
|
|
|
|
-if ((CMAKE_SYSTEM_PROCESSOR STREQUAL "x86_64") OR (CMAKE_SYSTEM_PROCESSOR STREQUAL "AMD64"))
|
|
|
- set(_X86_64_GNU_COMPILER_FLAGS "\
|
|
|
- -m64 \
|
|
|
+if (CMAKE_SYSTEM_PROCESSOR MATCHES "^(i686|x86_64|AMD64)$")
|
|
|
+ if (CMAKE_SYSTEM_PROCESSOR STREQUAL "i686")
|
|
|
+ string(APPEND _GNU_COMMON_C_CXX_FLAGS " -m32")
|
|
|
+ elseif (CMAKE_SYSTEM_PROCESSOR MATCHES "^(x86_64|AMD64)$")
|
|
|
+ string(APPEND _GNU_COMMON_C_CXX_FLAGS " -m64")
|
|
|
+ endif()
|
|
|
+ string(APPEND _GNU_COMMON_C_CXX_FLAGS "\
|
|
|
-msse2 \
|
|
|
-msse3 \
|
|
|
-mssse3 \
|
|
|
- -msse4.1 \
|
|
|
- -msse4.2 \
|
|
|
- -mpopcnt \
|
|
|
- -mcx16 \
|
|
|
")
|
|
|
|
|
|
- set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${_X86_64_GNU_COMPILER_FLAGS}")
|
|
|
- set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${_X86_64_GNU_COMPILER_FLAGS}")
|
|
|
+ if ((CMAKE_SYSTEM_PROCESSOR MATCHES "^(x86_64|AMD64)$") OR (NOT ANDROID))
|
|
|
+ string(APPEND _GNU_COMMON_C_CXX_FLAGS "\
|
|
|
+ -msse4.1 \
|
|
|
+ -msse4.2 \
|
|
|
+ -mpopcnt \
|
|
|
+ ")
|
|
|
+ if (NOT ANDROID)
|
|
|
+ # older clang versions did not support this feature on Android:
|
|
|
+ # https://reviews.llvm.org/rGc32d307a49f5255602e7543e64e6c38a7f536abc
|
|
|
+ string(APPEND _GNU_COMMON_C_CXX_FLAGS " -mcx16")
|
|
|
+ endif()
|
|
|
+ endif()
|
|
|
+
|
|
|
+ if (CMAKE_SYSTEM_NAME STREQUAL "Linux")
|
|
|
+ string(APPEND _GNU_COMMON_C_CXX_FLAGS " -D_YNDX_LIBUNWIND_ENABLE_EXCEPTION_BACKTRACE")
|
|
|
+ endif()
|
|
|
+elseif (ANDROID AND (CMAKE_ANDROID_ARCH_ABI STREQUAL "armeabi-v7a"))
|
|
|
+ string(APPEND _GNU_COMMON_C_CXX_FLAGS " -mfloat-abi=softfp")
|
|
|
endif()
|
|
|
+
|
|
|
+set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${_GNU_COMMON_C_CXX_FLAGS}")
|
|
|
+set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${_GNU_COMMON_C_CXX_FLAGS} \
|
|
|
+ -Woverloaded-virtual \
|
|
|
+ -Wimport-preprocessor-directive-pedantic \
|
|
|
+ -Wno-undefined-var-template \
|
|
|
+ -Wno-return-std-move \
|
|
|
+ -Wno-defaulted-function-deleted \
|
|
|
+ -Wno-pessimizing-move \
|
|
|
+ -Wno-deprecated-anon-enum-enum-conversion \
|
|
|
+ -Wno-deprecated-enum-enum-conversion \
|
|
|
+ -Wno-deprecated-enum-float-conversion \
|
|
|
+ -Wno-ambiguous-reversed-operator \
|
|
|
+ -Wno-deprecated-volatile \
|
|
|
+")
|