makepanda: write target platform to file, rebuild if platform changes

This commit is contained in:
rdb 2017-11-24 17:47:22 +01:00
parent 883c6555ec
commit e03c249cc5
2 changed files with 71 additions and 1 deletions

View File

@ -22,6 +22,7 @@ except:
from makepandacore import *
from installpanda import *
from distutils.util import get_platform
import time
import os
import sys
@ -68,6 +69,7 @@ WINDOWS_SDK = None
MSVC_VERSION = None
BOOUSEINTELCOMPILER = False
OPENCV_VER_23 = False
PLATFORM = None
if "MACOSX_DEPLOYMENT_TARGET" in os.environ:
OSXTARGET=os.environ["MACOSX_DEPLOYMENT_TARGET"]
@ -384,6 +386,67 @@ MAJOR_VERSION = '.'.join(VERSION.split('.')[:2])
if P3DSUFFIX is None:
P3DSUFFIX = MAJOR_VERSION
# Now determine the distutils-style platform tag for the target system.
target = GetTarget()
if target == 'windows':
if GetTargetArch() == 'x64':
PLATFORM = 'win-amd64'
else:
PLATFORM = 'win32'
elif target == 'darwin':
if OSXTARGET:
osxver = OSXTARGET
else:
maj, min = platform.mac_ver()[0].split('.')[:2]
osxver = int(maj), int(min)
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'
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") and os.path.isdir("/opt/python"):
# This is manylinux1. A bit of a sloppy check, though.
if GetTargetArch() in ('x86_64', 'amd64'):
PLATFORM = 'manylinux1-x86_64'
else:
PLATFORM = 'manylinux1-i686'
elif not CrossCompiling():
if HasTargetArch():
# Replace the architecture in the platform string.
platform_parts = get_platform().rsplit('-', 1)
target_arch = GetTargetArch()
if target_arch == 'amd64':
target_arch = 'x86_64'
PLATFORM = platform_parts[0] + '-' + target_arch
else:
# We're not cross-compiling; just take the host arch.
PLATFORM = get_platform()
else:
target_arch = GetTargetArch()
if target_arch == 'amd64':
target_arch = 'x86_64'
PLATFORM = '{0}-{1}' % (target, target_arch)
print("Platform: %s" % PLATFORM)
outputdir_suffix = ""
if (RUNTIME or RTDIST):
@ -2485,6 +2548,9 @@ def WriteConfigSettings():
if (PkgSkip(x)): ConditionalWriteFile(GetOutputDir() + '/tmp/dtool_have_'+x.lower()+'.dat', "0\n")
else: ConditionalWriteFile(GetOutputDir() + '/tmp/dtool_have_'+x.lower()+'.dat', "1\n")
# Finally, write a platform.dat with the platform we are compiling for.
ConditionalWriteFile(GetOutputDir() + '/tmp/platform.dat', PLATFORM)
WriteConfigSettings()
WarnConflictingFiles()

View File

@ -3191,10 +3191,14 @@ def TargetAdd(target, dummy=0, opts=[], input=[], dep=[], ipath=None, winrc=None
if winrc and GetTarget() == 'windows':
TargetAdd(target, input=WriteResourceFile(target.split("/")[-1].split(".")[0], **winrc))
if target.endswith(".in"):
ext = os.path.splitext(target)[1]
if ext == ".in":
if not CrossCompiling():
t.deps[FindLocation("interrogate.exe", [])] = 1
t.deps[FindLocation("dtool_have_python.dat", [])] = 1
if ext in (".obj", ".tlb", ".res", ".plugin", ".app") or ext in SUFFIX_DLL or ext in SUFFIX_LIB:
t.deps[FindLocation("platform.dat", [])] = 1
if target.endswith(".pz") and not CrossCompiling():
t.deps[FindLocation("pzip.exe", [])] = 1