summaryrefslogtreecommitdiff
path: root/config/linux.config
blob: f786bee5b4acffe2defc93a9c232b043d22d22ab (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
# This file contains the default configuration to compile for Linux
# 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.utils import shell
from cerbero.utils import messages as m
from cerbero.config import Architecture, Distro

vlist = ['alsa', 'x11', 'pulse', 'cdparanoia', 'v4l2', 'gi', 'unwind']
if '--export-dynamic-symbol' in shell.check_output(['ld', '--help']):
    vlist += ['rust']
elif prefix != build_tools_prefix:
    m.warning('Disabling rust variant: binutils is too old, need >=2.36')
# Set default values for some optional variants
variants.override(vlist)

for f in ['CPPFLAGS', 'CFLAGS', 'CCASFLAGS', 'CXXFLAGS', 'LDFLAGS',
          'OBJCFLAGS']:
    env[f] = env.get(f, '')

arch_flags = ''
if target_arch == Architecture.X86:
    arch_flags += ' -m32 '
    _host = 'i686-linux-gnu'
elif target_arch == Architecture.X86_64:
    arch_flags += ' -m64 '
    _host = 'x86_64-linux-gnu'
if target_arch in [Architecture.ARM, Architecture.ARMv7, Architecture.ARM64]:
    if target_arch == Architecture.ARMv7:
        arch_flags += ' -march=armv7-a '
    if target_arch == Architecture.ARM64:
        _host = 'aarch64-linux-gnu'
    else:
        if distro == Distro.REDHAT:
            _host = 'arm-linux-gnu'
        else:
            _host = 'arm-linux-gnueabi'
    env['glib_cv_stack_grows'] = 'no'
    env['glib_cv_uscore'] = 'no'
    env['ac_cv_func_posix_getgrgid_r'] = 'yes'
    env['ac_cv_func_posix_getpwuid_r'] = 'yes'
    env['ac_cv_func_register_printf_specifier'] = 'no'
    env['ac_cv_func_register_printf_function'] = 'no'
    if toolchain_prefix:
        gcc_toolchain_path = os.path.join (toolchain_prefix, 'bin')
        env['PATH'] = '%s:%s:%s' % (toolchain_prefix, gcc_toolchain_path, env['PATH'])

if target_distro == Distro.REDHAT:
    if target_arch == Architecture.X86_64:
        lib_suffix = '64'
elif target_distro == Distro.DEBIAN:
    lib_suffix = '/' + _host

if target_arch_flags is not None:
    arch_flags += ' %s ' % (target_arch_flags)

if host is None and target_arch != arch:
    host = _host

if tools_prefix is None:
    if host is not None and host != '':
        tools_prefix = '%s-' % host
    else:
        tools_prefix = ''

if isysroot is not None:
    env['CPPFLAGS'] += ' -isysroot %s' % (isysroot)
    env['CFLAGS'] += ' -isysroot %s' % (isysroot)
    env['CXXFLAGS'] += ' -isysroot %s' % (isysroot)
    env['OBJCFLAGS'] += ' -isysroot %s' % (isysroot)

if sysroot is not None:
    env['CPPFLAGS'] += ' --sysroot=%s' % (sysroot)
    env['CFLAGS'] += ' --sysroot=%s' % (sysroot)
    env['CXXFLAGS'] += ' --sysroot=%s' % (sysroot)
    env['OBJCFLAGS'] += ' --sysroot=%s' % (sysroot)
    env['LDFLAGS'] += ' --sysroot=%s' % (sysroot)

# Some cross compilers have a bug in the search for indirect dependencies
# during linking. 
# http://stackoverflow.com/questions/16593519/finding-shared-library-dependencies-when-linking-executable
workaround_cflags = ''
workaround_ldflags = ''
if target_arch != arch:
    workaround_cflags = ' -Wl,-rpath-link=%s/lib ' % (prefix)
    workaround_ldflags = ' -Wl,-rpath-link=%s/lib ' % (prefix)
    # This needs to be added by hand on Fedora, for some reason
    if distro == Distro.REDHAT:
        workaround_cflags += '-I/usr/arm-linux-gnu/include'
    # Disable gi if we are cross-compiling
    variants.gi = False

env['CFLAGS'] += arch_flags + workaround_cflags
env['CXXFLAGS'] += arch_flags + workaround_cflags
env['OBJCFLAGS'] += arch_flags
env['CCASFLAGS'] += arch_flags
env['LDFLAGS'] += arch_flags + workaround_ldflags

def cmd(command):
    return '%s%s' % (tools_prefix, command)

env['CC']= cmd('gcc')
env['CXX']= cmd('g++')
env['LD']= cmd('ld')
env['CPP']= cmd('cpp')
env['RANLIB']= cmd('ranlib')
env['AR']= cmd('ar')
env['AS']= cmd('as')
env['NM']= cmd('nm')
env['STRIP']= cmd('strip')
env['OBJCOPY']= cmd('objcopy')

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