mirror of
https://github.com/LadybirdBrowser/ladybird.git
synced 2025-06-08 05:27:14 +09:00

If we are doing a statically linked build, there is no need for full `-fPIC`, just `-fpie` is enough (which lets the compiler assume that global variables can be accessed directly without the GOT, etc.). CMake does the right thing already when we set the `POSITION_INDEPENDENT_CODE` property.
92 lines
2.7 KiB
CMake
92 lines
2.7 KiB
CMake
include(${CMAKE_CURRENT_LIST_DIR}/common_compile_options.cmake)
|
|
|
|
add_cxx_compile_options(-Wno-maybe-uninitialized)
|
|
add_cxx_compile_options(-Wno-shorten-64-to-32)
|
|
|
|
if(NOT MSVC)
|
|
add_cxx_compile_options(-fsigned-char)
|
|
add_cxx_compile_options(-ggnu-pubnames)
|
|
else()
|
|
# char is signed
|
|
add_cxx_compile_options(/J)
|
|
# full symbolic debugginng information
|
|
add_cxx_compile_options(/Z7)
|
|
endif()
|
|
|
|
include(CheckPIESupported)
|
|
check_pie_supported(LANGUAGES CXX)
|
|
if(CMAKE_CXX_LINK_PIE_SUPPORTED)
|
|
set(CMAKE_POSITION_INDEPENDENT_CODE ON)
|
|
endif()
|
|
|
|
if (LINUX)
|
|
add_cxx_compile_definitions(_FILE_OFFSET_BITS=64)
|
|
endif()
|
|
|
|
if (APPLE)
|
|
list(APPEND CMAKE_PREFIX_PATH /opt/homebrew)
|
|
endif()
|
|
|
|
if (CMAKE_BUILD_TYPE STREQUAL "Debug")
|
|
if (NOT MSVC)
|
|
add_cxx_compile_options(-ggdb3)
|
|
endif()
|
|
add_cxx_compile_options(-Og)
|
|
elseif (CMAKE_BUILD_TYPE STREQUAL "RelWithDebInfo")
|
|
add_cxx_compile_options(-O2)
|
|
if (NOT MSVC)
|
|
add_cxx_compile_options(-g1)
|
|
endif()
|
|
else()
|
|
add_cxx_compile_options(-O3)
|
|
|
|
if (ENABLE_LTO_FOR_RELEASE)
|
|
include(CheckIPOSupported)
|
|
check_ipo_supported(RESULT IPO_AVAILABLE OUTPUT output)
|
|
if(IPO_AVAILABLE)
|
|
set(CMAKE_INTERPROCEDURAL_OPTIMIZATION TRUE)
|
|
else()
|
|
message(WARNING "Not enabling IPO as it is not supported: ${output}")
|
|
endif()
|
|
endif()
|
|
endif()
|
|
|
|
function(add_cxx_linker_flag_if_supported flag)
|
|
include(CheckLinkerFlag)
|
|
|
|
check_linker_flag(CXX ${flag} LAGOM_LINKER_SUPPORTS_${flag})
|
|
if (${LAGOM_LINKER_SUPPORTS_${flag}})
|
|
add_cxx_link_options(${flag})
|
|
endif()
|
|
endfunction()
|
|
|
|
if (NOT WIN32)
|
|
add_cxx_linker_flag_if_supported(LINKER:--gdb-index)
|
|
|
|
if (NOT ENABLE_FUZZERS)
|
|
add_cxx_linker_flag_if_supported(LINKER:-Bsymbolic-non-weak-functions)
|
|
endif()
|
|
endif()
|
|
|
|
if (NOT WIN32 AND NOT APPLE AND NOT ENABLE_FUZZERS)
|
|
# NOTE: Assume ELF
|
|
# NOTE: --no-undefined is not compatible with clang sanitizer runtimes
|
|
if (CMAKE_CXX_COMPILER_ID MATCHES "Clang$" AND (ENABLE_ADDRESS_SANITIZER OR ENABLE_MEMORY_SANITIZER OR ENABLE_UNDEFINED_SANITIZER OR ENABLE_LAGOM_COVERAGE_COLLECTION))
|
|
add_link_options(LINKER:--allow-shlib-undefined)
|
|
add_link_options(LINKER:-z,undefs)
|
|
else()
|
|
add_link_options(LINKER:-z,defs)
|
|
add_link_options(LINKER:--no-undefined)
|
|
add_link_options(LINKER:--no-allow-shlib-undefined)
|
|
endif()
|
|
endif()
|
|
|
|
if (ENABLE_LAGOM_COVERAGE_COLLECTION)
|
|
if (CMAKE_CXX_COMPILER_ID MATCHES "Clang$" AND NOT ENABLE_FUZZERS)
|
|
add_cxx_compile_options(-fprofile-instr-generate -fcoverage-mapping)
|
|
add_cxx_link_options(-fprofile-instr-generate)
|
|
else()
|
|
message(FATAL_ERROR
|
|
"Collecting code coverage is unsupported in this configuration.")
|
|
endif()
|
|
endif()
|