Commit dcd2eb88 authored by Ronald Oussoren's avatar Ronald Oussoren

MacOS X: Enable 4-way universal builds

This patch adds a new configure argument on OSX:
        --with-universal-archs=[32-bit|64-bit|all]

When used with the --enable-universalsdk option this controls which
CPU architectures are includes in the framework. The default is 32-bit,
meaning i386 and ppc. The most useful alternative is 'all', which includes
all 4 CPU architectures supported by MacOS X (i386, ppc, x86_64 and ppc64).

This includes limited support for the Carbon bindings in 64-bit mode as well,
limited because (a) I haven't done extensive testing and (b) a large portion
of the Carbon API's aren't available in 64-bit mode anyway.

I've also duplicated a feature of Apple's build of python: setting the
environment variable 'ARCHFLAGS' controls the '-arch' flags used for building
extensions using distutils.
parent 4416152b
...@@ -539,6 +539,26 @@ def get_config_vars(*args): ...@@ -539,6 +539,26 @@ def get_config_vars(*args):
flags = re.sub('-isysroot [^ \t]*', ' ', flags) flags = re.sub('-isysroot [^ \t]*', ' ', flags)
_config_vars[key] = flags _config_vars[key] = flags
else:
# Allow the user to override the architecture flags using
# an environment variable.
# NOTE: This name was introduced by Apple in OSX 10.5 and
# is used by several scripting languages distributed with
# that OS release.
if 'ARCHFLAGS' in os.environ:
arch = os.environ['ARCHFLAGS']
for key in ('LDFLAGS', 'BASECFLAGS',
# a number of derived variables. These need to be
# patched up as well.
'CFLAGS', 'PY_CFLAGS', 'BLDSHARED'):
flags = _config_vars[key]
flags = re.sub('-arch\s+\w+\s', ' ', flags)
flags = flags + ' ' + arch
_config_vars[key] = flags
if args: if args:
vals = [] vals = []
for name in args: for name in args:
......
...@@ -64,7 +64,7 @@ def _darwin_compiler_fixup(compiler_so, cc_args): ...@@ -64,7 +64,7 @@ def _darwin_compiler_fixup(compiler_so, cc_args):
stripArch = '-arch' in cc_args stripArch = '-arch' in cc_args
stripSysroot = '-isysroot' in cc_args stripSysroot = '-isysroot' in cc_args
if stripArch: if stripArch or 'ARCHFLAGS' in os.environ:
while 1: while 1:
try: try:
index = compiler_so.index('-arch') index = compiler_so.index('-arch')
...@@ -73,6 +73,12 @@ def _darwin_compiler_fixup(compiler_so, cc_args): ...@@ -73,6 +73,12 @@ def _darwin_compiler_fixup(compiler_so, cc_args):
except ValueError: except ValueError:
break break
if 'ARCHFLAGS' in os.environ and not stripArch:
# User specified different -arch flags in the environ,
# see also distutils.sysconfig
compiler_so = compiler_so + ' ' + os.environ['ARCHFLAGS']
if stripSysroot: if stripSysroot:
try: try:
index = compiler_so.index('-isysroot') index = compiler_so.index('-isysroot')
......
...@@ -125,12 +125,19 @@ def get_platform (): ...@@ -125,12 +125,19 @@ def get_platform ():
osname = "macosx" osname = "macosx"
if (release + '.') < '10.4.' and \ if (release + '.') >= '10.4.' and \
get_config_vars().get('UNIVERSALSDK', '').strip(): '-arch' in get_config_vars().get('CFLAGS', '').strip():
# The universal build will build fat binaries, but not on # The universal build will build fat binaries, but not on
# systems before 10.4 # systems before 10.4
#
# Try to detect 4-way universal builds, those have machine-type
# 'universal' instead of 'fat'.
machine = 'fat' machine = 'fat'
if '-arch x86_64' in get_config_vars().get('CFLAGS'):
machine = 'universal'
elif machine in ('PowerPC', 'Power_Macintosh'): elif machine in ('PowerPC', 'Power_Macintosh'):
# Pick a sane name for the PPC architecture. # Pick a sane name for the PPC architecture.
machine = 'ppc' machine = 'ppc'
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment