2025-04-28 12:25:20 +08:00

220 lines
5.8 KiB
Python

# This file is used with the GYP meta build system.
# http://code.google.com/p/gyp
# To build try this:
# svn co http://gyp.googlecode.com/svn/trunk gyp
# ./gyp/gyp -f make --depth=`pwd` libffi.gyp
# make
# ./out/Debug/test
{
'variables': {
'target_arch%': 'ia32', # built for a 32-bit CPU by default
},
'target_defaults': {
'default_configuration': 'Debug',
'configurations': {
# TODO: hoist these out and put them somewhere common, because
# RuntimeLibrary MUST MATCH across the entire project
'Debug': {
'defines': [ 'DEBUG', '_DEBUG' ],
'msvs_settings': {
'VCCLCompilerTool': {
'RuntimeLibrary': 1, # static debug
},
},
},
'Release': {
'defines': [ 'NDEBUG' ],
'msvs_settings': {
'VCCLCompilerTool': {
'RuntimeLibrary': 0, # static release
},
},
}
},
'msvs_settings': {
'VCCLCompilerTool': {
},
'VCLibrarianTool': {
},
'VCLinkerTool': {
'GenerateDebugInformation': 'true',
},
},
'conditions': [
['OS == "win"', {
'defines': [
'WIN32'
],
}]
],
},
# Compile .S files on Windows
'conditions': [
['OS=="win"', {
'target_defaults': {
'conditions': [
['target_arch=="ia32"', {
'variables': { 'ml': ['ml', '/c', '/nologo', '/safeseh' ] }
}, 'target_arch=="arm64"', {
'variables': { 'ml': ['armasm64', '/nologo' ] }
}, {
'variables': { 'ml': ['ml64', '/c', '/nologo' ] }
}]
],
'rules': [
{
'rule_name': 'preprocess_asm',
'msvs_cygwin_shell': 0,
'extension': 'preasm',
'inputs': [
],
'outputs': [
'<(INTERMEDIATE_DIR)/<(RULE_INPUT_ROOT).asm',
],
'action': [
'call',
'preprocess_asm.cmd',
'include',
'config/<(OS)/<(target_arch)',
'<(RULE_INPUT_PATH)',
'<(INTERMEDIATE_DIR)/<(RULE_INPUT_ROOT).asm',
],
'message': 'Preprocessing assembly file <(RULE_INPUT_PATH)',
'process_outputs_as_sources': 1,
},
{
'rule_name': 'build_asm',
'msvs_cygwin_shell': 0,
'extension': 'asm',
'inputs': [
],
'outputs': [
'<(INTERMEDIATE_DIR)/<(RULE_INPUT_ROOT).obj',
],
'action': [
'<@(ml)', '/Fo<(INTERMEDIATE_DIR)/<(RULE_INPUT_ROOT).obj',
'<(INTERMEDIATE_DIR)/<(RULE_INPUT_ROOT).asm',
],
'message': 'Building assembly file <(RULE_INPUT_PATH)',
'process_outputs_as_sources': 1,
},
],
},
}],
],
'targets': [
{
'target_name': 'ffi',
'product_prefix': 'lib',
'type': 'static_library',
# for CentOS 5 support: https://github.com/rbranson/node-ffi/issues/110
'standalone_static_library': 1,
'sources': [
'src/prep_cif.c',
'src/types.c',
'src/raw_api.c',
'src/java_raw_api.c',
'src/closures.c',
],
'defines': [
'PIC',
'FFI_BUILDING',
'HAVE_CONFIG_H'
],
'include_dirs': [
'include',
# platform and arch-specific headers
'config/<(OS)/<(target_arch)'
],
'direct_dependent_settings': {
'include_dirs': [
'include',
# platform and arch-specific headers
'config/<(OS)/<(target_arch)'
],
},
'conditions': [
['target_arch=="arm"', {
'sources': [ 'src/arm/ffi.c' ],
'conditions': [
['OS=="linux"', {
'sources': [ 'src/arm/sysv.S' ]
}]
]
},'target_arch=="arm64"', {
'sources': [ 'src/aarch64/ffi.c' ],
'conditions': [
['OS=="linux" or OS=="mac"', {
'sources': [ 'src/aarch64/sysv.S' ]
}],
['OS=="win"', {
'sources': [ 'src/aarch64/win64_armasm.preasm' ]
}],
]
}, { # ia32 or x64
'conditions': [
['target_arch=="ia32"', {
'sources': [ 'src/x86/ffi.c' ],
'conditions': [
['OS=="win"', {
'sources': [ 'src/x86/sysv_intel.preasm' ],
}, {
'sources': [ 'src/x86/sysv.S' ],
}],
],
}],
['target_arch=="x64"', {
'sources': [
'src/x86/ffiw64.c',
],
'conditions': [
['OS=="win"', {
'sources': [
'src/x86/win64_intel.preasm',
],
}, {
'sources': [
'src/x86/ffi64.c',
'src/x86/unix64.S',
'src/x86/win64.S',
],
}]
],
}],
['target_arch=="s390x"', {
'sources': [
'src/s390/ffi.c',
'src/s390/sysv.S',
],
}],
['OS=="win"', {
# the libffi dlmalloc.c file has a bunch of implicit conversion
# warnings, and the main ffi.c file contains one, so silence them
'msvs_disabled_warnings': [ 4267 ],
}],
]
}],
]
},
{
'target_name': 'test',
'type': 'executable',
'dependencies': [ 'ffi' ],
'sources': [ 'test.c' ]
},
{
'target_name': 'closure-test',
'type': 'executable',
'dependencies': [ 'ffi' ],
'sources': [ 'closure.c' ]
}
]
}