summaryrefslogtreecommitdiff
path: root/config/darwin.config
blob: 1fd850cb07793cb09be8bd882e3f4b99e1b227cc (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
# This file contains the default configuration to compile for Darwin
# platforms. It contains sensitive enviroment configuration that
# shouldn't be modified unless you know what you are doing.
# PLEASE, DO NOT EDIT THIS FILE

import os
from cerbero.config import Architecture, DistroVersion
from cerbero.utils import shell
from cerbero.errors import FatalError

# We don't want anything from macports detected in configure and
# used later. System libs are passed through the -isysroot option
allow_system_libs=False

if 'nogi' not in variants:
    variants.append('gi')

if target_arch == Architecture.X86_64:
    build='x86_64-apple-darwin12'
elif target_arch == Architecture.X86:
    build='i386-apple-darwin12'
elif target_arch == Architecture.UNIVERSAL:
    build='universal-apple-darwin12'

# By default we ask for the 'latest' SDK. This can be overriden by 
# configure using 'osx_target_sdk_version' (e.g. set to '10.10')
sdk_requested_version = '' # Empty == latest
if osx_target_sdk_version is not None:
    sdk_requested_version = osx_target_sdk_version

sdk_root = None
ret = shell.check_output(['xcodebuild', '-sdk', 'macosx' + sdk_requested_version, '-version', 'Path'], fail=False).strip()
if ret.startswith('/Applications'):
  sdk_root = ret

if sdk_root is None:
    raise FatalError("Could not determine SDK path with requested version %s: %s" % (sdk_requested_version, ret))
elif not os.path.exists(sdk_root):
    raise FatalError("Determined SDK path %s does not exist. Is your XCode installation broken?" % sdk_root);

min_osx_sdk_version = min_osx_sdk_version or '10.11'
sdk='-mmacosx-version-min=%s -isysroot %s' % (min_osx_sdk_version, sdk_root)

# Initialize all these so we can just do += later
for f in ['CFLAGS', 'CCASFLAGS', 'CXXFLAGS', 'OBJCFLAGS', 'CPPFLAGS', 'LDFLAGS']:
    env[f] = env.get(f, '')

arch_cflags = '-Wall -g -O2'
arch_ldflags = ' -headerpad_max_install_names -Wl,-headerpad_max_install_names -Wno-error=unused-command-line-argument '

if target_arch == Architecture.X86_64:
    arch_cflags += ' -arch x86_64 -m64'
    arch_ldflags += ' -arch x86_64 -m64 -Wl,-arch,x86_64'
elif target_arch == Architecture.X86:
    arch_cflags += ' -arch i386 -m32'
    arch_ldflags += ' -arch i386 -m32 -Wl,-arch,i386'
    env['VERSIONER_PYTHON_PREFER_32_BIT'] = 'yes'

arch_cflags += ' -Wno-error=format-nonliteral '


incl_dir = os.path.join(prefix, 'include')
if not os.path.exists(incl_dir):
    os.makedirs(incl_dir)

# Append to these flags if not already present
for f in ['CFLAGS', 'CCASFLAGS', 'CXXFLAGS', 'OBJCFLAGS']:
    if arch_cflags not in env[f]:
        env[f] += ' %s ' % arch_cflags
    incflag = '-I' + incl_dir
    if incflag not in env[f]:
        env[f] += ' %s ' % incflag
    if sdk not in env[f]:
        env[f] += ' %s ' % sdk

# To ensure that AC_CHECK_HEADER etc detect the right headers
if arch_cflags not in env['CPPFLAGS']:
    env['CPPFLAGS'] += ' %s ' % arch_cflags
if sdk not in env['CPPFLAGS']:
    env['CPPFLAGS'] += ' %s ' % sdk

if arch_ldflags not in env['LDFLAGS']:
    env['LDFLAGS'] += ' %s ' % arch_ldflags
if sdk not in env['LDFLAGS']:
    env['LDFLAGS'] += ' %s ' % sdk

env['STRIP'] = 'strip'
env['LD'] = 'ld'
env['AR'] = 'ar'
env['RANLIB'] = 'ranlib'
env['NM'] = 'nm'
env['OBJCOPY'] = 'objcopy'
env['CC'] = 'clang'
env['OBJC'] = 'clang'
env['CXX'] = 'clang++'
env['OBJCXX'] = 'clang++'
# Since 10.10 libstdc++ is deprecated, and might no longer be
# shipped. Make sure we use libc++ instead
env['CXXFLAGS'] += ' -stdlib=libc++ '


if target_arch != Architecture.UNIVERSAL:
    # Ensure lightweight architectures are build when only targetting one arch
    env['ARCHFLAGS'] = '-arch %s' % target_arch

# Link GL headers
gl_headers = os.path.join(sdk_root, 'usr', 'X11', 'include', 'GL')
if not os.path.exists(gl_headers):
    gl_headers = os.path.join(sdk_root, 'System', 'Library', 'Frameworks', 'OpenGL.framework', 'Headers')

gl_headers_prefix = os.path.join(incl_dir, 'GL')
if not os.path.exists(gl_headers_prefix):
    if os.path.lexists(gl_headers_prefix):
        os.remove(gl_headers_prefix)
    os.symlink(gl_headers, gl_headers_prefix)
if not os.path.exists(gl_headers_prefix):
    raise Exception ("GL headers path not found: %s" % gl_headers)

if use_ccache:
    comp = env.get('CC', 'clang')
    if not 'ccache' in comp:
        env['CC'] = 'ccache ' + comp
    comp = env.get('CXX', 'clang++')
    if not 'ccache' in comp:
        env['CXX'] = 'ccache ' + comp

# Workaround for https://openradar.appspot.com/22671534 on 10.11.
env['gl_cv_func_getcwd_abort_bug'] = 'no'

moltenvk_prefix = os.path.join(home_dir, 'moltenvk')