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
131
132
133
134
135
136
|
# -*- Mode: python; indent-tabs-mode: nil; tab-width: 40 -*-
# This Source Code Form is subject to the terms of the Mozilla Public
# License, v. 2.0. If a copy of the MPL was not distributed with this
# file, You can obtain one at http://mozilla.org/MPL/2.0/.
FINAL_LIBRARY = 'js'
if CONFIG['MOZ_SYSTEM_FFI']:
OS_LIBS += CONFIG['MOZ_FFI_LIBS']
else:
ALLOW_COMPILER_WARNINGS = True
NO_VISIBILITY_FLAGS = True
CONFIGURE_DEFINE_FILES += [
'../../../js/src/ctypes/libffi/fficonfig.h',
]
GENERATED_FILES += [
'../../../js/src/ctypes/libffi/include/ffi.h',
]
ffi_h = GENERATED_FILES['../../../js/src/ctypes/libffi/include/ffi.h']
ffi_h.script = 'subst_header.py'
ffi_h.inputs = ['../../../js/src/ctypes/libffi/include/ffi.h.in']
LOCAL_INCLUDES += [
'!/js/src/ctypes/libffi',
'!/js/src/ctypes/libffi/include',
'/js/src/ctypes/libffi/include',
'/js/src/ctypes/libffi/src/%s' % CONFIG['FFI_TARGET_DIR'],
]
DEFINES.update({
'TARGET': CONFIG['FFI_TARGET'],
CONFIG['FFI_TARGET']: True,
'FFI_NO_RAW_API': True,
'HAVE_AS_ASCII_PSEUDO_OP': True,
'HAVE_AS_STRING_PSEUDO_OP': True,
})
# This should NEVER be true on 32-bit x86 systems. It's called x86_64 unwind
# section type for a reason. By rights the way it was before should have broken
# all 32-bit builds on x86.
if CONFIG['FFI_TARGET'] == 'X86':
DEFINES['HAVE_AS_X86_64_UNWIND_SECTION_TYPE'] = False
else:
DEFINES['HAVE_AS_X86_64_UNWIND_SECTION_TYPE'] = True
if CONFIG['MOZ_DEBUG']:
DEFINES['FFI_DEBUG'] = True
if not CONFIG['MOZ_NO_DEBUG_RTL']:
DEFINES['USE_DEBUG_RTL'] = True
SOURCES += [
'/js/src/ctypes/libffi/src/debug.c',
]
if CONFIG['OS_TARGET'] not in ('WINNT', 'Darwin'):
DEFINES['HAVE_HIDDEN_VISIBILITY_ATTRIBUTE'] = True
# Solaris uses datarel encoding for x86. This causes a lot of really stupid
# problems, like the vast majority of x86 assembler not being considered PIC
# on Solaris.
if CONFIG['INTEL_ARCHITECTURE'] and CONFIG['OS_TARGET'] != 'SunOS':
DEFINES['HAVE_AS_X86_PCREL'] = True
# Which is why they apparently don't do this anymore on amd64.
if CONFIG['FFI_TARGET'] == 'X86_64' and CONFIG['OS_TARGET'] == 'SunOS':
DEFINES['HAVE_AS_X86_PCREL'] = True
# Don't bother setting EH_FRAME_FLAGS on Windows.
# Quoted defines confuse msvcc.sh, and the value isn't used there.
if CONFIG['OS_TARGET'] != 'WINNT':
# Solaris seems to require EH_FRAME to be writable even on x86.
# It works fine most of the time and there's no rule against it,
# but it causes a lot of weird problems.
if CONFIG['FFI_TARGET'] == 'ARM':
DEFINES['EH_FRAME_FLAGS'] = '"aw"'
elif CONFIG['FFI_TARGET'] == 'X86' and CONFIG['OS_TARGET'] == 'SunOS':
DEFINES['EH_FRAME_FLAGS'] = '"aw"'
else:
DEFINES['EH_FRAME_FLAGS'] = '"a"'
if CONFIG['CLANG_CL']:
ASFLAGS += ['-clang-cl']
# Common source files.
SOURCES += [
'/js/src/ctypes/libffi/src/closures.c',
'/js/src/ctypes/libffi/src/java_raw_api.c',
'/js/src/ctypes/libffi/src/prep_cif.c',
'/js/src/ctypes/libffi/src/raw_api.c',
'/js/src/ctypes/libffi/src/types.c',
]
# Per-platform sources and flags.
ffi_srcs = ()
if CONFIG['FFI_TARGET'] == 'ARM':
ffi_srcs = ('sysv.S', 'ffi.c')
if CONFIG['CLANG_CXX']:
ASFLAGS += ['-no-integrated-as']
elif CONFIG['FFI_TARGET'] == 'AARCH64':
ffi_srcs = ('sysv.S', 'ffi.c')
elif CONFIG['FFI_TARGET'] == 'X86':
ffi_srcs = ('ffi.c', 'sysv.S', 'win32.S')
elif CONFIG['FFI_TARGET'] == 'X86_64':
ffi_srcs = ('ffi64.c', 'unix64.S', 'ffi.c', 'sysv.S')
elif CONFIG['FFI_TARGET'] == 'X86_WIN32':
# MinGW Build for 32 bit
if CONFIG['CC_TYPE'] == 'gcc':
DEFINES['SYMBOL_UNDERSCORE'] = True
ffi_srcs = ('ffi.c', 'win32.S')
elif CONFIG['FFI_TARGET'] == 'X86_WIN64':
ffi_srcs = ('ffi.c', 'win64.S')
ASFLAGS += ['-m64']
elif CONFIG['FFI_TARGET'] == 'X86_DARWIN':
DEFINES['FFI_MMAP_EXEC_WRIT'] = True
if CONFIG['OS_TEST'] != 'x86_64':
ffi_srcs = ('ffi.c', 'darwin.S', 'ffi64.c', 'darwin64.S',
'win32.S')
DEFINES['SYMBOL_UNDERSCORE'] = True
else:
ffi_srcs = ('ffi.c', 'darwin.S', 'ffi64.c', 'darwin64.S')
elif CONFIG['FFI_TARGET'] == 'AARCH64_DARWIN':
ffi_srcs = ('sysv.S', 'ffi.c')
SOURCES += [
'/js/src/ctypes/libffi/src/%s/%s' % (CONFIG['FFI_TARGET_DIR'], s)
for s in sorted(ffi_srcs)
]
# Explicitly enable WPO and LTCG in MSVC if we're doing LTO.
if CONFIG['JS_LTO']:
if CONFIG['_MSC_VER'] and not CONFIG['CLANG_CL']:
CFLAGS += [ '-GL' ]
CXXFLAGS += [ '-GL' ]
|