From 1203c2378192acb8cf67ccf731d40f1f954de7a6 Mon Sep 17 00:00:00 2001 From: Skyler Saleh Date: Sat, 19 Jun 2021 10:06:47 -0700 Subject: [PATCH] Apple M1: Support for unit testing universal builds --- BuildMacOSUniversalBinary.py | 39 +++++++++++++++++++++++++++++++++++- 1 file changed, 38 insertions(+), 1 deletion(-) diff --git a/BuildMacOSUniversalBinary.py b/BuildMacOSUniversalBinary.py index ea6f83d077..569594e2a5 100755 --- a/BuildMacOSUniversalBinary.py +++ b/BuildMacOSUniversalBinary.py @@ -70,6 +70,8 @@ DEFAULT_CONFIG = { "generator": "Unix Makefiles", "build_type": "Release", + "run_unit_tests": False, + } # Architectures to build for. This is explicity left out of the command line @@ -114,6 +116,9 @@ def parse_args(conf=DEFAULT_CONFIG): help="Path to .entitlements file for code signing", default=conf["entitlements"]) + parser.add_argument("--run_unit_tests", action="store_true", + default=conf["run_unit_tests"]) + parser.add_argument( "--codesign", help="Code signing identity to use to sign the applications", @@ -323,8 +328,40 @@ def build(config): "--verbose=2", path]) + print("Built Universal Binary successfully!") + + # Build and run unit tests for each architecture + unit_test_results = {} + if config["run_unit_tests"]: + for arch in ARCHITECTURES: + if not os.path.exists(arch): + os.mkdir(arch) + + print("Building and running unit tests for: {arch}") + unit_test_results[arch] = \ + subprocess.call(["cmake", "--build", ".", + "--config", config["build_type"], + "--target", "unittests", + "--parallel", f"{threads}"], cwd=arch) + + passed_unit_tests = True + for a in unit_test_results: + code = unit_test_results[a] + passed = code == 0 + + status_string = "PASSED" + if not passed: + passed_unit_tests = False + status_string = f"FAILED ({code})" + + print(a + " Unit Tests: " + status_string) + + if not passed_unit_tests: + exit(-1) + + print("Passed all unit tests") + if __name__ == "__main__": conf = parse_args() build(conf) - print("Built Universal Binary successfully!")