|
|
|
@ -16,90 +16,6 @@ endif() |
|
|
|
set_property(DIRECTORY APPEND PROPERTY |
|
|
|
COMPILE_DEFINITIONS $<$<CONFIG:Debug>:_DEBUG> $<$<NOT:$<CONFIG:Debug>>:NDEBUG>) |
|
|
|
|
|
|
|
# Platform detection macros |
|
|
|
if(WIN32) |
|
|
|
add_compile_definitions(PLATFORM_WINDOWS) |
|
|
|
elseif(ANDROID) |
|
|
|
add_compile_definitions(PLATFORM_ANDROID) |
|
|
|
elseif(APPLE) |
|
|
|
add_compile_definitions(PLATFORM_MACOS) |
|
|
|
elseif(CMAKE_SYSTEM_NAME STREQUAL "FreeBSD") |
|
|
|
add_compile_definitions(PLATFORM_FREEBSD) |
|
|
|
elseif(UNIX) |
|
|
|
add_compile_definitions(PLATFORM_LINUX) |
|
|
|
endif() |
|
|
|
|
|
|
|
# Architecture-specific intrinsics flags |
|
|
|
if(ARCHITECTURE_x86_64) |
|
|
|
add_compile_definitions(ARCH_X86_64) |
|
|
|
|
|
|
|
if(MSVC AND NOT CXX_CLANG) |
|
|
|
# MSVC: Enable AVX2 (includes BMI2 support) |
|
|
|
add_compile_options(/arch:AVX2) |
|
|
|
else() |
|
|
|
# GCC/Clang: Enable SSE4.2, AVX2, and BMI2 |
|
|
|
include(CheckCXXCompilerFlag) |
|
|
|
|
|
|
|
check_cxx_compiler_flag("-mavx2" COMPILER_SUPPORTS_AVX2) |
|
|
|
check_cxx_compiler_flag("-mbmi2" COMPILER_SUPPORTS_BMI2) |
|
|
|
|
|
|
|
if(COMPILER_SUPPORTS_AVX2) |
|
|
|
add_compile_options(-mavx2) |
|
|
|
endif() |
|
|
|
|
|
|
|
if(COMPILER_SUPPORTS_BMI2) |
|
|
|
add_compile_options(-mbmi2) |
|
|
|
add_compile_definitions(HAS_BMI2) |
|
|
|
endif() |
|
|
|
endif() |
|
|
|
|
|
|
|
elseif(ARCHITECTURE_arm64) |
|
|
|
add_compile_definitions(ARCH_ARM64) |
|
|
|
|
|
|
|
# ARM64 has NEON by default, but enable explicitly for some compilers |
|
|
|
if(NOT MSVC) |
|
|
|
add_compile_options(-march=armv8-a) |
|
|
|
endif() |
|
|
|
|
|
|
|
# Android-specific ARM64 configuration |
|
|
|
if(ANDROID AND ANDROID_ABI STREQUAL "arm64-v8a") |
|
|
|
add_compile_options(-march=armv8-a+simd) |
|
|
|
endif() |
|
|
|
|
|
|
|
elseif(ARCHITECTURE_arm) |
|
|
|
add_compile_definitions(ARCH_ARM32) |
|
|
|
|
|
|
|
# Check for NEON support on ARM32 |
|
|
|
if(NOT MSVC) |
|
|
|
include(CheckCXXCompilerFlag) |
|
|
|
check_cxx_compiler_flag("-mfpu=neon" COMPILER_SUPPORTS_NEON) |
|
|
|
|
|
|
|
if(COMPILER_SUPPORTS_NEON) |
|
|
|
add_compile_options(-mfpu=neon) |
|
|
|
add_compile_definitions(HAS_NEON) |
|
|
|
|
|
|
|
# Android ARM32 specific |
|
|
|
if(ANDROID) |
|
|
|
add_compile_options(-mfloat-abi=softfp) |
|
|
|
endif() |
|
|
|
endif() |
|
|
|
endif() |
|
|
|
endif() |
|
|
|
|
|
|
|
# Android-specific ABI configurations |
|
|
|
if(ANDROID) |
|
|
|
if(ANDROID_ABI STREQUAL "x86_64") |
|
|
|
add_compile_definitions(ARCH_X86_64) |
|
|
|
if(NOT MSVC) |
|
|
|
add_compile_options(-msse4.2 -mavx2 -mbmi2) |
|
|
|
endif() |
|
|
|
elseif(ANDROID_ABI STREQUAL "armeabi-v7a") |
|
|
|
add_compile_definitions(ARCH_ARM32) |
|
|
|
add_compile_options(-mfpu=neon -mfloat-abi=softfp) |
|
|
|
add_compile_definitions(HAS_NEON) |
|
|
|
endif() |
|
|
|
endif() |
|
|
|
|
|
|
|
# Set compilation flags |
|
|
|
if (MSVC AND NOT CXX_CLANG) |
|
|
|
set(CMAKE_CONFIGURATION_TYPES Debug Release CACHE STRING "" FORCE) |
|
|
|
|