escargot/build/target.cmake
Ádám László Kulcsár 634fe864d7 Add -Wno-maybe-uninitialized build option for GCC 16
Signed-off-by: Ádám László Kulcsár <adam.kulcsar@szteszoftver.hu>
2026-05-11 20:40:32 +09:00

227 lines
11 KiB
CMake

# default set of each flag
SET (ESCARGOT_CXXFLAGS)
SET (ESCARGOT_CXXFLAGS_DEBUG)
SET (ESCARGOT_CXXFLAGS_RELEASE)
SET (ESCARGOT_LDFLAGS)
SET (ESCARGOT_DEFINITIONS)
SET (ESCARGOT_THIRDPARTY_CFLAGS)
SET (ESCARGOT_BUILD_32BIT OFF)
SET (ESCARGOT_BUILD_64BIT OFF)
SET (ESCARGOT_BUILD_64BIT_LARGE OFF)
IF (ESCARGOT_ASAN)
SET (ESCARGOT_BUILD_64BIT_LARGE ON)
ENDIF()
# clang-cl defines ${CMAKE_CXX_COMPILER_ID} "Clang" and ${CMAKE_CXX_COMPILER_FRONTEND_VARIANT} "MSVC"
SET (COMPILER_CLANG_CL OFF)
IF (${CMAKE_CXX_COMPILER_ID} STREQUAL "Clang")
IF (DEFINED CMAKE_CXX_COMPILER_FRONTEND_VARIANT)
IF ("${CMAKE_CXX_COMPILER_FRONTEND_VARIANT}" STREQUAL "MSVC")
SET (COMPILER_CLANG_CL ON)
ENDIF()
ENDIF()
ENDIF()
# Default options per compiler
IF (${CMAKE_CXX_COMPILER_ID} STREQUAL "MSVC" OR ${COMPILER_CLANG_CL})
SET (ESCARGOT_COMPILER_ID "MSVC")
SET (ESCARGOT_CXXFLAGS /std:c++17 /fp:strict /Zc:__cplusplus /EHs /source-charset:utf-8 /MP /D_CRT_SECURE_NO_WARNINGS /DGC_NOT_DLL /D_SILENCE_CXX17_ITERATOR_BASE_CLASS_DEPRECATION_WARNING /wd4244 /wd4267 /wd4805 /wd4018 /wd4172 /wd4146)
SET (ESCARGOT_CXXFLAGS_RELEASE /O2 /Oy-)
SET (ESCARGOT_THIRDPARTY_CFLAGS /D_CRT_SECURE_NO_WARNINGS /DGC_NOT_DLL /Oy- /wd4146 /EHs)
IF (${COMPILER_CLANG_CL})
SET (ESCARGOT_CXXFLAGS ${ESCARGOT_CXXFLAGS} /EHs -Wno-invalid-offsetof -Wno-inline-new-delete -fintegrated-cc1)
ENDIF()
IF (ESCARGOT_SMALL_CONFIG)
SET (ESCARGOT_CXXFLAGS_RELEASE ${ESCARGOT_CXXFLAGS_RELEASE} /Os)
ENDIF()
ELSEIF (${CMAKE_CXX_COMPILER_ID} STREQUAL "GNU")
SET (ESCARGOT_COMPILER_ID "GCC")
SET (ESCARGOT_CXXFLAGS
${ESCARGOT_CXXFLAGS}
-std=c++11 -g3
-fno-rtti
-fno-math-errno
-fdata-sections -ffunction-sections
-fno-omit-frame-pointer
-fvisibility=hidden
-frounding-math -fsignaling-nans
-Wno-unused-parameter
-Wno-type-limits -Wno-unused-result -Wno-unused-variable -Wno-invalid-offsetof
-Wno-unused-but-set-variable -Wno-unused-but-set-parameter
-Wno-deprecated-declarations -Wno-unused-function
)
IF (CMAKE_CXX_COMPILER_VERSION VERSION_GREATER_EQUAL 16)
SET (ESCARGOT_CXXFLAGS ${ESCARGOT_CXXFLAGS} -Wno-maybe-uninitialized)
ENDIF()
IF (CMAKE_CXX_COMPILER_VERSION VERSION_GREATER 9)
SET (ESCARGOT_CXXFLAGS ${ESCARGOT_CXXFLAGS} -Wno-attributes -Wno-class-memaccess -Wno-deprecated-copy -Wno-cast-function-type -Wno-stringop-truncation -Wno-pessimizing-move -Wno-mismatched-new-delete -Wno-overloaded-virtual -Wno-dangling-pointer)
endif()
SET (ESCARGOT_CXXFLAGS_DEBUG -O0 -Wall -Wextra -Werror)
SET (ESCARGOT_CXXFLAGS_RELEASE -O2 -fno-stack-protector -fno-omit-frame-pointer)
IF (ESCARGOT_SMALL_CONFIG)
IF (CMAKE_CXX_COMPILER_VERSION VERSION_LESS_EQUAL 9)
# BUG?) -Os option has unknown memory conflicts (might be related with gcc version)
# enable this option only for old gcc version
SET (ESCARGOT_CXXFLAGS_RELEASE ${ESCARGOT_CXXFLAGS_RELEASE} -Os)
ENDIF()
ENDIF()
SET (ESCARGOT_THIRDPARTY_CFLAGS -w -g3 -fdata-sections -ffunction-sections -fno-omit-frame-pointer -fvisibility=hidden)
ELSEIF (${CMAKE_CXX_COMPILER_ID} MATCHES "Clang") #include Clang and AppleClang both
SET (ESCARGOT_COMPILER_ID "CLANG")
SET (ESCARGOT_CXXFLAGS
${ESCARGOT_CXXFLAGS}
-std=c++11 -g3
-fno-rtti
-fno-math-errno
-fdata-sections -ffunction-sections
-fno-omit-frame-pointer
-fvisibility=hidden
-fno-fast-math -fno-unsafe-math-optimizations -fdenormal-fp-math=ieee
-Wno-type-limits -Wno-unused-result -Wno-unused-variable -Wno-invalid-offsetof -Wno-unused-function
-Wno-deprecated-declarations -Wno-parentheses-equality -Wno-dynamic-class-memaccess -Wno-deprecated-register
-Wno-expansion-to-defined -Wno-return-type -Wno-overloaded-virtual -Wno-unused-private-field -Wno-deprecated-copy -Wno-atomic-alignment
-Wno-ambiguous-reversed-operator -Wno-deprecated-enum-enum-conversion -Wno-deprecated-enum-float-conversion -Wno-braced-scalar-init -Wno-unused-parameter -Wno-deprecated-literal-operator -Wno-cast-function-type-mismatch
-Wno-unknown-warning-option
)
IF (CMAKE_CXX_COMPILER_VERSION VERSION_GREATER 10)
# this feature supported after clang version 11
SET (ESCARGOT_CXXFLAGS ${ESCARGOT_CXXFLAGS} -Wno-unsupported-floating-point-opt)
endif()
SET (ESCARGOT_CXXFLAGS_DEBUG -O0 -Wall -Wextra -Werror)
SET (ESCARGOT_CXXFLAGS_RELEASE -O2 -fno-stack-protector -fno-omit-frame-pointer)
IF (ESCARGOT_SMALL_CONFIG)
SET (ESCARGOT_CXXFLAGS_RELEASE ${ESCARGOT_CXXFLAGS_RELEASE} -Os)
ENDIF()
SET (ESCARGOT_THIRDPARTY_CFLAGS -w -g3 -fdata-sections -ffunction-sections -fno-omit-frame-pointer -fvisibility=hidden)
ELSE()
MESSAGE (FATAL_ERROR ${CMAKE_CXX_COMPILER_ID} " is Unsupported Compiler")
ENDIF()
# Default options per host
IF (${ESCARGOT_HOST} STREQUAL "linux")
FIND_PACKAGE (PkgConfig REQUIRED)
IF (ESCARGOT_THREADING)
SET (ESCARGOT_LIBRARIES ${ESCARGOT_LIBRARIES} atomic)
ENDIF()
# default set of LDFLAGS
SET (ESCARGOT_LDFLAGS -lpthread -lrt -Wl,--gc-sections)
IF ((${ESCARGOT_ARCH} STREQUAL "x64") OR (${ESCARGOT_ARCH} STREQUAL "x86_64"))
SET (ESCARGOT_BUILD_64BIT ON)
ELSEIF ((${ESCARGOT_ARCH} STREQUAL "x86") OR (${ESCARGOT_ARCH} STREQUAL "i686"))
SET (ESCARGOT_BUILD_32BIT ON)
SET (ESCARGOT_CXXFLAGS ${ESCARGOT_CXXFLAGS} -m32 -mfpmath=sse -msse -msse2)
SET (ESCARGOT_LDFLAGS ${ESCARGOT_LDFLAGS} -m32)
SET (ESCARGOT_THIRDPARTY_CFLAGS ${ESCARGOT_THIRDPARTY_CFLAGS} -m32)
ELSEIF (${ESCARGOT_ARCH} STREQUAL "arm")
SET (ESCARGOT_BUILD_32BIT ON)
ELSEIF (${ESCARGOT_ARCH} STREQUAL "aarch64")
SET (ESCARGOT_BUILD_64BIT ON)
ELSEIF (${ESCARGOT_ARCH} STREQUAL "riscv64")
SET (ESCARGOT_BUILD_64BIT ON)
SET (ESCARGOT_BUILD_64BIT_LARGE ON)
ELSE()
MESSAGE (FATAL_ERROR ${ESCARGOT_ARCH} " is unsupported")
ENDIF()
ELSEIF (${ESCARGOT_HOST} STREQUAL "tizen" OR ${ESCARGOT_HOST} STREQUAL "tizen_obs")
FIND_PACKAGE (PkgConfig REQUIRED)
# default set of LDFLAGS
SET (ESCARGOT_LDFLAGS -lpthread -lrt -Wl,--gc-sections)
IF (ESCARGOT_THREADING)
SET (ESCARGOT_LIBRARIES ${ESCARGOT_LIBRARIES} atomic)
ENDIF()
SET (ESCARGOT_DEFINITIONS -DESCARGOT_TIZEN)
IF ((${ESCARGOT_ARCH} STREQUAL "x64") OR (${ESCARGOT_ARCH} STREQUAL "x86_64"))
SET (ESCARGOT_BUILD_64BIT ON)
ELSEIF ((${ESCARGOT_ARCH} STREQUAL "x86") OR (${ESCARGOT_ARCH} STREQUAL "i686"))
SET (ESCARGOT_BUILD_32BIT ON)
SET (ESCARGOT_CXXFLAGS ${ESCARGOT_CXXFLAGS} -m32 -mfpmath=sse -msse -msse2)
SET (ESCARGOT_LDFLAGS ${ESCARGOT_LDFLAGS} -m32)
SET (ESCARGOT_THIRDPARTY_CFLAGS ${ESCARGOT_THIRDPARTY_CFLAGS} -m32)
ELSEIF (${ESCARGOT_ARCH} STREQUAL "arm")
SET (ESCARGOT_BUILD_32BIT ON)
SET (ESCARGOT_CXXFLAGS_DEBUG -O1)
SET (ESCARGOT_CXXFLAGS_RELEASE -O2)
ELSEIF (${ESCARGOT_ARCH} STREQUAL "aarch64")
SET (ESCARGOT_BUILD_64BIT ON)
SET (ESCARGOT_BUILD_64BIT_LARGE ON)
ELSEIF (${ESCARGOT_ARCH} STREQUAL "riscv64")
SET (ESCARGOT_BUILD_64BIT ON)
SET (ESCARGOT_BUILD_64BIT_LARGE ON)
ELSE()
MESSAGE (FATAL_ERROR ${ESCARGOT_ARCH} " is unsupported")
ENDIF()
ELSEIF (${ESCARGOT_HOST} STREQUAL "android")
FIND_PACKAGE (PkgConfig REQUIRED)
IF (ESCARGOT_THREADING)
SET (ESCARGOT_LIBRARIES ${ESCARGOT_LIBRARIES} atomic)
ENDIF()
SET (ESCARGOT_DEFINITIONS -DANDROID=1 -DESCARGOT_ANDROID=1)
SET (ESCARGOT_THIRDPARTY_CFLAGS ${ESCARGOT_THIRDPARTY_CFLAGS} -mstackrealign)
SET (ESCARGOT_CXXFLAGS ${ESCARGOT_CXXFLAGS} -mstackrealign)
IF (${ESCARGOT_ARCH} STREQUAL "arm")
SET (ESCARGOT_BUILD_32BIT ON)
SET (ESCARGOT_LDFLAGS -fPIE -pie -march=armv7-a -Wl,--fix-cortex-a8 -llog -Wl,--gc-sections)
ELSEIF ((${ESCARGOT_ARCH} STREQUAL "arm64") OR (${ESCARGOT_ARCH} STREQUAL "aarch64"))
SET (ESCARGOT_BUILD_64BIT ON)
SET (ESCARGOT_LDFLAGS -fPIE -pie -llog -Wl,--gc-sections)
ELSEIF (${ESCARGOT_ARCH} STREQUAL "x86")
SET (ESCARGOT_BUILD_32BIT ON)
SET (ESCARGOT_CXXFLAGS ${ESCARGOT_CXXFLAGS} -m32 -mfpmath=sse -msse -msse2 -mstackrealign)
SET (ESCARGOT_LDFLAGS -fPIE -pie -llog -Wl,--gc-sections -m32)
ELSEIF (${ESCARGOT_ARCH} STREQUAL "x86_64" OR ${ESCARGOT_ARCH} STREQUAL "x64")
SET (ESCARGOT_BUILD_64BIT ON)
SET (ESCARGOT_LDFLAGS -fPIE -pie -llog -Wl,--gc-sections)
# bdwgc android amd64 cannot support keeping back ptrs
SET (ESCARGOT_THIRDPARTY_CFLAGS ${ESCARGOT_THIRDPARTY_CFLAGS} -UKEEP_BACK_PTRS -USAVE_CALL_COUNT -UDBG_HDRS_ALL)
ENDIF()
ELSEIF (${ESCARGOT_HOST} STREQUAL "darwin")
FIND_PACKAGE (PkgConfig REQUIRED)
IF ((NOT ${ESCARGOT_ARCH} STREQUAL "x64") AND (NOT ${ESCARGOT_ARCH} STREQUAL "aarch64"))
MESSAGE (FATAL_ERROR ${ESCARGOT_ARCH} " is unsupported")
ENDIF()
# recent macOS supports only ICU version 75 that requires c++17 or above
SET (ESCARGOT_CXXFLAGS ${ESCARGOT_CXXFLAGS} -std=c++17)
SET (ESCARGOT_LDFLAGS -lpthread -Wl,-dead_strip)
SET (ESCARGOT_BUILD_64BIT_LARGE ON)
# bdwgc mac cannot support pthread_getattr_np
SET (ESCARGOT_THIRDPARTY_CFLAGS ${ESCARGOT_THIRDPARTY_CFLAGS} -UHAVE_PTHREAD_GETATTR_NP)
# dlopen version not working correctly on mac
IF (NOT DEFINED ESCARGOT_LIBICU_SUPPORT_WITH_DLOPEN)
SET (ESCARGOT_LIBICU_SUPPORT_WITH_DLOPEN OFF)
ENDIF()
ELSEIF (${ESCARGOT_HOST} STREQUAL "windows")
SET (ESCARGOT_LDFLAGS ${ESCARGOT_LDFLAGS} icu.lib)
IF ((${ESCARGOT_ARCH} STREQUAL "x64") OR (${ESCARGOT_ARCH} STREQUAL "x86_64"))
SET (ESCARGOT_BUILD_64BIT ON)
SET (ESCARGOT_BUILD_64BIT_LARGE ON)
ELSEIF ((${ESCARGOT_ARCH} STREQUAL "x86") OR (${ESCARGOT_ARCH} STREQUAL "i686"))
SET (ESCARGOT_BUILD_32BIT ON)
ELSEIF (${ESCARGOT_ARCH} STREQUAL "arm")
SET (ESCARGOT_BUILD_32BIT ON)
ELSEIF (${ESCARGOT_ARCH} STREQUAL "aarch64" OR (${ESCARGOT_ARCH} STREQUAL "arm64"))
SET (ESCARGOT_BUILD_64BIT ON)
SET (ESCARGOT_BUILD_64BIT_LARGE ON)
ELSE()
MESSAGE (FATAL_ERROR ${ESCARGOT_ARCH} " is unsupported")
ENDIF()
ELSE()
MESSAGE (FATAL_ERROR ${ESCARGOT_HOST} " with " ${ESCARGOT_ARCH} " is unsupported")
ENDIF()
IF (ESCARGOT_BUILD_32BIT)
# 32bit build
SET (ESCARGOT_DEFINITIONS ${ESCARGOT_DEFINITIONS} -DESCARGOT_32=1)
ELSEIF ((ESCARGOT_BUILD_64BIT_LARGE) OR (ESCARGOT_BUILD_64BIT AND ESCARGOT_BUILD_64BIT_FORCE_LARGE))
# 64bit build(large)
SET (ESCARGOT_DEFINITIONS ${ESCARGOT_DEFINITIONS} -DESCARGOT_64=1)
ELSEIF (ESCARGOT_BUILD_64BIT)
# 64bit build
SET (ESCARGOT_DEFINITIONS ${ESCARGOT_DEFINITIONS} -DESCARGOT_64=1 -DESCARGOT_USE_32BIT_IN_64BIT)
SET (ESCARGOT_THIRDPARTY_CFLAGS ${ESCARGOT_THIRDPARTY_CFLAGS} -DESCARGOT_USE_32BIT_IN_64BIT)
ELSE()
MESSAGE (FATAL_ERROR "unsupported mode")
ENDIF()