[Cmake-commits] CMake branch, next, updated. v2.8.4-1385-g60b7a0d

Brad King brad.king at kitware.com
Fri Apr 8 09:14:52 EDT 2011


This is an automated email from the git hooks/post-receive script. It was
generated because a ref change was pushed to the repository containing
the project "CMake".

The branch, next has been updated
       via  60b7a0d31dbaa010c4eecda1f90f4dfe3fdeeb2f (commit)
       via  d468a2c2cb854471d5ee53b064c973839f76330b (commit)
      from  8e0591a7fa3c7c7ad96d03a0e5bdccfbeb7756f7 (commit)

Those revisions listed above that are new to this repository have
not appeared on any other notification email; so we list those
revisions in full, below.

- Log -----------------------------------------------------------------
http://cmake.org/gitweb?p=cmake.git;a=commitdiff;h=60b7a0d31dbaa010c4eecda1f90f4dfe3fdeeb2f
commit 60b7a0d31dbaa010c4eecda1f90f4dfe3fdeeb2f
Merge: 8e0591a d468a2c
Author:     Brad King <brad.king at kitware.com>
AuthorDate: Fri Apr 8 09:14:44 2011 -0400
Commit:     CMake Topic Stage <kwrobot at kitware.com>
CommitDate: Fri Apr 8 09:14:44 2011 -0400

    Merge topic 'refine-XL-rules' into next
    
    d468a2c XL: Avoid copying archives into shared libraries that link them


http://cmake.org/gitweb?p=cmake.git;a=commitdiff;h=d468a2c2cb854471d5ee53b064c973839f76330b
commit d468a2c2cb854471d5ee53b064c973839f76330b
Author:     Brad King <brad.king at kitware.com>
AuthorDate: Thu Apr 7 17:26:56 2011 -0400
Commit:     Brad King <brad.king at kitware.com>
CommitDate: Fri Apr 8 08:41:36 2011 -0400

    XL: Avoid copying archives into shared libraries that link them
    
    The XL toolchain supports shared object files stored in archives.  Since
    CMake lists libraries on link lines by full path it is common for a
    shared library link line to contain the path to an archive file.
    
    When linking a shared library the compiler front-end by default runs
    CreateExportList to construct the list of symbols to be exported.
    Unfortunately it passes all files found on the command line to the tool
    so archive and library files get processed along with the object files.
    The tool returns a list of all symbols in all objects, archives, and
    libraries on the command line.  This causes the linker to copy every
    object file out of every archive into the shared library whether they
    are dependencies of the original object files or not.
    
    Work around this problem by running CreateExportList ourselves with just
    the original object files intended for inclusion in the shared library.
    Then pass the list it produces on the link line to prevent the compiler
    front-end from constructing its own.  This tells the linker to export
    only the symbols provided by the original source files of the shared
    library.

diff --git a/Modules/Compiler/XL.cmake b/Modules/Compiler/XL.cmake
index f5331d3..d07890f 100644
--- a/Modules/Compiler/XL.cmake
+++ b/Modules/Compiler/XL.cmake
@@ -18,6 +18,12 @@ if(__COMPILER_XL)
 endif()
 set(__COMPILER_XL 1)
 
+# Find the CreateExportList program that comes with this toolchain.
+find_program(CMAKE_XL_CreateExportList
+  NAMES CreateExportList
+  DOC "IBM XL CreateExportList tool"
+  )
+
 macro(__compiler_xl lang)
   # Feature flags.
   set(CMAKE_${lang}_VERBOSE_FLAG "-V")
@@ -28,4 +34,15 @@ macro(__compiler_xl lang)
   set(CMAKE_${lang}_FLAGS_RELWITHDEBINFO_INIT "-g")
   set(CMAKE_${lang}_CREATE_PREPROCESSED_SOURCE "<CMAKE_${lang}_COMPILER> <DEFINES> <FLAGS> -E <SOURCE> > <PREPROCESSED_SOURCE>")
   set(CMAKE_${lang}_CREATE_ASSEMBLY_SOURCE     "<CMAKE_${lang}_COMPILER> <DEFINES> <FLAGS> -S <SOURCE> -o <ASSEMBLY_SOURCE>")
+
+  # The compiler front-end passes all object files, archive files, and shared
+  # library files named on the command line to CreateExportList to create a
+  # list of all symbols to be exported from the shared library.  This causes
+  # all archive members to be copied into the shared library whether they are
+  # needed or not.  Instead we run the tool ourselves to pass only the object
+  # files so that we export only the symbols actually provided by the sources.
+  set(CMAKE_${lang}_CREATE_SHARED_LIBRARY
+    "${CMAKE_XL_CreateExportList} <OBJECT_DIR>/objects.exp <OBJECTS>"
+    "<CMAKE_${lang}_COMPILER> <CMAKE_SHARED_LIBRARY_${lang}_FLAGS> <LANGUAGE_COMPILE_FLAGS> <LINK_FLAGS> <CMAKE_SHARED_LIBRARY_CREATE_${lang}_FLAGS> -Wl,-bE:<OBJECT_DIR>/objects.exp <CMAKE_SHARED_LIBRARY_SONAME_${lang}_FLAG><TARGET_SONAME> -o <TARGET> <OBJECTS> <LINK_LIBRARIES>"
+    )
 endmacro()

-----------------------------------------------------------------------

Summary of changes:
 Modules/Compiler/XL.cmake |   17 +++++++++++++++++
 1 files changed, 17 insertions(+), 0 deletions(-)


hooks/post-receive
-- 
CMake


More information about the Cmake-commits mailing list