From 9ed67668564257c27e49ff7a07fac0b23f27ba85 Mon Sep 17 00:00:00 2001 From: Butta Date: Mon, 26 Oct 2020 23:13:22 +0530 Subject: [PATCH] [build-script] Move --native-{clang,llvm,swift}-tools-path flags into the Python build-script Also, fix two places where the LLVM path was wrongly employed to set up clang, and use the Swift path in install_toolchain_path(). --- stdlib/CMakeLists.txt | 8 ++++---- unittests/runtime/CMakeLists.txt | 8 ++++---- utils/build-script | 12 ++++++++++++ utils/build_swift/build_swift/driver_arguments.py | 9 +++++++++ utils/build_swift/tests/expected_options.py | 6 ++++++ .../swift_build_support/products/product.py | 3 +++ 6 files changed, 38 insertions(+), 8 deletions(-) diff --git a/stdlib/CMakeLists.txt b/stdlib/CMakeLists.txt index 81cad0966a1d1..a0e3b138809fb 100644 --- a/stdlib/CMakeLists.txt +++ b/stdlib/CMakeLists.txt @@ -102,11 +102,11 @@ else() # If we use Clang-cl or MSVC, CMake provides default compiler and linker flags that are incompatible # with the frontend of Clang or Clang++. if(SWIFT_COMPILER_IS_MSVC_LIKE) - set(CMAKE_CXX_COMPILER "${SWIFT_NATIVE_LLVM_TOOLS_PATH}/clang-cl") - set(CMAKE_C_COMPILER "${SWIFT_NATIVE_LLVM_TOOLS_PATH}/clang-cl") + set(CMAKE_CXX_COMPILER "${SWIFT_NATIVE_CLANG_TOOLS_PATH}/clang-cl") + set(CMAKE_C_COMPILER "${SWIFT_NATIVE_CLANG_TOOLS_PATH}/clang-cl") else() - set(CMAKE_CXX_COMPILER "${SWIFT_NATIVE_LLVM_TOOLS_PATH}/clang++") - set(CMAKE_C_COMPILER "${SWIFT_NATIVE_LLVM_TOOLS_PATH}/clang") + set(CMAKE_CXX_COMPILER "${SWIFT_NATIVE_CLANG_TOOLS_PATH}/clang++") + set(CMAKE_C_COMPILER "${SWIFT_NATIVE_CLANG_TOOLS_PATH}/clang") endif() if(CMAKE_C_COMPILER_LAUNCHER MATCHES ".*distcc") diff --git a/unittests/runtime/CMakeLists.txt b/unittests/runtime/CMakeLists.txt index 5070c96876713..e8d69c5ac5d9e 100644 --- a/unittests/runtime/CMakeLists.txt +++ b/unittests/runtime/CMakeLists.txt @@ -13,11 +13,11 @@ if(("${SWIFT_HOST_VARIANT_SDK}" STREQUAL "${SWIFT_PRIMARY_VARIANT_SDK}") AND # If we use Clang-cl or MSVC, CMake provides default compiler and linker flags that are incompatible # with the frontend of Clang or Clang++. if(SWIFT_COMPILER_IS_MSVC_LIKE) - set(CMAKE_CXX_COMPILER "${SWIFT_NATIVE_LLVM_TOOLS_PATH}/clang-cl") - set(CMAKE_C_COMPILER "${SWIFT_NATIVE_LLVM_TOOLS_PATH}/clang-cl") + set(CMAKE_CXX_COMPILER "${SWIFT_NATIVE_CLANG_TOOLS_PATH}/clang-cl") + set(CMAKE_C_COMPILER "${SWIFT_NATIVE_CLANG_TOOLS_PATH}/clang-cl") else() - set(CMAKE_CXX_COMPILER "${SWIFT_NATIVE_LLVM_TOOLS_PATH}/clang++") - set(CMAKE_C_COMPILER "${SWIFT_NATIVE_LLVM_TOOLS_PATH}/clang") + set(CMAKE_CXX_COMPILER "${SWIFT_NATIVE_CLANG_TOOLS_PATH}/clang++") + set(CMAKE_C_COMPILER "${SWIFT_NATIVE_CLANG_TOOLS_PATH}/clang") endif() if(CMAKE_C_COMPILER_LAUNCHER MATCHES ".*distcc") diff --git a/utils/build-script b/utils/build-script index 639f790fe3543..9ccb8ef6e2dc1 100755 --- a/utils/build-script +++ b/utils/build-script @@ -704,6 +704,18 @@ class BuildScriptInvocation(object): impl_args += [ "--host-libtool", toolchain.libtool, ] + if args.native_clang_tools_path is not None: + impl_args += [ + "--native-clang-tools-path=%s" % args.native_clang_tools_path + ] + if args.native_llvm_tools_path is not None: + impl_args += [ + "--native-llvm-tools-path=%s" % args.native_llvm_tools_path + ] + if args.native_swift_tools_path is not None: + impl_args += [ + "--native-swift-tools-path=%s" % args.native_swift_tools_path + ] # If we have extra_swift_args, combine all of them together and then # add them as one command. diff --git a/utils/build_swift/build_swift/driver_arguments.py b/utils/build_swift/build_swift/driver_arguments.py index cb1c5c0b0e380..73fbd7c95e182 100644 --- a/utils/build_swift/build_swift/driver_arguments.py +++ b/utils/build_swift/build_swift/driver_arguments.py @@ -374,6 +374,15 @@ def create_argument_parser(): option('--host-cxx', store_path(executable=True), help='the absolute path to CXX, the "clang++" compiler for the ' 'host platform. Default is auto detected.') + option('--native-swift-tools-path', store_path, + help='the path to a directory that contains prebuilt Swift tools ' + 'that are executable on the host platform') + option('--native-clang-tools-path', store_path, + help='the path to a directory that contains prebuilt Clang tools ' + 'that are executable on the host platform') + option('--native-llvm-tools-path', store_path, + help='the path to a directory that contains prebuilt LLVM tools ' + 'that are executable on the host platform') option('--cmake-c-launcher', store_path(executable=True), default=os.environ.get('C_COMPILER_LAUNCHER', None), help='the absolute path to set CMAKE_C_COMPILER_LAUNCHER') diff --git a/utils/build_swift/tests/expected_options.py b/utils/build_swift/tests/expected_options.py index fd1820ce9cf5f..e26e7c5497105 100644 --- a/utils/build_swift/tests/expected_options.py +++ b/utils/build_swift/tests/expected_options.py @@ -188,6 +188,9 @@ 'lto_type': None, 'maccatalyst': False, 'maccatalyst_ios_tests': False, + 'native_clang_tools_path': None, + 'native_llvm_tools_path': None, + 'native_swift_tools_path': None, 'dump_config': False, 'show_sdks': False, 'skip_build': False, @@ -652,6 +655,9 @@ class BuildScriptImplOption(_BaseOption): PathOption('--install-symroot'), PathOption('--install-destdir'), EnableOption('--install-all'), + PathOption('--native-clang-tools-path'), + PathOption('--native-llvm-tools-path'), + PathOption('--native-swift-tools-path'), PathOption('--symbols-package'), PathOption('--cmake-c-launcher'), PathOption('--cmake-cxx-launcher'), diff --git a/utils/swift_build_support/swift_build_support/products/product.py b/utils/swift_build_support/swift_build_support/products/product.py index ba6f673bb6c99..001e2bf030834 100644 --- a/utils/swift_build_support/swift_build_support/products/product.py +++ b/utils/swift_build_support/swift_build_support/products/product.py @@ -169,6 +169,9 @@ def install_toolchain_path(self, host_target): Returns the path to the toolchain that is being created as part of this build. """ + if self.args.native_swift_tools_path is not None: + return os.path.split(self.args.native_swift_tools_path)[0] + install_destdir = self.args.install_destdir if self.args.cross_compile_hosts: build_root = os.path.dirname(self.build_dir)