diff --git a/reactos/cmake/config-amd64.cmake b/reactos/cmake/config-amd64.cmake index 2b1cc16a44c..c84262f1501 100644 --- a/reactos/cmake/config-amd64.cmake +++ b/reactos/cmake/config-amd64.cmake @@ -15,6 +15,9 @@ set (OPTIMIZE "1" CACHE STRING 4 = -O2 5 = -O3") +set(LTCG FALSE CACHE BOOL +"Whether to build with link-time code generation") + set(DBG TRUE CACHE BOOL "Whether to compile for debugging.") diff --git a/reactos/cmake/config-arm.cmake b/reactos/cmake/config-arm.cmake index 79f4ae58b8c..1f34cee921d 100644 --- a/reactos/cmake/config-arm.cmake +++ b/reactos/cmake/config-arm.cmake @@ -16,6 +16,9 @@ set (OPTIMIZE "1" CACHE STRING 4 = -O2 5 = -O3") +set(LTCG FALSE CACHE BOOL +"Whether to build with link-time code generation") + set(DBG TRUE CACHE BOOL "Whether to compile for debugging.") diff --git a/reactos/cmake/config.cmake b/reactos/cmake/config.cmake index b66df1ae06a..80fffb58ff1 100644 --- a/reactos/cmake/config.cmake +++ b/reactos/cmake/config.cmake @@ -21,6 +21,9 @@ set(OPTIMIZE "1" CACHE STRING 4 = -O2 5 = -O3") +set(LTCG FALSE CACHE BOOL +"Whether to build with link-time code generation") + set(GDB FALSE CACHE BOOL "Whether to compile for debugging with GDB. If you don't use GDB, don't enable this.") diff --git a/reactos/cmake/gcc.cmake b/reactos/cmake/gcc.cmake index 1d204a06442..8d9eb178a8d 100644 --- a/reactos/cmake/gcc.cmake +++ b/reactos/cmake/gcc.cmake @@ -77,6 +77,11 @@ elseif(OPTIMIZE STREQUAL "5") add_compile_flags("-O3") endif() +# Link-time code generation +if(LTCG) + add_compile_flags("-flto -Wno-error=clobbered") +endif() + add_compile_flags("-fno-strict-aliasing") if(ARCH MATCHES i386) @@ -139,19 +144,19 @@ else() # Normal rsym build get_target_property(RSYM native-rsym IMPORTED_LOCATION_NOCONFIG) set(CMAKE_C_LINK_EXECUTABLE - " -o " + " ${CMAKE_C_FLAGS} -o " "${RSYM} ") set(CMAKE_CXX_LINK_EXECUTABLE - " -o " + " ${CMAKE_CXX_FLAGS} -o " "${RSYM} ") set(CMAKE_C_CREATE_SHARED_LIBRARY - " -o " + " ${CMAKE_C_FLAGS} -o " "${RSYM} ") set(CMAKE_CXX_CREATE_SHARED_LIBRARY - " -o " + " ${CMAKE_CXX_FLAGS} -o " "${RSYM} ") set(CMAKE_RC_CREATE_SHARED_LIBRARY - " -o " + " ${CMAKE_C_FLAGS} -o " "${RSYM} ") endif() diff --git a/reactos/lib/sdk/crt/msvcrtex.cmake b/reactos/lib/sdk/crt/msvcrtex.cmake index 7b791da7892..623f90675f9 100644 --- a/reactos/lib/sdk/crt/msvcrtex.cmake +++ b/reactos/lib/sdk/crt/msvcrtex.cmake @@ -3,6 +3,9 @@ include_directories(include/internal/mingw-w64) if(NOT MSVC) add_compile_flags("-Wno-main") + if(LTCG) + add_compile_flags("-fno-lto") + endif() endif() list(APPEND MSVCRTEX_SOURCE diff --git a/reactos/ntoskrnl/CMakeLists.txt b/reactos/ntoskrnl/CMakeLists.txt index be9b425ccb7..c34441eeeae 100644 --- a/reactos/ntoskrnl/CMakeLists.txt +++ b/reactos/ntoskrnl/CMakeLists.txt @@ -438,6 +438,11 @@ else() set_image_base(ntoskrnl 0x80800000) endif() +# Linker bug +if(NOT MSVC AND LTCG) + add_target_link_flags(ntoskrnl "-shared") +endif() + target_link_libraries(ntoskrnl cportlib csq