mirror of https://github.com/roytam1/UXP
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
122 lines
4.3 KiB
122 lines
4.3 KiB
# -*- Mode: python; indent-tabs-mode: nil; tab-width: 40 -*- |
|
# vim: set filetype=python: |
|
# 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 |
|
|
|
# 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' or CONFIG['OS_ARCH'] == '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') |
|
|
|
SOURCES += [ |
|
'/js/src/ctypes/libffi/src/%s/%s' % (CONFIG['FFI_TARGET_DIR'], s) |
|
for s in sorted(ffi_srcs) |
|
]
|
|
|