mirror of
https://repo.dactyloidae.xyz/Dactyloidae/UXP.git
synced 2026-09-20 07:17:32 +09:00
Currently only Windows can take advantage of this. The reason why the arrays of deunified sources are named like that in Spidermonkey's moz.build is to avoid UnsortedErrors in python. There's probably a better way to handle that, but I just want something that works for now. And yes, the deunified sources will be reunified if LTO is disabled.
136 lines
4.9 KiB
INI
136 lines
4.9 KiB
INI
# -*- 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' ]
|