[CMAKE]
authorDmitry Gorbachev <gorbachev@reactos.org>
Sat, 10 Mar 2012 23:38:37 +0000 (23:38 +0000)
committerDmitry Gorbachev <gorbachev@reactos.org>
Sat, 10 Mar 2012 23:38:37 +0000 (23:38 +0000)
Allow to build with link-time code generation.

svn path=/trunk/; revision=56109

reactos/cmake/config-amd64.cmake
reactos/cmake/config-arm.cmake
reactos/cmake/config.cmake
reactos/cmake/gcc.cmake
reactos/lib/sdk/crt/msvcrtex.cmake
reactos/ntoskrnl/CMakeLists.txt

index 2b1cc16..c84262f 100644 (file)
@@ -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.")
 
index 79f4ae5..1f34cee 100644 (file)
@@ -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.")
 
index b66df1a..80fffb5 100644 (file)
@@ -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.")
index 1d204a0..8d9eb17 100644 (file)
@@ -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
-        "<CMAKE_C_COMPILER> <CMAKE_C_LINK_FLAGS> <LINK_FLAGS> <OBJECTS> -o <TARGET> <LINK_LIBRARIES>"
+        "<CMAKE_C_COMPILER> ${CMAKE_C_FLAGS} <CMAKE_C_LINK_FLAGS> <LINK_FLAGS> <OBJECTS> -o <TARGET> <LINK_LIBRARIES>"
         "${RSYM} <TARGET> <TARGET>")
     set(CMAKE_CXX_LINK_EXECUTABLE
-        "<CMAKE_CXX_COMPILER> <CMAKE_CXX_LINK_FLAGS> <LINK_FLAGS> <OBJECTS> -o <TARGET> <LINK_LIBRARIES>"
+        "<CMAKE_CXX_COMPILER> ${CMAKE_CXX_FLAGS} <CMAKE_CXX_LINK_FLAGS> <LINK_FLAGS> <OBJECTS> -o <TARGET> <LINK_LIBRARIES>"
         "${RSYM} <TARGET> <TARGET>")
     set(CMAKE_C_CREATE_SHARED_LIBRARY
-        "<CMAKE_C_COMPILER> <CMAKE_SHARED_LIBRARY_C_FLAGS> <LINK_FLAGS> <CMAKE_SHARED_LIBRARY_CREATE_C_FLAGS> -o <TARGET> <OBJECTS> <LINK_LIBRARIES>"
+        "<CMAKE_C_COMPILER> ${CMAKE_C_FLAGS} <CMAKE_SHARED_LIBRARY_C_FLAGS> <LINK_FLAGS> <CMAKE_SHARED_LIBRARY_CREATE_C_FLAGS> -o <TARGET> <OBJECTS> <LINK_LIBRARIES>"
         "${RSYM} <TARGET> <TARGET>")
     set(CMAKE_CXX_CREATE_SHARED_LIBRARY
-        "<CMAKE_CXX_COMPILER> <CMAKE_SHARED_LIBRARY_CXX_FLAGS> <LINK_FLAGS> <CMAKE_SHARED_LIBRARY_CREATE_CXX_FLAGS> -o <TARGET> <OBJECTS> <LINK_LIBRARIES>"
+        "<CMAKE_CXX_COMPILER> ${CMAKE_CXX_FLAGS} <CMAKE_SHARED_LIBRARY_CXX_FLAGS> <LINK_FLAGS> <CMAKE_SHARED_LIBRARY_CREATE_CXX_FLAGS> -o <TARGET> <OBJECTS> <LINK_LIBRARIES>"
         "${RSYM} <TARGET> <TARGET>")
     set(CMAKE_RC_CREATE_SHARED_LIBRARY
-        "<CMAKE_C_COMPILER> <CMAKE_SHARED_LIBRARY_C_FLAGS> <LINK_FLAGS> <CMAKE_SHARED_LIBRARY_CREATE_C_FLAGS> -o <TARGET> <OBJECTS> <LINK_LIBRARIES>"
+        "<CMAKE_C_COMPILER> ${CMAKE_C_FLAGS} <CMAKE_SHARED_LIBRARY_C_FLAGS> <LINK_FLAGS> <CMAKE_SHARED_LIBRARY_CREATE_C_FLAGS> -o <TARGET> <OBJECTS> <LINK_LIBRARIES>"
         "${RSYM} <TARGET> <TARGET>")
 endif()
 
index 7b791da..623f906 100644 (file)
@@ -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
index be9b425..c34441e 100644 (file)
@@ -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