CMake: Use CMAKE_POSITION_INDEPENDENT_CODE instead of explicit -fpic

This makes CMake pass `-fpie` instead of `-fpic` to the compiler when
building the Kernel and userland *executables*. This allows the compiler
to make certain optimizations based on the fact that the code will be
used in an executable, such as not having to emit `.localalias` symbols.
This leads to a 450 KiB decrease in the size of the Kernel binary.
This commit is contained in:
Daniel Bertalan 2023-08-27 12:13:47 +02:00
parent 4defa401d3
commit 1f747b9132
Notes: sideshowbarker 2024-07-16 18:03:21 +09:00
3 changed files with 3 additions and 3 deletions

View file

@ -167,8 +167,6 @@ add_link_options(LINKER:-z,text)
add_link_options(LINKER:--no-allow-shlib-undefined)
add_compile_definitions(SANITIZE_PTRS)
set(CMAKE_CXX_FLAGS_STATIC "${CMAKE_CXX_FLAGS} -static")
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -pie -fpic")
if (ENABLE_COMPILETIME_FORMAT_CHECK)
add_compile_definitions(ENABLE_COMPILETIME_FORMAT_CHECK)

View file

@ -27,6 +27,8 @@ add_link_options(-fstack-protector-strong)
add_compile_options(-g1)
set(CMAKE_POSITION_INDEPENDENT_CODE ON)
if (CMAKE_CXX_COMPILER_ID STREQUAL "GNU")
add_compile_options(-Wno-maybe-uninitialized)
add_compile_options(-Wcast-align)

View file

@ -30,7 +30,7 @@ add_definitions(-D_DYNAMIC_LOADER)
set(SOURCES ${LOADER_SOURCES} ${AK_SOURCES} ${ELF_SOURCES} ${LIBC_SOURCES1} ${LIBC_SOURCES2} ${LIBC_SOURCES3} ${LIBSYSTEM_SOURCES})
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fno-rtti -nostdlib -pie -fpic -DNO_TLS")
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fno-rtti -nostdlib -pie -fpie -DNO_TLS")
if ("${SERENITY_ARCH}" STREQUAL "aarch64")
# On aarch64 the stack protector would be accessed before the Loader can relocate itself.