From ce5379a0add2dc98f329b4a153e80f806e2caa7e Mon Sep 17 00:00:00 2001 From: rdb Date: Fri, 18 Dec 2020 12:29:04 +0100 Subject: [PATCH] makepanda: Bring back --universal flag for Universal 2 --- makepanda/makepanda.py | 59 ++++++++++++++++++++++++++++++++++++------ 1 file changed, 51 insertions(+), 8 deletions(-) diff --git a/makepanda/makepanda.py b/makepanda/makepanda.py index b362d424f6..5c7fdcae74 100755 --- a/makepanda/makepanda.py +++ b/makepanda/makepanda.py @@ -59,6 +59,7 @@ RPMRELEASE="1" GIT_COMMIT=None MAJOR_VERSION=None OSXTARGET=None +OSX_ARCHS=[] global STRDXSDKVERSION, BOOUSEINTELCOMPILER STRDXSDKVERSION = 'default' WINDOWS_SDK = None @@ -133,6 +134,7 @@ def usage(problem): print(" --outputdir X (use the specified directory instead of 'built')") print(" --threads N (use the multithreaded build system. see manual)") print(" --osxtarget N (the macOS version number to build for (macOS only))") + print(" --universal (build universal binaries (macOS 11.0+ only))") print(" --override \"O=V\" (override dtool_config/prc option value)") print(" --static (builds libraries for static linking)") print(" --target X (experimental cross-compilation (android only))") @@ -160,7 +162,7 @@ def usage(problem): def parseopts(args): global INSTALLER,WHEEL,RUNTESTS,GENMAN,DISTRIBUTOR,VERSION - global COMPRESSOR,THREADCOUNT,OSXTARGET + global COMPRESSOR,THREADCOUNT,OSXTARGET,OSX_ARCHS global DEBVERSION,WHLVERSION,RPMRELEASE,GIT_COMMIT global STRDXSDKVERSION, WINDOWS_SDK, MSVC_VERSION, BOOUSEINTELCOMPILER global COPY_PYTHON @@ -168,7 +170,7 @@ def parseopts(args): # Options for which to display a deprecation warning. removedopts = [ "use-touchinput", "no-touchinput", "no-awesomium", "no-directscripts", - "no-carbon", "universal", "no-physx", "no-rocket", "host" + "no-carbon", "no-physx", "no-rocket", "host" ] # All recognized options. @@ -178,7 +180,7 @@ def parseopts(args): "version=","lzma","no-python","threads=","outputdir=","override=", "static","debversion=","rpmrelease=","p3dsuffix=","rtdist-version=", "directx-sdk=", "windows-sdk=", "msvc-version=", "clean", "use-icl", - "target=", "arch=", "git-commit=", "no-copy-python", + "universal", "target=", "arch=", "git-commit=", "no-copy-python", "cggl-incdir=", "cggl-libdir=", ] + removedopts @@ -186,6 +188,7 @@ def parseopts(args): optimize = "" target = None target_arch = None + universal = False clean_build = False for pkg in PkgListGet(): longopts.append("use-" + pkg.lower()) @@ -209,6 +212,7 @@ def parseopts(args): elif (option=="--threads"): THREADCOUNT=int(value) elif (option=="--outputdir"): SetOutputDir(value.strip()) elif (option=="--osxtarget"): OSXTARGET=value.strip() + elif (option=="--universal"): universal = True elif (option=="--target"): target = value.strip() elif (option=="--arch"): target_arch = value.strip() elif (option=="--nocolor"): DisableColors() @@ -292,6 +296,24 @@ def parseopts(args): if target is not None or target_arch is not None: SetTarget(target, target_arch) + if universal: + if target_arch: + exit("--universal is incompatible with --arch") + + if OSXTARGET: + osxver = OSXTARGET + else: + maj, min = platform.mac_ver()[0].split('.')[:2] + osxver = int(maj), int(min) + + OSX_ARCHS.append("x86_64") + + if osxver >= (11, 0): + OSX_ARCHS.append("arm64") + + elif HasTargetArch(): + OSX_ARCHS.append(GetTargetArch()) + try: SetOptimize(int(optimize)) assert GetOptimize() in [1, 2, 3, 4] @@ -390,7 +412,26 @@ elif target == 'darwin': if osxver < (10, 9): osxver = (10, 9) - arch_tag = GetTargetArch() + arch_tag = None + if not OSX_ARCHS: + arch_tag = GetTargetArch() + elif len(OSX_ARCHS) == 1: + arch_tag = OSX_ARCHS[0] + elif frozenset(OSX_ARCHS) == frozenset(('i386', 'ppc')): + arch_tag = 'fat' + elif frozenset(OSX_ARCHS) == frozenset(('x86_64', 'i386')): + arch_tag = 'intel' + elif frozenset(OSX_ARCHS) == frozenset(('x86_64', 'ppc64')): + arch_tag = 'fat64' + elif frozenset(OSX_ARCHS) == frozenset(('x86_64', 'i386', 'ppc')): + arch_tag = 'fat32' + elif frozenset(OSX_ARCHS) == frozenset(('x86_64', 'i386', 'ppc64', 'ppc')): + arch_tag = 'universal' + elif frozenset(OSX_ARCHS) == frozenset(('x86_64', 'arm64')): + arch_tag = 'universal2' + else: + raise RuntimeError('No arch tag for arch combination %s' % OSX_ARCHS) + PLATFORM = 'macosx-{0}.{1}-{2}'.format(osxver[0], osxver[1], arch_tag) elif target == 'linux' and (os.path.isfile("/lib/libc-2.5.so") or os.path.isfile("/lib64/libc-2.5.so")) and os.path.isdir("/opt/python"): @@ -1258,8 +1299,9 @@ def CompileCxx(obj,src,opts): # Use libc++ to enable C++11 features. cmd += " -stdlib=libc++" - arch = GetTargetArch() - cmd += " -arch %s" % arch + for arch in OSX_ARCHS: + if 'NOARCH:' + arch.upper() not in opts: + cmd += " -arch %s" % arch if "SYSROOT" in SDK: if GetTarget() != "android": @@ -1776,8 +1818,9 @@ def CompileLink(dll, obj, opts): # Use libc++ to enable C++11 features. cmd += " -stdlib=libc++" - arch = GetTargetArch() - cmd += " -arch %s" % arch + for arch in OSX_ARCHS: + if 'NOARCH:' + arch.upper() not in opts: + cmd += " -arch %s" % arch elif GetTarget() == 'android': arch = GetTargetArch()