Forráskód Böngészése

Merge branch 'support-static-build'

* support-static-build:
  Add cmake advanced option CTK_BUILD_SHARED_LIBS
  ctkMacroBuildLib - On Linux, set -fPIC compile flag if build statically
  ctkMacroBuildLib - Use MY_LIBRARY_TYPE instead of CTK_BUILD_SHARED_LIBS
  ctkMacroBuildApp - Remove unused/commented code
  ctkMacroBuildPlugin - Use MY_LIBRARY_TYPE instead of CTK_BUILD_SHARED_LIBS
  If Gold linker is used, link against X11 libraries to avoid error.
  Remove LIBRARY_TYPE option from ctkMacroBuildPlugin
Jean-Christophe Fillion-Robin 14 éve
szülő
commit
4de9b42bdd

+ 4 - 34
CMake/ctkMacroBuildApp.cmake

@@ -34,12 +34,6 @@ MACRO(ctkMacroBuildApp)
   IF(NOT DEFINED MY_NAME)
     MESSAGE(SEND_ERROR "NAME is mandatory")
   ENDIF()
-#   IF(NOT DEFINED MY_EXPORT_DIRECTIVE)
-#     MESSAGE(SEND_ERROR "EXPORT_DIRECTIVE is mandatory")
-#   ENDIF()
-#   IF(NOT DEFINED MY_LIBRARY_TYPE)
-#     SET(MY_LIBRARY_TYPE "SHARED")
-#   ENDIF()
 
   # Make sure either the source or the binary directory associated with the application
   # contains a file named ${MY_NAME}Main.cpp
@@ -73,19 +67,6 @@ MACRO(ctkMacroBuildApp)
   LINK_DIRECTORIES(
     ${my_library_dirs}
     )
-  
-
-#   SET(MY_LIBRARY_EXPORT_DIRECTIVE ${MY_EXPORT_DIRECTIVE})
-#   SET(MY_EXPORT_HEADER_PREFIX ${MY_NAME})
-#   STRING(REGEX REPLACE "^CTK" "ctk" MY_EXPORT_HEADER_PREFIX ${MY_EXPORT_HEADER_PREFIX})
-#   SET(MY_LIBNAME ${lib_name})
-  
-#   CONFIGURE_FILE(
-#     ${CTK_SOURCE_DIR}/Libs/ctkExport.h.in
-#     ${CMAKE_CURRENT_BINARY_DIR}/${MY_EXPORT_HEADER_PREFIX}Export.h
-#     )
-#   SET(dynamicHeaders
-#     "${dynamicHeaders};${CMAKE_CURRENT_BINARY_DIR}/${MY_EXPORT_HEADER_PREFIX}Export.h")
 
   # Make sure variable are cleared
   SET(MY_UI_CPP)
@@ -117,31 +98,20 @@ MACRO(ctkMacroBuildApp)
     ${MY_UI_CPP}
     ${MY_QRC_SRCS}
     )
-#   ADD_LIBRARY(${lib_name} ${MY_LIBRARY_TYPE}
-#     ${MY_SRCS}
-#     ${MY_MOC_CPP}
-#     ${MY_UI_CPP}
-#     ${MY_QRC_SRCS}
-#     )
 
   # Set labels associated with the target.
   SET_TARGET_PROPERTIES(${proj_name} PROPERTIES LABELS ${proj_name})
   
   # Install rules
-  IF(CTK_BUILD_SHARED_LIBS)
-    INSTALL(TARGETS ${proj_name}
-      RUNTIME DESTINATION ${CTK_INSTALL_BIN_DIR} COMPONENT Runtime
-      LIBRARY DESTINATION ${CTK_INSTALL_LIB_DIR} COMPONENT Runtime
-      ARCHIVE DESTINATION ${CTK_INSTALL_LIB_DIR} COMPONENT Development)
-  ENDIF()
+  INSTALL(TARGETS ${proj_name}
+    RUNTIME DESTINATION ${CTK_INSTALL_BIN_DIR} COMPONENT Runtime
+    LIBRARY DESTINATION ${CTK_INSTALL_LIB_DIR} COMPONENT Runtime
+    ARCHIVE DESTINATION ${CTK_INSTALL_LIB_DIR} COMPONENT Development)
 
   SET(my_libs
     ${MY_TARGET_LIBRARIES}
     )
   TARGET_LINK_LIBRARIES(${proj_name} ${my_libs})
-
-  # Update CTK_BASE_LIBRARIES
-#   SET(CTK_BASE_LIBRARIES ${my_libs} ${lib_name} CACHE INTERNAL "CTK base libraries" FORCE)
   
   # Install headers
   FILE(GLOB headers "${CMAKE_CURRENT_SOURCE_DIR}/*.h")

+ 8 - 1
CMake/ctkMacroBuildLib.cmake

@@ -147,9 +147,16 @@ MACRO(ctkMacroBuildLib)
     SET_TARGET_PROPERTIES(${lib_name} PROPERTIES ${CTK_LIBRARY_PROPERTIES})
   ENDIF()
   SET_TARGET_PROPERTIES(${lib_name} PROPERTIES CTK_LIB_TARGET_SOURCE_DIR ${CMAKE_CURRENT_SOURCE_DIR})
+  
+  # Library properties specific to STATIC build
+  IF(MY_LIBRARY_TYPE STREQUAL "STATIC")
+    IF(CMAKE_SYSTEM_PROCESSOR STREQUAL "x86_64")
+      SET_TARGET_PROPERTIES(${lib_name} PROPERTIES COMPILE_FLAGS "-fPIC")
+    ENDIF()
+  ENDIF()
 
   # Install rules
-  IF(CTK_BUILD_SHARED_LIBS)
+  IF(MY_LIBRARY_TYPE STREQUAL "SHARED")
     INSTALL(TARGETS ${lib_name}
       RUNTIME DESTINATION ${CTK_INSTALL_BIN_DIR} COMPONENT Runtime
       LIBRARY DESTINATION ${CTK_INSTALL_LIB_DIR} COMPONENT Runtime

+ 5 - 5
CMake/ctkMacroBuildPlugin.cmake

@@ -47,7 +47,7 @@
 #
 MACRO(ctkMacroBuildPlugin)
   CtkMacroParseArguments(MY
-    "EXPORT_DIRECTIVE;SRCS;MOC_SRCS;UI_FORMS;INCLUDE_DIRECTORIES;TARGET_LIBRARIES;RESOURCES;CACHED_RESOURCEFILES;TRANSLATIONS;LIBRARY_TYPE"
+    "EXPORT_DIRECTIVE;SRCS;MOC_SRCS;UI_FORMS;INCLUDE_DIRECTORIES;TARGET_LIBRARIES;RESOURCES;CACHED_RESOURCEFILES;TRANSLATIONS"
     "TEST_PLUGIN"
     ${ARGN}
     )
@@ -56,9 +56,9 @@ MACRO(ctkMacroBuildPlugin)
   IF(NOT DEFINED MY_EXPORT_DIRECTIVE)
     MESSAGE(SEND_ERROR "EXPORT_DIRECTIVE is mandatory")
   ENDIF()
-  IF(NOT DEFINED MY_LIBRARY_TYPE)
-    SET(MY_LIBRARY_TYPE "SHARED")
-  ENDIF()
+ 
+  # Plugin are expected to be shared library
+  SET(MY_LIBRARY_TYPE "SHARED")
 
   # Define library name
   SET(lib_name ${PROJECT_NAME})
@@ -242,7 +242,7 @@ MACRO(ctkMacroBuildPlugin)
 
   # Note: The plugin may be installed in some other location ???
   # Install rules
-# IF(CTK_BUILD_SHARED_LIBS)
+# IF(MY_LIBRARY_TYPE STREQUAL "SHARED")
 # INSTALL(TARGETS ${lib_name}
 # RUNTIME DESTINATION ${CTK_INSTALL_BIN_DIR} COMPONENT Runtime
 # LIBRARY DESTINATION ${CTK_INSTALL_LIB_DIR} COMPONENT Runtime

+ 8 - 2
CMakeLists.txt

@@ -51,9 +51,15 @@ PROJECT(CTK)
 #-----------------------------------------------------------------------------
 
 #-----------------------------------------------------------------------------
-# Default to shared library
+# Library mode: SHARED (default) or STATIC
+#
 SET(CTK_LIBRARY_MODE "SHARED")
-SET(CTK_BUILD_SHARED_LIBS TRUE)
+
+OPTION(CTK_BUILD_SHARED_LIBS "Build CTK libraries as shared module." ON)
+MARK_AS_ADVANCED(CTK_BUILD_SHARED_LIBS)
+IF(NOT CTK_BUILD_SHARED_LIBS)
+  SET(CTK_LIBRARY_MODE "STATIC")
+ENDIF()
 
 #-----------------------------------------------------------------------------
 # Superbuild Option - Enabled by default

+ 7 - 0
Libs/Visualization/VTK/Core/CMakeLists.txt

@@ -62,6 +62,13 @@ SET(VTK_LIBRARIES
   vtkHybrid
   )
 
+IF(Q_WS_X11)
+  # If the faster 'gold' linker is used, to avoid complaints about undefined symbol
+  # 'XGetWindowAttributes', 'XCreateWindow', ..., let's link against X11 libraries.
+  FIND_PACKAGE(X11)
+  LIST(APPEND VTK_LIBRARIES ${X11_LIBRARIES})
+ENDIF()
+
 # Target libraries - See CMake/ctkFunctionGetTargetLibraries.cmake
 # The following macro will read the target libraries from the file 'target_libraries.cmake'
 ctkFunctionGetTargetLibraries(KIT_target_libraries)

+ 1 - 0
SuperBuild.cmake

@@ -250,6 +250,7 @@ ExternalProject_Add(${proj}
     -DCTK_INSTALL_LIB_DIR:STRING=${CTK_INSTALL_LIB_DIR}
     -DCTK_INSTALL_INCLUDE_DIR:STRING=${CTK_INSTALL_INCLUDE_DIR}
     -DCTK_INSTALL_DOC_DIR:STRING=${CTK_INSTALL_DOC_DIR}
+    -DCTK_BUILD_SHARED_LIBS:BOOL=${CTK_BUILD_SHARED_LIBS}
     -DCMAKE_INSTALL_PREFIX:PATH=${ep_install_dir}
     -DCMAKE_BUILD_TYPE:STRING=${CMAKE_BUILD_TYPE}
     -DCTK_CXX_FLAGS:STRING=${CTK_CXX_FLAGS}