CMake: Support for cross-compiling. For now, requires a previously
authorOscar Fuentes <ofv@wanadoo.es>
Sun, 9 Nov 2008 18:53:19 +0000 (18:53 +0000)
committerOscar Fuentes <ofv@wanadoo.es>
Sun, 9 Nov 2008 18:53:19 +0000 (18:53 +0000)
built native tblgen which is passed to cmake in the variable
LLVM_TABLEGEN.

See

http://www.cmake.org/Wiki/CmakeMingw

for a quick example on how to cross-compile with CMake.

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

CMakeLists.txt
cmake/modules/AddPartiallyLinkedObject.cmake
cmake/modules/CrossCompileLLVM.cmake [new file with mode: 0644]
cmake/modules/TableGen.cmake
tools/llvm-config/CMakeLists.txt
tools/llvmc2/driver/CMakeLists.txt

index 4c013327720c66e0b177e5c3319626059f92cb68..f634503b453c0d7bae96a2e6e62c94a6c0fdf4d9 100644 (file)
@@ -111,10 +111,17 @@ add_subdirectory(lib/System)
 # Everything else depends on Support and System:
 set(LLVM_COMMON_DEPENDS ${LLVM_COMMON_DEPENDS} ${LLVM_LIBS} )
 
+set(LLVM_TABLEGEN "tblgen" CACHE
+  STRING "Native TableGen executable.")
+
+if( CMAKE_CROSSCOMPILING )
+  include( CrossCompileLLVM )
+endif( CMAKE_CROSSCOMPILING )
+
 add_subdirectory(utils/TableGen)
 
 add_custom_command(OUTPUT ${llvm_builded_incs_dir}/Intrinsics.gen
-  COMMAND tblgen -gen-intrinsic -I ${LLVM_MAIN_INCLUDE_DIR} ${LLVM_MAIN_INCLUDE_DIR}/llvm/Intrinsics.td -o ${llvm_builded_incs_dir}/Intrinsics.gen
+  COMMAND ${LLVM_TABLEGEN} -gen-intrinsic -I ${LLVM_MAIN_INCLUDE_DIR} ${LLVM_MAIN_INCLUDE_DIR}/llvm/Intrinsics.td -o ${llvm_builded_incs_dir}/Intrinsics.gen
   DEPENDS tblgen
   COMMENT "Building intrinsics.gen...")
 
index 4da8eac3f291885e710aad9f1eff1572bcb457ac..d607306dfe2cf18c3aab13d18ec771bfc124b739 100755 (executable)
@@ -24,7 +24,7 @@ macro(add_partially_linked_object lib)
       DEPENDS ${lib}
       WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/temp_lib
       COMMAND ar x ${CMAKE_STATIC_LIBRARY_PREFIX}${lib}${CMAKE_STATIC_LIBRARY_SUFFIX}
-      COMMAND ld "${LLVM_PLO_FLAGS}" -r "*${CMAKE_CXX_OUTPUT_EXTENSION}" -o ${pll}
+      COMMAND ${CMAKE_LINKER} "${LLVM_PLO_FLAGS}" -r "*${CMAKE_CXX_OUTPUT_EXTENSION}" -o ${pll}
       COMMAND rm -f *${CMAKE_CXX_OUTPUT_EXTENSION}
       )
     target_name_of_partially_linked_object(${lib} tnplo)
diff --git a/cmake/modules/CrossCompileLLVM.cmake b/cmake/modules/CrossCompileLLVM.cmake
new file mode 100644 (file)
index 0000000..0377c05
--- /dev/null
@@ -0,0 +1,6 @@
+# TODO: Build a native tblgen when cross-compiling, if the user\r
+# didn't set LLVM_TABLEGEN. Then, remove this check:\r
+if( CMAKE_CROSSCOMPILING AND ${LLVM_TABLEGEN} STREQUAL "tblgen" )\r
+  message(FATAL_ERROR\r
+    "Set LLVM_TABLEGEN to the full route to a native tblgen executable")\r
+endif()\r
index c332ed1ac48adae46565d40fb776bac1ff14c43f..6d69e8ae9125ab6fdb4d337aa8b1231b76810442 100644 (file)
@@ -4,7 +4,7 @@
 
 macro(tablegen ofn)
   add_custom_command(OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/${ofn}
-    COMMAND tblgen ${ARGN} -I ${CMAKE_CURRENT_SOURCE_DIR} -I ${CMAKE_SOURCE_DIR}/lib/Target -I ${LLVM_MAIN_INCLUDE_DIR} ${CMAKE_CURRENT_SOURCE_DIR}/${LLVM_TARGET_DEFINITIONS} -o ${ofn}
+    COMMAND ${LLVM_TABLEGEN} ${ARGN} -I ${CMAKE_CURRENT_SOURCE_DIR} -I ${CMAKE_SOURCE_DIR}/lib/Target -I ${LLVM_MAIN_INCLUDE_DIR} ${CMAKE_CURRENT_SOURCE_DIR}/${LLVM_TARGET_DEFINITIONS} -o ${ofn}
     DEPENDS tblgen ${CMAKE_CURRENT_SOURCE_DIR}/${LLVM_TARGET_DEFINITIONS}
     COMMENT "Building ${ofn}..."
     )
index b5551bb132e2c4a8e300f67ce737017cd817d81f..9f1f2f2d311e45633b68c2b5fd6ad49468d113e2 100644 (file)
@@ -63,8 +63,16 @@ set(LLVM_CONFIG_IN ${CMAKE_CURRENT_BINARY_DIR}/llvm-config.in)
 # set(LIBDEPS_TMP LibDeps.txt.tmp)
 # set(FINAL_LIBDEPS FinalLibDeps.txt)
 
+if( CMAKE_CROSSCOMPILING )
+  set(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM ONLY)
+endif()
+
+if( NOT NM_PATH )
+  message(FATAL_ERROR "`nm' was not found")
+endif()
+
 add_custom_command(OUTPUT ${LIBDEPS_TMP}
-  COMMAND ${PERL_EXECUTABLE} ${LLVM_MAIN_SRC_DIR}/utils/GenLibDeps.pl -flat ${CMAKE_ARCHIVE_OUTPUT_DIRECTORY} > ${LIBDEPS_TMP}
+  COMMAND ${PERL_EXECUTABLE} ${LLVM_MAIN_SRC_DIR}/utils/GenLibDeps.pl -flat ${CMAKE_ARCHIVE_OUTPUT_DIRECTORY} ${NM_PATH} > ${LIBDEPS_TMP}
   COMMENT "Regenerating ${LIBDEPS_TMP}")
 
 add_custom_command(OUTPUT ${LIBDEPS}
index 538f8974a37d69a2634bb1f9efe679104eaf6542..6a7a2a8f011c1734b3fc07f6e64eff255840cb6c 100644 (file)
@@ -3,7 +3,7 @@ set(LLVM_REQUIRES_EH 1)
 
 macro(tgen ofn)
   add_custom_command(OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/${ofn}
-    COMMAND tblgen ${ARGN} -I ${CMAKE_CURRENT_SOURCE_DIR} -I ${CMAKE_SOURCE_DIR}/lib/Target -I ${LLVM_MAIN_INCLUDE_DIR} ${CMAKE_CURRENT_SOURCE_DIR}/Graph.td -o ${ofn}
+    COMMAND ${LLVM_TABLEGEN} ${ARGN} -I ${CMAKE_CURRENT_SOURCE_DIR} -I ${CMAKE_SOURCE_DIR}/lib/Target -I ${LLVM_MAIN_INCLUDE_DIR} ${CMAKE_CURRENT_SOURCE_DIR}/Graph.td -o ${ofn}
     DEPENDS
     tblgen
     ${LLVM_MAIN_INCLUDE_DIR}/llvm/CompilerDriver/Common.td