Hi,

finally I have finished the link flag undertaking :-)

Attached you can find the final diff file.

What I have done:

1. Added cmake variable OSG_WINDOWS_LINK_OPTIMIZE which defaults to OFF.
If the variable is ON the /OPT:REF /OPT:ICF are added to the
CMAKE_SHARED_LINKER_FLAGS_DEBUGOPT, CMAKE_SHARED_LINKER_FLAGS_RELEASE, CMAKE_EXE_LINKER_FLAGS_DEBUGOPT, and CMAKE_EXE_LINKER_FLAGS_RELEASE variables.

2. I removed the cmake code that tried to handle the INCREMENTAL linking in the DEBUG case. I have done that for two reasons:

  At first, I realized that the code is not working at all.
On my platform MSVC 2013 VC12 the CMAKE_SHARED_LINKER_FLAGS_DEBUG variable contains the following content at the beginning:
"/debug /INCREMENTAL".

The string replacement code in OSGSetupCompiler.cmake tries to replace string "INCREMENTAL:YES" with "INCREMENTAL:NO":

STRING(REPLACE "INCREMENTAL:YES" "INCREMENTAL:NO" replacementFlags ${CMAKE_SHARED_LINKER_FLAGS_DEBUG})

That does not work, since the search string is not contained in the variable.

After that follows the code line:

SET(CMAKE_SHARED_LINKER_FLAGS_DEBUG "/INCREMENTAL:NO ${replacementFlags}" ).

That also won't work, since the "/INCREMENTAL" contained in the variable replacementFlags is appended to the CMAKE_SHARED_LINKER_FLAGS_DEBUG variable what finally leads to the following content of variable CMAKE_SHARED_LINKER_FLAGS_DEBUG:

"/INCREMENTAL:NO /debug /INCREMENTAL msvcprtd.lib msvcrtd.lib".

Thus the incremental linking is still active.

Secondly, it is not desirable to do not incremental linking on the debug variant which is used at development times and thus requires short turn around times. I do not know for what reason that code was added to the OSGCompiler.cmake file but I strongly recommend to relinquish that part.

I hope that this patch pleases all parties.

Best,
Johannes


diff -rupN opensg_org/CMake/OSGSetupCompiler.cmake 
opensg_opt/CMake/OSGSetupCompiler.cmake
--- opensg_org/CMake/OSGSetupCompiler.cmake     2017-01-16 11:34:52.635334200 
+0100
+++ opensg_opt/CMake/OSGSetupCompiler.cmake     2017-02-01 15:31:25.547160100 
+0100
@@ -166,22 +166,26 @@ IF(MSVC)
 
 
 
-    # Shared Linker Flags
     IF(CMAKE_CXX_COMPILER_VERSION VERSION_GREATER "19")
        SET(OSG_ADD_MSVC_STD_LIBS_DEBUG   "vcruntimed.lib ucrtd.lib")
        SET(OSG_ADD_MSVC_STD_LIBS_RELEASE "vcruntime.lib ucrt.lib")
     ENDIF()
 
+    IF(OSG_WINDOWS_LINK_OPTIMIZE)
+        SET(windows_link_optimization "/OPT:REF /OPT:ICF")
+    ENDIF()
+
+    # Shared Linker Flags
     SET(CMAKE_SHARED_LINKER_FLAGS_RELEASENOOPT 
         "${CMAKE_SHARED_LINKER_FLAGS_DEBUG} msvcprt.lib msvcrt.lib 
${OSG_ADD_MSVC_STD_LIBS_RELEASE}"
         CACHE STRING "OpenSG defaults" FORCE )
 
     SET(CMAKE_SHARED_LINKER_FLAGS_DEBUGOPT 
-        "${CMAKE_SHARED_LINKER_FLAGS_RELEASE} /debug msvcprtd.lib msvcrtd.lib 
${OSG_ADD_MSVC_STD_LIBS_DEBUG}"
+        "${CMAKE_SHARED_LINKER_FLAGS_RELEASE} /debug 
${windows_link_optimization} msvcprtd.lib msvcrtd.lib 
${OSG_ADD_MSVC_STD_LIBS_DEBUG}"
         CACHE STRING "OpenSG defaults" FORCE )
 
     SET(CMAKE_SHARED_LINKER_FLAGS_RELEASE 
-        "${CMAKE_SHARED_LINKER_FLAGS_RELEASE} /debug msvcprt.lib msvcrt.lib 
${OSG_ADD_MSVC_STD_LIBS_RELEASE}"
+        "${CMAKE_SHARED_LINKER_FLAGS_RELEASE} /debug 
${windows_link_optimization} msvcprt.lib msvcrt.lib 
${OSG_ADD_MSVC_STD_LIBS_RELEASE}"
         CACHE STRING "OpenSG defaults" FORCE )
 
     SET(CMAKE_SHARED_LINKER_FLAGS_MINSIZEREL 
@@ -192,32 +196,23 @@ IF(MSVC)
         "${CMAKE_SHARED_LINKER_FLAGS_RELWITHDEBINFO} msvcprt.lib msvcrt.lib 
${OSG_ADD_MSVC_STD_LIBS_RELEASE}"
         CACHE INTERNAL "OpenSG defaults" FORCE )
     
-    STRING(REPLACE "INCREMENTAL:YES" "INCREMENTAL:NO" replacementFlags 
${CMAKE_SHARED_LINKER_FLAGS_DEBUG})
-    SET(CMAKE_SHARED_LINKER_FLAGS_DEBUG "/INCREMENTAL:NO ${replacementFlags}" )
-    
     SET(CMAKE_SHARED_LINKER_FLAGS_DEBUG 
         "${CMAKE_SHARED_LINKER_FLAGS_DEBUG} msvcprtd.lib msvcrtd.lib 
${OSG_ADD_MSVC_STD_LIBS_DEBUG}"
         CACHE STRING "OpenSG defaults" FORCE )
 
-
-
+    # Exe Linker Flags
     SET(CMAKE_EXE_LINKER_FLAGS_RELEASENOOPT 
         "${CMAKE_EXE_LINKER_FLAGS_DEBUG} msvcprt.lib msvcrt.lib 
${OSG_ADD_MSVC_STD_LIBS_RELEASE}"
         CACHE STRING "OpenSG defaults" FORCE )
 
-    SET(CMAKE_EXE_LINKER_FLAGS_DEBUG 
-        "${CMAKE_EXE_LINKER_FLAGS_DEBUG} msvcprtd.lib msvcrtd.lib 
${OSG_ADD_MSVC_STD_LIBS_DEBUG}"
-        CACHE STRING "OpenSG defaults" FORCE )
-
     SET(CMAKE_EXE_LINKER_FLAGS_DEBUGOPT 
-        "${CMAKE_EXE_LINKER_FLAGS_RELEASE} /debug msvcprtd.lib msvcrtd.lib 
${OSG_ADD_MSVC_STD_LIBS_DEBUG}"
+        "${CMAKE_EXE_LINKER_FLAGS_RELEASE} /debug ${windows_link_optimization} 
msvcprtd.lib msvcrtd.lib ${OSG_ADD_MSVC_STD_LIBS_DEBUG}"
         CACHE STRING "OpenSG defaults" FORCE )
 
     SET(CMAKE_EXE_LINKER_FLAGS_RELEASE 
-        "${CMAKE_EXE_LINKER_FLAGS_RELEASE} /debug msvcprt.lib msvcrt.lib 
${OSG_ADD_MSVC_STD_LIBS_RELEASE}"
+        "${CMAKE_EXE_LINKER_FLAGS_RELEASE} /debug ${windows_link_optimization} 
msvcprt.lib msvcrt.lib ${OSG_ADD_MSVC_STD_LIBS_RELEASE}"
         CACHE STRING "OpenSG defaults" FORCE )
 
-
     SET(CMAKE_EXE_LINKER_FLAGS_MINSIZEREL 
         "${CMAKE_EXE_LINKER_FLAGS_MINSIZEREL} msvcprt.lib msvcrt.lib 
${OSG_ADD_MSVC_STD_LIBS_RELEASE}"
         CACHE INTERNAL "OpenSG defaults" FORCE )
@@ -226,6 +221,9 @@ IF(MSVC)
         "${CMAKE_EXE_LINKER_FLAGS_RELWITHDEBINFO} msvcprt.lib msvcrt.lib 
${OSG_ADD_MSVC_STD_LIBS_RELEASE}"
         CACHE INTERNAL "OpenSG defaults" FORCE )
 
+    SET(CMAKE_EXE_LINKER_FLAGS_DEBUG 
+        "${CMAKE_EXE_LINKER_FLAGS_DEBUG} msvcprtd.lib msvcrtd.lib 
${OSG_ADD_MSVC_STD_LIBS_DEBUG}"
+        CACHE STRING "OpenSG defaults" FORCE )
 
     # Hide unused vars
 
diff -rupN opensg_org/CMakeLists.txt opensg_opt/CMakeLists.txt
--- opensg_org/CMakeLists.txt   2017-01-16 11:34:52.635334200 +0100
+++ opensg_opt/CMakeLists.txt   2017-02-01 12:00:21.588037100 +0100
@@ -140,6 +140,7 @@ OPTION(OSG_DEPENDENT_INCLUDE_BUILD "" OF
 IF(WIN32)
   OSG_OPTION(OSG_USE_SEPARATE_LIBDIRS "" ON)
   OSG_OPTION(OSG_INSTALL_PDB_FILES "" OFF)
+  OSG_OPTION(OSG_WINDOWS_LINK_OPTIMIZE "" OFF)
 ENDIF(WIN32)
 
 OSG_OPTION(OSG_INSTALL_EXAMPLES "" OFF)
------------------------------------------------------------------------------
Check out the vibrant tech community on one of the world's most
engaging tech sites, SlashDot.org! http://sdm.link/slashdot
_______________________________________________
Opensg-users mailing list
Opensg-users@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/opensg-users

Reply via email to