From eed2db947104f09b49adf98c27d5e3282187087b
From: Dario Rexin <drexin@apple.com>
Date: Tue, 20 Jul 2021 11:09:22 -0700
Subject: [PATCH] [Build] Make LLVM a build-script product

diff --git a/swift/utils/swift_build_support/swift_build_support/build_script_invocation.py b/swift/utils/swift_build_support/swift_build_support/build_script_invocation.py
index 0b127d46c48..39144ae4674 100644
--- a/swift/utils/swift_build_support/swift_build_support/build_script_invocation.py
+++ b/swift/utils/swift_build_support/swift_build_support/build_script_invocation.py
@@ -509,7 +509,7 @@ class BuildScriptInvocation(object):
                 "SWIFT_TEST_TARGETS": " ".join(
                     config.swift_test_run_targets),
                 "SWIFT_FLAGS": config.swift_flags,
-                "SWIFT_TARGET_CMAKE_OPTIONS": config.cmake_options,
+                "SWIFT_TARGET_CMAKE_OPTIONS": ' '.join(config.cmake_options),
             }
 
         return options
diff --git a/swift/utils/swift_build_support/swift_build_support/host_specific_configuration.py b/swift/utils/swift_build_support/swift_build_support/host_specific_configuration.py
index fc037d6fb44..443b5e766c1 100644
--- a/swift/utils/swift_build_support/swift_build_support/host_specific_configuration.py
+++ b/swift/utils/swift_build_support/swift_build_support/host_specific_configuration.py
@@ -15,6 +15,7 @@ import sys
 from argparse import ArgumentError
 
 from . import compiler_stage
+from .cmake import CMakeOptions
 from .targets import StdlibDeploymentTarget
 
 
@@ -83,7 +84,7 @@ class HostSpecificConfiguration(object):
         self.swift_benchmark_build_targets = []
         self.swift_benchmark_run_targets = []
         self.swift_flags = ''
-        self.cmake_options = ''
+        self.cmake_options = CMakeOptions()
         for deployment_target_name in stdlib_targets_to_configure:
             # Get the target object.
             deployment_target = StdlibDeploymentTarget.get_target_for_name(
diff --git a/swift/utils/swift_build_support/swift_build_support/products/cmark.py b/swift/utils/swift_build_support/swift_build_support/products/cmark.py
index b11313fab87..fe2e8982300 100644
--- a/swift/utils/swift_build_support/swift_build_support/products/cmark.py
+++ b/swift/utils/swift_build_support/swift_build_support/products/cmark.py
@@ -12,6 +12,8 @@
 
 from . import cmake_product
 from . import earlyswiftdriver
+from ..host_specific_configuration \
+    import HostSpecificConfiguration
 
 
 class CMark(cmake_product.CMakeProduct):
@@ -68,6 +70,9 @@ class CMark(cmake_product.CMakeProduct):
             toolchain_file = self.generate_linux_toolchain_file(platform, arch)
             self.cmake_options.define('CMAKE_TOOLCHAIN_FILE:PATH', toolchain_file)
 
+        host_config = HostSpecificConfiguration(host_target, self.args)
+        self.cmake_options.extend(host_config.cmake_options)
+
         self.build_with_cmake(["all"], self.args.cmark_build_variant, [])
 
     def should_test(self, host_target):
diff --git a/swift/utils/swift_build_support/swift_build_support/targets.py b/swift/utils/swift_build_support/swift_build_support/targets.py
index 05966defe28..133761ba91d 100644
--- a/swift/utils/swift_build_support/swift_build_support/targets.py
+++ b/swift/utils/swift_build_support/swift_build_support/targets.py
@@ -11,6 +11,7 @@
 import os
 import platform
 
+from . import cmake
 from . import shell
 
 try:
@@ -78,7 +79,7 @@ class Platform(object):
         """
         CMake flags to build for a platform, useful for cross-compiling
         """
-        return ''
+        return cmake.CMakeOptions()
 
     def swiftpm_config(self, args, output_dir, swift_toolchain, resource_path):
         """
@@ -163,12 +164,13 @@ class AndroidPlatform(Platform):
         return flags
 
     def cmake_options(self, args):
-        options = '-DCMAKE_SYSTEM_NAME=Android '
-        options += '-DCMAKE_SYSTEM_VERSION=%s ' % (args.android_api_level)
-        options += '-DCMAKE_SYSTEM_PROCESSOR=%s ' % (args.android_arch if not
-                                                     args.android_arch == 'armv7'
-                                                     else 'armv7-a')
-        options += '-DCMAKE_ANDROID_NDK:PATH=%s' % (args.android_ndk)
+        options = cmake.CMakeOptions()
+        options.define('CMAKE_SYSTEM_NAME', 'Android')
+        options.define('CMAKE_SYSTEM_VERSION' , args.android_api_level)
+        options.define('CMAKE_SYSTEM_PROCESSOR', args.android_arch if not
+                       args.android_arch == 'armv7'
+                       else 'armv7-a')
+        options.define('CMAKE_ANDROID_STANDALONE_TOOLCHAIN:PATH', args.android_ndk)
         return options
 
     def ndk_toolchain_path(self, args):
