浏览代码

Fix XL compilers on non-AIX machines.

Linking broken on non-AIX machines when using XL compilers due to those
machines not using the CreateExportList tool.  Made use of this tool
conditional on finding it.
Todd Gamblin 14 年之前
父节点
当前提交
d1697625f8
共有 1 个文件被更改,包括 15 次插入10 次删除
  1. 15 10
      Modules/Compiler/XL.cmake

+ 15 - 10
Modules/Compiler/XL.cmake

@@ -35,14 +35,19 @@ macro(__compiler_xl lang)
   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>"
-    )
+  # CMAKE_XL_CreateExportList is part of the AIX XL compilers but not the linux ones.
+  # If we found the tool, we'll use it to create exports, otherwise stick with the regular
+  # create shared library compile line.
+  if (CMAKE_XL_CreateExportList)
+    # 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>"
+      )
+  endif()
 endmacro()