mirror of
https://github.com/rizinorg/jsdec.git
synced 2026-11-07 14:58:12 -10:00
142 lines
3.5 KiB
Meson
142 lines
3.5 KiB
Meson
# SPDX-FileCopyrightText: 2023-2024 Giovanni Dante Grazioli <[email protected]>
|
|
# SPDX-License-Identifier: BSD-3-Clause
|
|
|
|
project('jsdec', 'c', meson_version: '>=0.56.0',
|
|
default_options: [
|
|
'buildtype=release',
|
|
'b_vscrt=from_buildtype',
|
|
'warning_level=1',
|
|
'c_std=c11'
|
|
])
|
|
|
|
cc = meson.get_compiler('c')
|
|
|
|
jsdec_incs = ['.', 'c', 'include']
|
|
jsdec_c_args = []
|
|
jsdec_src = [
|
|
'c' / 'jsdec.c',
|
|
'c' / 'base64.c',
|
|
]
|
|
|
|
libquickjs_proj = subproject('libquickjs', default_options: ['default_library=static'])
|
|
libquickjs_dep = libquickjs_proj.get_variable('quickjs_dep')
|
|
|
|
jsdec_deps = [ libquickjs_dep ]
|
|
|
|
modjs_gen = executable('modjs_gen', 'tools' / 'modjs_gen.c',
|
|
dependencies: [],
|
|
include_directories: [],
|
|
implicit_include_directories: false,
|
|
install: false,
|
|
)
|
|
|
|
qjsc = executable('qjsc', 'tools' / 'qjsc_mod.c',
|
|
dependencies: libquickjs_dep,
|
|
c_args: ['-D_GNU_SOURCE=1'],
|
|
include_directories: [],
|
|
implicit_include_directories: false,
|
|
install: false,
|
|
)
|
|
|
|
subdir('js')
|
|
|
|
jsdec_link_args = []
|
|
foreach flag: [
|
|
'-Wl,--exclude-libs,ALL',
|
|
]
|
|
if cc.has_link_argument(flag)
|
|
jsdec_link_args += flag
|
|
endif
|
|
endforeach
|
|
|
|
build_type = get_option('build_type')
|
|
if build_type == 'standalone'
|
|
jsdec_src += [
|
|
bytecode_h,
|
|
bytecode_mod_h,
|
|
'c' / 'jsdec-standalone.c',
|
|
]
|
|
|
|
jsdec_standalone = executable('jsdec-standalone', jsdec_src,
|
|
c_args : jsdec_c_args,
|
|
dependencies: jsdec_deps,
|
|
link_args: jsdec_link_args,
|
|
gnu_symbol_visibility: 'hidden',
|
|
include_directories: include_directories(jsdec_incs),
|
|
implicit_include_directories: false,
|
|
install: false,
|
|
)
|
|
elif build_type == 'cutter'
|
|
jsdec_deps = [ libquickjs_dep.as_link_whole() ]
|
|
jsdec_deps += dependency('rz_core')
|
|
jsdec_deps += dependency('rz_util')
|
|
jsdec_deps += dependency('rz_cons')
|
|
jsdec_deps += dependency('rz_config')
|
|
jsdec_deps += dependency('rz_io')
|
|
|
|
jsdec_src += [
|
|
bytecode_h,
|
|
bytecode_mod_h,
|
|
'c' / 'jsdec-cutter.c'
|
|
]
|
|
|
|
if cc.has_argument('-fvisibility=hidden')
|
|
jsdec_c_args += '-fvisibility=hidden'
|
|
endif
|
|
if cc.has_argument('-flto')
|
|
jsdec_c_args += '-flto'
|
|
endif
|
|
|
|
libjsdec = static_library('jsdec', jsdec_src,
|
|
c_args : jsdec_c_args,
|
|
dependencies: jsdec_deps,
|
|
include_directories: include_directories(jsdec_incs),
|
|
link_args: jsdec_link_args,
|
|
gnu_symbol_visibility: 'hidden',
|
|
implicit_include_directories: false,
|
|
install: false,
|
|
)
|
|
libjsdec_dep = declare_dependency(
|
|
link_with: libjsdec,
|
|
include_directories: include_directories(['include']),
|
|
)
|
|
elif build_type == 'rizin'
|
|
# build plugin for Rizin
|
|
rz_core_dep = dependency('rz_core')
|
|
jsdec_deps += rz_core_dep
|
|
jsdec_deps += dependency('rz_util')
|
|
jsdec_deps += dependency('rz_cons')
|
|
jsdec_deps += dependency('rz_config')
|
|
jsdec_deps += dependency('rz_io')
|
|
rizin_plugdir = get_option('rizin_plugdir')
|
|
if rizin_plugdir == ''
|
|
rizin_plugdir = rz_core_dep.get_variable(pkgconfig: 'plugindir', cmake: 'rz_core_PLUGINDIR')
|
|
endif
|
|
|
|
jsdec_src += [
|
|
bytecode_h,
|
|
bytecode_mod_h,
|
|
'c' / 'jsdec-plugin.c'
|
|
]
|
|
|
|
if cc.has_argument('-fvisibility=hidden')
|
|
jsdec_c_args += '-fvisibility=hidden'
|
|
endif
|
|
if cc.has_argument('-flto')
|
|
jsdec_c_args += '-flto'
|
|
endif
|
|
|
|
shared_library('core_pdd', jsdec_src,
|
|
c_args : jsdec_c_args,
|
|
dependencies: jsdec_deps,
|
|
include_directories: include_directories(jsdec_incs),
|
|
link_args: jsdec_link_args,
|
|
gnu_symbol_visibility: 'hidden',
|
|
implicit_include_directories: false,
|
|
install: true,
|
|
install_dir: rizin_plugdir
|
|
)
|
|
else
|
|
error('Invalid `build_type`.')
|
|
endif
|