blob: 8aabd0969d5dc93206945a1c21438cbb5e7e7e5c [file] [log] [blame]
import sys
import subprocess
import os
import re
def main():
if sys.platform != 'darwin':
print("WARNING: Not running on macos. Skip the compatibility validation.")
# Exit quietly if run on a non-darwin machine.
sys.exit(0)
# Default target macos version setup in pom.xml > ${cmake.min_osx_version}
supported_version = "10.9"
arch = "x86_64"
# otool result has a different format between arm and x64
# for arm: we check for "minos"
# for x64: The format will be:
#
# Load command 8
# cmd LC_VERSION_MIN_MACOSX
# cmdsize 16
# version 10.9
# sdk 12.1
# Load command 9
otool_cmd = "otool -l target/cmake-build/lib/osx/{}/cruntime/libaws-crt-jni.dylib | grep -A3 \'LC_VERSION_MIN_MACOSX\' | grep -E version | tr -s ' ' | cut -f3 -d' ' | tr -d '[:space:]'".format(arch)
if len(sys.argv) > 1:
# Parsing the macos archtecture
arch = sys.argv[1]
else:
# If the archtecture is not set, set from system call
arch = os.uname().machine
print("uname result {}".format(arch))
if re.match(r'^(aarch64|armv[6-8]|arm64)', arch):
arch = "armv8"
# The oldest version we can target on arm64 is 11.0
supported_version = "11.0"
otool_cmd = "otool -l target/cmake-build/lib/osx/{}/cruntime/libaws-crt-jni.dylib | grep -E minos | tr -s ' ' | cut -f3 -d' ' | tr -d ' ' | tr -d '[:space:]'".format(arch)
print("Start to validate the build binary for MacOS with architecture {}, expected min os version: {}".format(arch,supported_version))
result = subprocess.check_output(otool_cmd, shell=True).decode("utf-8")
if result != supported_version:
# Failed
print("Failed the compatibility validation on MacOS architecture {}, expected '{}' and built '{}'".format(arch, supported_version, result))
sys.exit(1)
print("Pass the compatibility validation on MacOS architecture {} with min supported os version '{}'".format(arch,result))
sys.exit(0)
if __name__ == "__main__":
main()