[llvm] r357486 - [cmake] Add function for building native tool

Shoaib Meenai via llvm-commits llvm-commits at lists.llvm.org
Tue Apr 2 08:58:03 PDT 2019


Author: smeenai
Date: Tue Apr  2 08:58:03 2019
New Revision: 357486

URL: http://llvm.org/viewvc/llvm-project?rev=357486&view=rev
Log:
[cmake] Add function for building native tool

Instead of duplicating functionality for building native versions of
tblgen and llvm-config, add a function to set up a native tool build.
This will also be used for llvm-nm in a follow-up.

This should be NFC for tblgen, besides the slightly different COMMENT
for the custom command (it'll display the tablegen target name instead
of always saying TableGen).  For the native llvm-config, it's a behavior
change in that we'll use llvm_ExternalProject_BuildCmd instead of
constructing the build command manually, always build in Release, and
reference the correct binary path for multi-config generators. I believe
all of these changes to be bug fixes.

Differential Revision: https://reviews.llvm.org/D60024

Modified:
    llvm/trunk/cmake/modules/CrossCompile.cmake
    llvm/trunk/cmake/modules/TableGen.cmake
    llvm/trunk/tools/llvm-config/CMakeLists.txt

Modified: llvm/trunk/cmake/modules/CrossCompile.cmake
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/cmake/modules/CrossCompile.cmake?rev=357486&r1=357485&r2=357486&view=diff
==============================================================================
--- llvm/trunk/cmake/modules/CrossCompile.cmake (original)
+++ llvm/trunk/cmake/modules/CrossCompile.cmake Tue Apr  2 08:58:03 2019
@@ -1,3 +1,5 @@
+include(LLVMExternalProjectUtils)
+
 function(llvm_create_cross_target_internal target_name toolchain buildtype)
 
   if(NOT DEFINED LLVM_${target_name}_BUILD)
@@ -67,4 +69,29 @@ function(llvm_create_cross_target target
   llvm_create_cross_target_internal(${target_name} ${sysroot} ${CMAKE_BUILD_TYPE})
 endfunction()
 
+# Sets up a native build for a tool, used e.g. for cross-compilation and
+# LLVM_OPTIMIZED_TABLEGEN. Always builds in Release.
+# - target: The target to build natively
+# - output_path_var: A variable name which receives the path to the built target
+# - DEPENDS: Any additional dependencies for the target
+function(build_native_tool target output_path_var)
+  cmake_parse_arguments(ARG "" "" "DEPENDS" ${ARGN})
+
+  if(CMAKE_CONFIGURATION_TYPES)
+    set(output_path "${LLVM_NATIVE_BUILD}/Release/bin/${target}")
+  else()
+    set(output_path "${LLVM_NATIVE_BUILD}/bin/${target}")
+  endif()
+
+  llvm_ExternalProject_BuildCmd(build_cmd ${target} ${LLVM_NATIVE_BUILD}
+                                CONFIGURATION Release)
+  add_custom_command(OUTPUT "${output_path}"
+                     COMMAND ${build_cmd}
+                     DEPENDS CONFIGURE_LLVM_NATIVE ${ARG_DEPENDS}
+                     WORKING_DIRECTORY "${LLVM_NATIVE_BUILD}"
+                     COMMENT "Building native ${target}..."
+                     USES_TERMINAL)
+  set(${output_path_var} "${output_path}" PARENT_SCOPE)
+endfunction()
+
 llvm_create_cross_target_internal(NATIVE "" Release)

Modified: llvm/trunk/cmake/modules/TableGen.cmake
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/cmake/modules/TableGen.cmake?rev=357486&r1=357485&r2=357486&view=diff
==============================================================================
--- llvm/trunk/cmake/modules/TableGen.cmake (original)
+++ llvm/trunk/cmake/modules/TableGen.cmake Tue Apr  2 08:58:03 2019
@@ -2,8 +2,6 @@
 # Extra parameters for `tblgen' may come after `ofn' parameter.
 # Adds the name of the generated file to TABLEGEN_OUTPUT.
 
-include(LLVMExternalProjectUtils)
-
 if(LLVM_MAIN_INCLUDE_DIR)
   set(LLVM_TABLEGEN_FLAGS -I ${LLVM_MAIN_INCLUDE_DIR})
 endif()
@@ -136,30 +134,18 @@ macro(add_tablegen target project)
 
   if(LLVM_USE_HOST_TOOLS)
     if( ${${project}_TABLEGEN} STREQUAL "${target}" )
-      if (NOT CMAKE_CONFIGURATION_TYPES)
-        set(${project}_TABLEGEN_EXE "${LLVM_NATIVE_BUILD}/bin/${target}")
-      else()
-        set(${project}_TABLEGEN_EXE "${LLVM_NATIVE_BUILD}/Release/bin/${target}")
-      endif()
+      build_native_tool(${target} ${project}_TABLEGEN_EXE DEPENDS ${target})
       set(${project}_TABLEGEN_EXE ${${project}_TABLEGEN_EXE} PARENT_SCOPE)
 
-      llvm_ExternalProject_BuildCmd(tblgen_build_cmd ${target}
-                                    ${LLVM_NATIVE_BUILD}
-                                    CONFIGURATION Release)
+      add_custom_target(${project}-tablegen-host DEPENDS ${${project}_TABLEGEN_EXE})
+      set(${project}_TABLEGEN_TARGET ${project}-tablegen-host PARENT_SCOPE)
+
       # Create an artificial dependency between tablegen projects, because they
       # compile the same dependencies, thus using the same build folders.
       # FIXME: A proper fix requires sequentially chaining tablegens.
       if (NOT ${project} STREQUAL LLVM AND TARGET ${project}-tablegen-host)
         add_dependencies(${project}-tablegen-host LLVM-tablegen-host)
       endif()
-      add_custom_command(OUTPUT ${${project}_TABLEGEN_EXE}
-        COMMAND ${tblgen_build_cmd}
-        DEPENDS CONFIGURE_LLVM_NATIVE ${target}
-        WORKING_DIRECTORY ${LLVM_NATIVE_BUILD}
-        COMMENT "Building native TableGen..."
-        USES_TERMINAL)
-      add_custom_target(${project}-tablegen-host DEPENDS ${${project}_TABLEGEN_EXE})
-      set(${project}_TABLEGEN_TARGET ${project}-tablegen-host PARENT_SCOPE)
     endif()
   endif()
 

Modified: llvm/trunk/tools/llvm-config/CMakeLists.txt
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/tools/llvm-config/CMakeLists.txt?rev=357486&r1=357485&r2=357486&view=diff
==============================================================================
--- llvm/trunk/tools/llvm-config/CMakeLists.txt (original)
+++ llvm/trunk/tools/llvm-config/CMakeLists.txt Tue Apr  2 08:58:03 2019
@@ -75,16 +75,9 @@ endif()
 add_file_dependencies(${CMAKE_CURRENT_SOURCE_DIR}/llvm-config.cpp ${BUILDVARIABLES_OBJPATH})
 
 if(CMAKE_CROSSCOMPILING AND NOT LLVM_CONFIG_PATH)
-  set(LLVM_CONFIG_PATH "${LLVM_NATIVE_BUILD}/bin/llvm-config" CACHE STRING "")
+  build_native_tool(llvm-config LLVM_CONFIG_PATH)
+  set(LLVM_CONFIG_PATH "${LLVM_CONFIG_PATH}" CACHE STRING "")
 
-  add_custom_command(OUTPUT "${LLVM_CONFIG_PATH}"
-    COMMAND ${CMAKE_COMMAND} --build . --target llvm-config --config $<CONFIG>
-    DEPENDS ${LLVM_NATIVE_BUILD}/CMakeCache.txt
-    WORKING_DIRECTORY ${LLVM_NATIVE_BUILD}
-    COMMENT "Building native llvm-config..."
-    USES_TERMINAL)
   add_custom_target(NativeLLVMConfig DEPENDS ${LLVM_CONFIG_PATH})
-  add_dependencies(NativeLLVMConfig CONFIGURE_LLVM_NATIVE)
-
   add_dependencies(llvm-config NativeLLVMConfig)
 endif()




More information about the llvm-commits mailing list