From dbd16d2e05108bc922ab87fc40f2a0b7891ea5e9 Mon Sep 17 00:00:00 2001 From: Xi Ge Date: Fri, 28 Aug 2020 18:56:17 -0700 Subject: [PATCH] swift_build_sdk_interfaces.py: adjust output directory path to an SDK-versioned directory When clients specify an output directory without SDK version, the script will change the input so we emit all prebuilt module caches into SDK-versioned directories without modifying the client side. rdar://67951012 --- utils/swift_build_sdk_interfaces.py | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/utils/swift_build_sdk_interfaces.py b/utils/swift_build_sdk_interfaces.py index 900bae30064e0..c8381193a9bd4 100755 --- a/utils/swift_build_sdk_interfaces.py +++ b/utils/swift_build_sdk_interfaces.py @@ -354,6 +354,14 @@ def process_module_files(pool, module_files): return overall_exit_status +def getSDKVersion(sdkroot): + settingPath = os.path.join(sdkroot, 'SDKSettings.json') + with open(settingPath) as json_file: + data = json.load(json_file) + return data['Version'] + fatal("Failed to get SDK version from: " + settingPath) + + def main(): global args, shared_output_lock parser = create_parser() @@ -373,6 +381,12 @@ def main(): if not os.path.isdir(args.sdk): fatal("invalid SDK: " + args.sdk) + # if the given output dir ends with 'prebuilt-modules', we should + # append the SDK version number so all modules will built into + # the SDK-versioned sub-directory. + if os.path.basename(args.output_dir) == 'prebuilt-modules': + args.output_dir = os.path.join(args.output_dir, getSDKVersion(args.sdk)) + xfails = () if args.ignore_non_stdlib_failures: if args.xfails: