moz.build (5100B)
1 # -*- Mode: python; indent-tabs-mode: nil; tab-width: 40 -*- 2 # vim: set filetype=python: 3 # This Source Code Form is subject to the terms of the Mozilla Public 4 # License, v. 2.0. If a copy of the MPL was not distributed with this 5 # file, You can obtain one at http://mozilla.org/MPL/2.0/. 6 7 FINAL_LIBRARY = "js" 8 9 if CONFIG["MOZ_SYSTEM_FFI"]: 10 OS_LIBS += CONFIG["MOZ_FFI_LIBS"] 11 else: 12 AllowCompilerWarnings() 13 NoVisibilityFlags() 14 15 CONFIGURE_DEFINE_FILES += [ 16 "/js/src/ctypes/libffi/fficonfig.h", 17 ] 18 LOCAL_INCLUDES += [ 19 "!/js/src/ctypes/libffi", 20 "!/js/src/ctypes/libffi/include", 21 "/js/src/ctypes/libffi/include", 22 "/js/src/ctypes/libffi/src/%s" % CONFIG["FFI_TARGET_DIR"], 23 ] 24 25 DEFINES["TARGET"] = CONFIG["FFI_TARGET"] 26 DEFINES[CONFIG["FFI_TARGET"]] = True 27 DEFINES["FFI_NO_RAW_API"] = True 28 DEFINES["FFI_BUILDING"] = True 29 DEFINES["HAVE_AS_ASCII_PSEUDO_OP"] = True 30 DEFINES["HAVE_AS_STRING_PSEUDO_OP"] = True 31 32 if CONFIG["MOZ_DEBUG"]: 33 DEFINES["FFI_DEBUG"] = True 34 if not CONFIG["MOZ_NO_DEBUG_RTL"]: 35 DEFINES["USE_DEBUG_RTL"] = True 36 SOURCES += [ 37 "/js/src/ctypes/libffi/src/debug.c", 38 ] 39 40 if CONFIG["OS_TARGET"] != "WINNT": 41 DEFINES["HAVE_HIDDEN_VISIBILITY_ATTRIBUTE"] = True 42 43 if CONFIG["INTEL_ARCHITECTURE"]: 44 DEFINES["HAVE_AS_X86_PCREL"] = True 45 46 # Don't bother setting EH_FRAME_FLAGS on Windows. 47 # Quoted defines confuse msvcc.sh, and the value isn't used there. 48 if CONFIG["OS_TARGET"] != "WINNT": 49 if CONFIG["FFI_TARGET"] == "ARM": 50 DEFINES["EH_FRAME_FLAGS"] = '"aw"' 51 else: 52 DEFINES["EH_FRAME_FLAGS"] = '"a"' 53 54 # Common source files. 55 SOURCES += [ 56 "/js/src/ctypes/libffi/src/closures.c", 57 "/js/src/ctypes/libffi/src/java_raw_api.c", 58 "/js/src/ctypes/libffi/src/prep_cif.c", 59 "/js/src/ctypes/libffi/src/raw_api.c", 60 "/js/src/ctypes/libffi/src/types.c", 61 ] 62 63 # Per-platform sources and flags. 64 ffi_srcs = () 65 ffi_h_defines = [] 66 if CONFIG["FFI_TARGET"] == "X86_WIN64": 67 if CONFIG["CC_TYPE"] == "clang-cl": 68 ffi_srcs = ("ffiw64.c",) 69 # libffi asm needs to be preprocessed for MSVC's assembler 70 GeneratedFile( 71 "win64_intel.asm", 72 inputs=[ 73 "/js/src/ctypes/libffi/src/x86/win64_intel.S", 74 "!/js/src/ctypes/libffi/fficonfig.h", 75 "!/js/src/ctypes/libffi/include/ffi.h", 76 ], 77 script="preprocess_libffi_asm.py", 78 flags=["$(DEFINES)", "$(LOCAL_INCLUDES)"], 79 ) 80 SOURCES += ["!win64_intel.asm"] 81 else: 82 ffi_srcs = ("ffiw64.c", "win64.S") 83 84 elif CONFIG["FFI_TARGET"] == "X86_64": 85 DEFINES["HAVE_AS_X86_64_UNWIND_SECTION_TYPE"] = True 86 ffi_srcs = ("ffi64.c", "unix64.S", "ffiw64.c", "win64.S") 87 88 elif CONFIG["FFI_TARGET"] == "X86_WIN32" and CONFIG["CC_TYPE"] == "clang-cl": 89 ffi_srcs = ("ffi.c",) 90 # libffi asm needs to be preprocessed for MSVC's assembler 91 GeneratedFile( 92 "sysv_intel.asm", 93 inputs=[ 94 "/js/src/ctypes/libffi/src/x86/sysv_intel.S", 95 "!/js/src/ctypes/libffi/fficonfig.h", 96 "!/js/src/ctypes/libffi/include/ffi.h", 97 ], 98 script="preprocess_libffi_asm.py", 99 flags=["$(DEFINES)", "$(LOCAL_INCLUDES)"], 100 ) 101 SOURCES += ["!sysv_intel.asm"] 102 ASFLAGS += ["-safeseh"] 103 104 elif CONFIG["FFI_TARGET"] == "ARM_WIN64": 105 ffi_srcs = ("ffi.c",) 106 107 # libffi asm needs to be preprocessed for MSVC's assembler 108 GeneratedFile( 109 "win64_armasm.asm", 110 inputs=[ 111 "/js/src/ctypes/libffi/src/aarch64/win64_armasm.S", 112 "!/js/src/ctypes/libffi/fficonfig.h", 113 "!/js/src/ctypes/libffi/include/ffi.h", 114 ], 115 script="preprocess_libffi_asm.py", 116 flags=["$(DEFINES)", "$(LOCAL_INCLUDES)"], 117 ) 118 SOURCES += ["!win64_armasm.asm"] 119 120 else: 121 ffi_srcs = ("ffi.c", "sysv.S") 122 123 if CONFIG["FFI_TARGET"] in ("X86_WIN32", "X86_DARWIN") and CONFIG["CC_TYPE"] in ( 124 "gcc", 125 "clang", 126 ): 127 DEFINES["SYMBOL_UNDERSCORE"] = True 128 129 if CONFIG["OS_ARCH"] == "Darwin" and CONFIG["TARGET_CPU"] in ("arm", "aarch64"): 130 DEFINES["FFI_EXEC_TRAMPOLINE_TABLE"] = True 131 ffi_h_defines.append("FFI_EXEC_TRAMPOLINE_TABLE") 132 133 elif ( 134 CONFIG["OS_ARCH"] in ("Darwin", "FreeBSD", "GNU_kFreeBSD", "OpenBSD", "SunOS") 135 or CONFIG["OS_TARGET"] == "Android" 136 ): 137 DEFINES["FFI_MMAP_EXEC_WRIT"] = True 138 139 SOURCES += [ 140 "/js/src/ctypes/libffi/src/%s/%s" % (CONFIG["FFI_TARGET_DIR"], s) 141 for s in sorted(ffi_srcs) 142 ] 143 144 GeneratedFile( 145 "/js/src/ctypes/libffi/include/ffi.h", 146 script="subst_header.py", 147 inputs=["/js/src/ctypes/libffi/include/ffi.h.in"], 148 flags=ffi_h_defines, 149 )