1*3c7ae9deSAndroid Build Coastguard Workerimport sys 2*3c7ae9deSAndroid Build Coastguard Workerimport subprocess 3*3c7ae9deSAndroid Build Coastguard Workerimport os 4*3c7ae9deSAndroid Build Coastguard Workerimport re 5*3c7ae9deSAndroid Build Coastguard Worker 6*3c7ae9deSAndroid Build Coastguard Worker 7*3c7ae9deSAndroid Build Coastguard Workerdef main(): 8*3c7ae9deSAndroid Build Coastguard Worker if sys.platform != 'darwin': 9*3c7ae9deSAndroid Build Coastguard Worker print("WARNING: Not running on macos. Skip the compatibility validation.") 10*3c7ae9deSAndroid Build Coastguard Worker # Exit quietly if run on a non-darwin machine. 11*3c7ae9deSAndroid Build Coastguard Worker sys.exit(0) 12*3c7ae9deSAndroid Build Coastguard Worker 13*3c7ae9deSAndroid Build Coastguard Worker # Default target macos version setup in pom.xml > ${cmake.min_osx_version} 14*3c7ae9deSAndroid Build Coastguard Worker supported_version = "10.9" 15*3c7ae9deSAndroid Build Coastguard Worker arch = "x86_64" 16*3c7ae9deSAndroid Build Coastguard Worker 17*3c7ae9deSAndroid Build Coastguard Worker 18*3c7ae9deSAndroid Build Coastguard Worker # otool result has a different format between arm and x64 19*3c7ae9deSAndroid Build Coastguard Worker # for arm: we check for "minos" 20*3c7ae9deSAndroid Build Coastguard Worker # for x64: The format will be: 21*3c7ae9deSAndroid Build Coastguard Worker # 22*3c7ae9deSAndroid Build Coastguard Worker # Load command 8 23*3c7ae9deSAndroid Build Coastguard Worker # cmd LC_VERSION_MIN_MACOSX 24*3c7ae9deSAndroid Build Coastguard Worker # cmdsize 16 25*3c7ae9deSAndroid Build Coastguard Worker # version 10.9 26*3c7ae9deSAndroid Build Coastguard Worker # sdk 12.1 27*3c7ae9deSAndroid Build Coastguard Worker # Load command 9 28*3c7ae9deSAndroid Build Coastguard Worker 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) 29*3c7ae9deSAndroid Build Coastguard Worker 30*3c7ae9deSAndroid Build Coastguard Worker if len(sys.argv) > 1: 31*3c7ae9deSAndroid Build Coastguard Worker # Parsing the macos archtecture 32*3c7ae9deSAndroid Build Coastguard Worker arch = sys.argv[1] 33*3c7ae9deSAndroid Build Coastguard Worker else: 34*3c7ae9deSAndroid Build Coastguard Worker # If the archtecture is not set, set from system call 35*3c7ae9deSAndroid Build Coastguard Worker arch = os.uname().machine 36*3c7ae9deSAndroid Build Coastguard Worker print("uname result {}".format(arch)) 37*3c7ae9deSAndroid Build Coastguard Worker 38*3c7ae9deSAndroid Build Coastguard Worker if re.match(r'^(aarch64|armv[6-8]|arm64)', arch): 39*3c7ae9deSAndroid Build Coastguard Worker arch = "armv8" 40*3c7ae9deSAndroid Build Coastguard Worker # The oldest version we can target on arm64 is 11.0 41*3c7ae9deSAndroid Build Coastguard Worker supported_version = "11.0" 42*3c7ae9deSAndroid Build Coastguard Worker 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) 43*3c7ae9deSAndroid Build Coastguard Worker 44*3c7ae9deSAndroid Build Coastguard Worker print("Start to validate the build binary for MacOS with architecture {}, expected min os version: {}".format(arch,supported_version)) 45*3c7ae9deSAndroid Build Coastguard Worker result = subprocess.check_output(otool_cmd, shell=True).decode("utf-8") 46*3c7ae9deSAndroid Build Coastguard Worker 47*3c7ae9deSAndroid Build Coastguard Worker if result != supported_version: 48*3c7ae9deSAndroid Build Coastguard Worker # Failed 49*3c7ae9deSAndroid Build Coastguard Worker print("Failed the compatibility validation on MacOS architecture {}, expected '{}' and built '{}'".format(arch, supported_version, result)) 50*3c7ae9deSAndroid Build Coastguard Worker sys.exit(1) 51*3c7ae9deSAndroid Build Coastguard Worker 52*3c7ae9deSAndroid Build Coastguard Worker print("Pass the compatibility validation on MacOS architecture {} with min supported os version '{}'".format(arch,result)) 53*3c7ae9deSAndroid Build Coastguard Worker sys.exit(0) 54*3c7ae9deSAndroid Build Coastguard Worker 55*3c7ae9deSAndroid Build Coastguard Workerif __name__ == "__main__": 56*3c7ae9deSAndroid Build Coastguard Worker main() 57