зеркало из https://github.com/mozilla/gecko-dev.git
145 строки
5.2 KiB
Python
145 строки
5.2 KiB
Python
# -*- 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:
|
|
AllowCompilerWarnings()
|
|
NoVisibilityFlags()
|
|
|
|
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,
|
|
'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
|
|
|
|
if CONFIG['INTEL_ARCHITECTURE']:
|
|
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':
|
|
if CONFIG['FFI_TARGET'] == 'ARM':
|
|
DEFINES['EH_FRAME_FLAGS'] = '"aw"'
|
|
else:
|
|
DEFINES['EH_FRAME_FLAGS'] = '"a"'
|
|
|
|
# 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['CC_TYPE'] == 'clang':
|
|
ASFLAGS += ['-no-integrated-as']
|
|
elif CONFIG['FFI_TARGET'] == 'AARCH64':
|
|
ffi_srcs = ('sysv.S', 'ffi.c')
|
|
elif CONFIG['FFI_TARGET'] == 'ARM64_WIN64':
|
|
ffi_srcs = ['ffi.c']
|
|
|
|
GENERATED_FILES += ['win64_aarch.asm']
|
|
asm = GENERATED_FILES['win64_aarch.asm']
|
|
asm.inputs = [
|
|
'/js/src/ctypes/libffi/src/aarch64/win64.asm',
|
|
'!../../../js/src/ctypes/libffi/fficonfig.h',
|
|
'!../../../js/src/ctypes/libffi/include/ffi.h',
|
|
]
|
|
asm.script = 'preprocess_libffi_asm.py'
|
|
asm.flags = ['$(DEFINES)', '$(LOCAL_INCLUDES)']
|
|
SOURCES += ['!win64_aarch.asm']
|
|
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':
|
|
ffi_srcs = ['ffi.c']
|
|
# MinGW Build for 32 bit
|
|
if CONFIG['CC_TYPE'] in ('gcc', 'clang'):
|
|
DEFINES['SYMBOL_UNDERSCORE'] = True
|
|
ffi_srcs += ['win32.S']
|
|
else:
|
|
# libffi asm needs to be preprocessed for MSVC
|
|
GENERATED_FILES += ['win32.asm']
|
|
asm = GENERATED_FILES['win32.asm']
|
|
asm.inputs = [
|
|
'/js/src/ctypes/libffi/src/x86/win32.S',
|
|
'!../../../js/src/ctypes/libffi/fficonfig.h',
|
|
'!../../../js/src/ctypes/libffi/include/ffi.h',
|
|
]
|
|
asm.script = 'preprocess_libffi_asm.py'
|
|
asm.flags = ['$(DEFINES)', '$(LOCAL_INCLUDES)']
|
|
SOURCES += ['!win32.asm']
|
|
ASFLAGS += ['-safeseh']
|
|
elif CONFIG['FFI_TARGET'] == 'X86_WIN64':
|
|
ffi_srcs = ['ffi.c']
|
|
if CONFIG['CC_TYPE'] in ('gcc', 'clang'):
|
|
ffi_srcs += ['win64.S']
|
|
else:
|
|
# libffi asm needs to be preprocessed for MSVC
|
|
GENERATED_FILES += ['win64.asm']
|
|
asm = GENERATED_FILES['win64.asm']
|
|
asm.inputs = [
|
|
'/js/src/ctypes/libffi/src/x86/win64.S',
|
|
'!../../../js/src/ctypes/libffi/fficonfig.h',
|
|
'!../../../js/src/ctypes/libffi/include/ffi.h',
|
|
]
|
|
asm.script = 'preprocess_libffi_asm.py'
|
|
asm.flags = ['$(DEFINES)', '$(LOCAL_INCLUDES)']
|
|
SOURCES += ['!win64.asm']
|
|
elif CONFIG['FFI_TARGET'] == 'X86_DARWIN':
|
|
DEFINES['FFI_MMAP_EXEC_WRIT'] = True
|
|
if CONFIG['CPU_ARCH'] == 'x86':
|
|
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)
|
|
]
|