mirror of
https://github.com/shadowsocks/shadowsocks-libev.git
synced 2026-09-26 19:13:54 +00:00
Bundle pinned offline dependencies, remove libcork/libipset and submodule requirements, and add portable runtime helpers with relocatable static/shared library installations.
Add Clang static build validation for Linux/musl, macOS and Windows, real TCP/UDP and SIP003 interoperability coverage, and recorded performance tradeoffs. All 21 hosted checks pass at the reviewed PR head 8d504e6218.
53 lines
2.3 KiB
CMake
53 lines
2.3 KiB
CMake
include(CheckCCompilerFlag)
|
|
option(DISABLE_SSP "Disable stack protector" OFF)
|
|
if(NOT DISABLE_SSP AND NOT MSVC)
|
|
check_c_compiler_flag(-fstack-protector-strong HAS_STACK_PROTECTOR)
|
|
endif()
|
|
|
|
function(ss_project_options target)
|
|
set_property(TARGET ${target} PROPERTY NO_SYSTEM_FROM_IMPORTED TRUE)
|
|
target_include_directories(${target} BEFORE PRIVATE ${MBEDTLS_INCLUDE_DIRS})
|
|
if(WIN32)
|
|
target_compile_definitions(${target} PRIVATE WIN32_LEAN_AND_MEAN __USE_MINGW_ANSI_STDIO=1)
|
|
# MinGW can otherwise pull in libwinpthread/libgcc from the toolchain,
|
|
# even when all explicitly selected dependencies are static archives.
|
|
get_target_property(ss_target_type ${target} TYPE)
|
|
# Zig already supplies its own runtime for DLLs; its -static switch
|
|
# changes the output kind instead of just selecting static libraries.
|
|
if(NOT ss_target_type STREQUAL "SHARED_LIBRARY" OR CMAKE_C_COMPILER_ID STREQUAL "GNU")
|
|
target_link_options(${target} PRIVATE -static)
|
|
endif()
|
|
endif()
|
|
if(MSVC)
|
|
target_compile_options(${target} PRIVATE /W4)
|
|
if(SS_WARNINGS_AS_ERRORS)
|
|
target_compile_options(${target} PRIVATE /WX)
|
|
endif()
|
|
else()
|
|
target_compile_options(${target} PRIVATE -Wall -Wno-deprecated-declarations -fno-strict-aliasing)
|
|
if(SS_WARNINGS_AS_ERRORS)
|
|
target_compile_options(${target} PRIVATE -Werror)
|
|
endif()
|
|
if(HAS_STACK_PROTECTOR)
|
|
target_compile_options(${target} PRIVATE -fstack-protector-strong)
|
|
endif()
|
|
if(MINGW OR CYGWIN)
|
|
target_compile_options(${target} PRIVATE -mno-ms-bitfields)
|
|
endif()
|
|
endif()
|
|
if(LINUX)
|
|
target_compile_definitions(${target} PRIVATE _GNU_SOURCE)
|
|
endif()
|
|
if(ENABLE_SANITIZERS)
|
|
if(MSVC)
|
|
message(FATAL_ERROR "ASan + UBSan requires GCC or Clang")
|
|
endif()
|
|
target_compile_options(${target} PRIVATE -fsanitize=address,undefined -fno-sanitize-recover=all -fno-omit-frame-pointer)
|
|
target_link_options(${target} PRIVATE -fsanitize=address,undefined)
|
|
endif()
|
|
if(ENABLE_COVERAGE)
|
|
target_compile_options(${target} PRIVATE -O0 --coverage)
|
|
target_link_options(${target} PRIVATE --coverage)
|
|
endif()
|
|
endfunction()
|