CMake: Use explicit dependencies for Xcode (as well as MSVC), to make
authorDouglas Gregor <dgregor@apple.com>
Thu, 4 Jun 2009 19:53:37 +0000 (19:53 +0000)
committerDouglas Gregor <dgregor@apple.com>
Thu, 4 Jun 2009 19:53:37 +0000 (19:53 +0000)
the CMake-generated Xcode project build properly.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@72883 91177308-0d34-0410-b5e6-96231b3b80d8

CMakeLists.txt
cmake/modules/AddLLVM.cmake
cmake/modules/AddPartiallyLinkedObject.cmake
cmake/modules/LLVMConfig.cmake
tools/CMakeLists.txt

index a846eaeb2a4695f3d29fac57714c21a414bbcbb9..0de1e08cf784e8917d9e9f7a663694a8da32bad6 100644 (file)
@@ -90,6 +90,24 @@ endforeach(c)
 
 set(llvm_builded_incs_dir ${LLVM_BINARY_DIR}/include/llvm)
 
+# The USE_EXPLICIT_DEPENDENCIES variable will be TRUE to indicate that
+# we should use the library dependencies explicitly specified in the
+# CMakeLists.txt files rather than those determined by
+# llvm-config. This value must be true for non-make and IDE
+# generators.
+if (MSVC_IDE)
+  set(DEFAULT_USE_EXPLICIT_DEPENDENCIES ON)
+elseif (XCODE)
+  set(DEFAULT_USE_EXPLICIT_DEPENDENCIES ON)
+else ()
+ set(DEFAULT_USE_EXPLICIT_DEPENDENCIES OFF)
+endif ()
+
+option(USE_EXPLICIT_DEPENDENCIES 
+  "Use explicit dependencies instead of llvm-config" 
+  ${DEFAULT_USE_EXPLICIT_DEPENDENCIES})
+mark_as_advanced(USE_EXPLICIT_DEPENDENCIES)
+
 # Add path for custom modules
 set(CMAKE_MODULE_PATH
   ${CMAKE_MODULE_PATH}
index c531298a30f043ff9a5004ffe6b03393f884b574..a21ed20d3baeebd9079fcfcbc14b35e81bd2cad9 100755 (executable)
@@ -26,11 +26,11 @@ macro(add_llvm_executable name)
   if( LLVM_LINK_COMPONENTS )
     llvm_config(${name} ${LLVM_LINK_COMPONENTS})
   endif( LLVM_LINK_COMPONENTS )
-  if( MSVC )
+  if( USE_EXPLICIT_DEPENDENCIES )
     target_link_libraries(${name} ${llvm_libs})
-  else( MSVC )
+  else( )
     add_dependencies(${name} llvm-config.target)
-  endif( MSVC )
+  endif( )
   get_system_libs(llvm_system_libs)
   if( llvm_system_libs )
     target_link_libraries(${name} ${llvm_system_libs})
index c9d96de1b9a845741f680b83d0afb0e4078cfd72..d20666dd79fbaf70fdf4d197f27aa534c88b9a88 100755 (executable)
@@ -1,18 +1,18 @@
 include(LLVMProcessSources)
 
 macro(target_name_of_partially_linked_object lib var)
-  if( MSVC )
+  if( USE_EXPLICIT_DEPENDENCIES )
     set(${var} ${lib})
-  else( MSVC )
+  else( )
     set(${var} ${lib}_pll)
-  endif( MSVC )
+  endif( )
 endmacro(target_name_of_partially_linked_object lib var)
 
 
 macro(add_partially_linked_object lib)
-  if( MSVC )
+  if( USE_EXPLICIT_DEPENDENCIES )
     add_llvm_library( ${lib} ${ARGN})
-  else( MSVC )
+  else( )
     set(pll ${CMAKE_ARCHIVE_OUTPUT_DIRECTORY}/${CMAKE_CFG_INTDIR}/${lib}.o)
     set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/temp_lib)
     set(CMAKE_LIBRARY_OUTPUT_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/temp_lib)
@@ -36,7 +36,7 @@ macro(add_partially_linked_object lib)
     add_custom_target(${tnplo} ALL DEPENDS ${pll})
     set( llvm_libs ${llvm_libs} ${pll} PARENT_SCOPE)
     set( llvm_lib_targets ${llvm_lib_targets} ${tnplo} PARENT_SCOPE )
-  endif( MSVC )
+  endif( )
   install(FILES ${pll}
     DESTINATION lib)
 endmacro(add_partially_linked_object lib)
index 9776fb05d2a649d4b66ee28492ee73ed84d43117..fd92495187470a05a514b644f8244ac5ce5a073c 100755 (executable)
@@ -21,36 +21,40 @@ endfunction(get_system_libs)
 
 macro(llvm_config executable)
   # extra args is the list of link components.
-  if( MSVC )
-    msvc_llvm_config(${executable} ${ARGN})
-  else( MSVC )
+  if( USE_EXPLICIT_DEPENDENCIES )
+    explicit_llvm_config(${executable} ${ARGN})
+  else( )
     nix_llvm_config(${executable} ${ARGN})
-  endif( MSVC )
+  endif( )
 endmacro(llvm_config)
 
 
-function(msvc_llvm_config executable)
+function(explicit_llvm_config executable)
   set( link_components ${ARGN} )
-  if( CMAKE_CL_64 )
-    set(include_lflag "/INCLUDE:")
-  else( CMAKE_CL_64 )
-    set(include_lflag "/INCLUDE:_")
-  endif()
-  foreach(c ${link_components})
-    if( c STREQUAL "jit" )
-      set(lfgs "${lfgs} ${include_lflag}X86TargetMachineModule")
-    endif( c STREQUAL "jit" )
-    list(FIND LLVM_TARGETS_TO_BUILD ${c} idx)
-    if( NOT idx LESS 0 )
-      set(lfgs "${lfgs} ${include_lflag}${c}TargetMachineModule")
-      list(FIND LLVM_ASMPRINTERS_FORCE_LINK ${c} idx)
+
+  set(lfgs)
+  if (MSVC)
+    if( CMAKE_CL_64 )
+      set(include_lflag "/INCLUDE:")
+    else( CMAKE_CL_64 )
+      set(include_lflag "/INCLUDE:_")
+    endif()
+    foreach(c ${link_components})
+      if( c STREQUAL "jit" )
+        set(lfgs "${lfgs} ${include_lflag}X86TargetMachineModule")
+      endif( c STREQUAL "jit" )
+      list(FIND LLVM_TARGETS_TO_BUILD ${c} idx)
       if( NOT idx LESS 0 )
-       set(lfgs "${lfgs} ${include_lflag}${c}AsmPrinterForceLink")
+        set(lfgs "${lfgs} ${include_lflag}${c}TargetMachineModule")
+        list(FIND LLVM_ASMPRINTERS_FORCE_LINK ${c} idx)
+        if( NOT idx LESS 0 )
+         set(lfgs "${lfgs} ${include_lflag}${c}AsmPrinterForceLink")
+        endif()
       endif()
-    endif()
-  endforeach(c)
+    endforeach(c)
+  endif ()
 
-  msvc_map_components_to_libraries(LIBRARIES ${link_components})
+  explicit_map_components_to_libraries(LIBRARIES ${link_components})
   target_link_libraries(${executable} ${LIBRARIES})
 
   if( lfgs )
@@ -58,10 +62,10 @@ function(msvc_llvm_config executable)
       PROPERTIES
       LINK_FLAGS ${lfgs})
   endif()
-endfunction(msvc_llvm_config)
+endfunction(explicit_llvm_config)
 
 
-function(msvc_map_components_to_libraries out_libs)
+function(explicit_map_components_to_libraries out_libs)
   set( link_components ${ARGN} )
   foreach(c ${link_components})
     # add codegen/asmprinter
@@ -121,7 +125,7 @@ function(msvc_map_components_to_libraries out_libs)
   endwhile( ${curr_idx} LESS ${lst_size} )
   list(REMOVE_DUPLICATES result)
   set(${out_libs} ${result} PARENT_SCOPE)
-endfunction(msvc_map_components_to_libraries)
+endfunction(explicit_map_components_to_libraries)
 
 
 macro(nix_llvm_config executable)
index 113d98743c47c221e5bb4760e87f23a30f4b1f8a..5c1ee351a2a03de5d11b01ef27b9779779e5e182 100644 (file)
@@ -2,9 +2,9 @@
 # large and three small executables. This is done to minimize memory load
 # in parallel builds.  Please retain this ordering.
 
-if( NOT MSVC )
 add_subdirectory(llvm-config)
-endif( NOT MSVC )
+if (NOT USE_EXPLICIT_DEPENDENCIES)
+ add_subdirectory(llvm-config)
+endif()
 
 add_subdirectory(opt)
 add_subdirectory(llvm-as)