Skip to content

Commit

Permalink
build: Improved meson-build to use rizin as subproject
Browse files Browse the repository at this point in the history
* Setting GNU99/C99 standard for subprojects
* Remove use of `add_global_arguments`
* Added extern "C" linkage specification to some public headers of rizin
* Changed the meson_git_wrapper.py-script to explicitly specify the output-path
* Made the RIZIN_BUILD_PATH conditional in the integration-test meson-build
  • Loading branch information
amibranch committed Oct 25, 2024
1 parent f82993a commit ef04796
Show file tree
Hide file tree
Showing 25 changed files with 228 additions and 46 deletions.
8 changes: 8 additions & 0 deletions librz/include/rz_types.h
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,10 @@
#include <inttypes.h>
#endif

#ifdef __cplusplus
extern "C" {
#endif

// TODO: fix this to make it crosscompile-friendly: RZ_SYS_OSTYPE ?
/* operating system */
#undef __BSD__
Expand Down Expand Up @@ -729,4 +733,8 @@ static inline void *rz_asm_plugin_data_from_rz_analysis(RZ_NONNULL void /*<RzAna
return rasm->plugin_data;
}

#ifdef __cplusplus
}
#endif

#endif // RZ_TYPES_H
8 changes: 8 additions & 0 deletions librz/include/rz_util/rz_intervaltree.h
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,10 @@
#include "rz_rbtree.h"
#include "../rz_types.h"

#ifdef __cplusplus
extern "C" {
#endif

/*
* RzIntervalTree is a special RBTree (augmented red-black tree)
* that holds its entries, each associated with a interval,
Expand Down Expand Up @@ -100,4 +104,8 @@ static inline bool rz_interval_tree_empty(RzIntervalTree *tree) {
if ((tree)->root) \
for ((it) = rz_rbtree_last(&(tree)->root->node); rz_rbtree_iter_has(&it) && (dat = rz_rbtree_iter_get(&it, RzIntervalNode, node)->data); rz_rbtree_iter_prev(&(it)))

#ifdef __cplusplus
}
#endif

#endif // RZ_INTERVALTREE_H
22 changes: 11 additions & 11 deletions meson.build
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
project('rizin', 'c',
version: 'v0.8.0',
license: 'LGPL3',
license: 'LGPL-3.0-only',
meson_version: '>=0.57.0',
default_options: [
'buildtype=debugoptimized',
Expand Down Expand Up @@ -80,14 +80,14 @@ if is_static_build
endif

if cc.has_argument('--std=gnu99')
add_global_arguments('--std=gnu99', language: ['c', 'cpp'])
add_project_arguments('--std=gnu99', language: ['c', 'cpp'])
elif cc.has_argument('--std=c99')
add_global_arguments('--std=c99', language: ['c', 'cpp'])
add_project_arguments('--std=c99', language: ['c', 'cpp'])
endif

# Sanitize correct usage of rz_strf()
if cc.has_argument('-Werror=sizeof-pointer-memaccess')
add_global_arguments('-Werror=sizeof-pointer-memaccess', language: ['c', 'cpp'])
add_project_arguments('-Werror=sizeof-pointer-memaccess', language: ['c', 'cpp'])
endif

if cc.has_argument('-Wimplicit-fallthrough=3')
Expand All @@ -106,17 +106,17 @@ endif

if get_option('default_library') == 'shared'
if cc.has_argument('-fvisibility=hidden')
add_global_arguments('-fvisibility=hidden', language: 'c')
add_project_arguments('-fvisibility=hidden', language: 'c')
endif
endif

add_project_arguments(['-DRZ_PLUGIN_INCORE=1'], language: 'c')
b_sanitize_opt = get_option('b_sanitize')
if (b_sanitize_opt.contains('address') or b_sanitize_opt.contains('undefined')) and cc.get_id() == 'clang'
add_global_arguments('-shared-libasan', language: 'c')
add_global_link_arguments('-shared-libasan', language: 'c')
add_global_arguments('-shared-libasan', language: 'c', native: true)
add_global_link_arguments('-shared-libasan', language: 'c', native: true)
add_project_arguments('-shared-libasan', language: 'c')
add_project_link_arguments('-shared-libasan', language: 'c')
add_project_arguments('-shared-libasan', language: 'c', native: true)
add_project_link_arguments('-shared-libasan', language: 'c', native: true)
endif

fs = import('fs')
Expand Down Expand Up @@ -355,7 +355,7 @@ foreach it : ccs
have_pthread = it_th.found() and it_machine.system() != 'windows'
if it_machine.system() == 'sunos'
# workaround for Solaris until https://github.com/mesonbuild/meson/issues/4328 is fixed
it_mth = declare_dependency(link_args: '-lm', native: it_native)
it_mth = declare_dependency(link_args: '-lm')
else
it_mth = it_cc.find_library('m', required: false, static: is_static_build)
endif
Expand Down Expand Up @@ -558,7 +558,7 @@ if git_exe.found() and fs.exists('.git')
build_always_stale: true,
build_by_default: true,
output: 'gittip',
command: [py3_exe, git_exe_repo_py, git_exe, repo, 'rev-parse', 'HEAD'],
command: [py3_exe, git_exe_repo_py, git_exe, repo, '@OUTPUT@', 'rev-parse', 'HEAD'],
install: true,
install_dir: rizin_datdir_rz
)
Expand Down
2 changes: 1 addition & 1 deletion subprojects/nettle/meson.build
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
project('nettle', 'c',
license: [ 'LGPL'],
license: 'LGPL',
version: '3.7.3'
)
# https://git.lysator.liu.se/nettle/nettle
Expand Down
9 changes: 8 additions & 1 deletion subprojects/packagefiles/blake3/meson.build
Original file line number Diff line number Diff line change
@@ -1,4 +1,11 @@
project('blake3', 'c', version: '1.3.1', license : ['CC0-1.0'], meson_version: '>=0.55.0')
project('blake3', 'c',
version: '1.3.1',
license: 'CC0-1.0',
meson_version: '>=0.55.0',
default_options: [
'c_std=c99',
]
)

cc = meson.get_compiler('c')

Expand Down
13 changes: 12 additions & 1 deletion subprojects/packagefiles/capstone-4.0.2/meson.build
Original file line number Diff line number Diff line change
@@ -1,4 +1,15 @@
project('capstone', 'c', version: '4.0.2', meson_version: '>=0.55.0')
project('capstone', 'c',
version: '4.0.2',
meson_version: '>=0.55.0',
)

cc = meson.get_compiler('c')

if cc.has_argument('--std=gnu99')
add_project_arguments('--std=gnu99', language: ['c'])
elif cc.has_argument('--std=c99')
add_project_arguments('--std=c99', language: ['c'])
endif

cs_files = [
'arch/AArch64/AArch64BaseInfo.c',
Expand Down
13 changes: 12 additions & 1 deletion subprojects/packagefiles/capstone-5.0.1/meson.build
Original file line number Diff line number Diff line change
@@ -1,4 +1,15 @@
project('capstone', 'c', version: '5.0.1', meson_version: '>=0.55.0')
project('capstone', 'c',
version: '5.0.1',
meson_version: '>=0.55.0',
)

cc = meson.get_compiler('c')

if cc.has_argument('--std=gnu99')
add_project_arguments('--std=gnu99', language: ['c'])
elif cc.has_argument('--std=c99')
add_project_arguments('--std=c99', language: ['c'])
endif

cs_files = [
'arch/AArch64/AArch64BaseInfo.c',
Expand Down
13 changes: 12 additions & 1 deletion subprojects/packagefiles/capstone-6.0.0-alpha1/meson.build
Original file line number Diff line number Diff line change
@@ -1,4 +1,15 @@
project('capstone', 'c', version: 'next', meson_version: '>=0.55.0')
project('capstone', 'c',
version: 'next',
meson_version: '>=0.55.0',
)

cc = meson.get_compiler('c')

if cc.has_argument('--std=gnu99')
add_project_arguments('--std=gnu99', language: ['c'])
elif cc.has_argument('--std=c99')
add_project_arguments('--std=c99', language: ['c'])
endif

cs_files = [
'arch/Alpha/AlphaDisassembler.c',
Expand Down
13 changes: 12 additions & 1 deletion subprojects/packagefiles/capstone-next/meson.build
Original file line number Diff line number Diff line change
@@ -1,4 +1,15 @@
project('capstone', 'c', version: 'next', meson_version: '>=0.55.0')
project('capstone', 'c',
version: 'next',
meson_version: '>=0.55.0',
)

cc = meson.get_compiler('c')

if cc.has_argument('--std=gnu99')
add_project_arguments('--std=gnu99', language: ['c'])
elif cc.has_argument('--std=c99')
add_project_arguments('--std=c99', language: ['c'])
endif

cs_files = [
'arch/Alpha/AlphaDisassembler.c',
Expand Down
10 changes: 9 additions & 1 deletion subprojects/packagefiles/libmspack/meson.build
Original file line number Diff line number Diff line change
@@ -1,7 +1,15 @@
project('libmspack', 'c', version: '0.10.1alpha', license : ['LGPL2'], meson_version: '>=0.55.0')
project('libmspack', 'c',
version: '0.10.1alpha',
license : 'LGPL2',
meson_version: '>=0.55.0',
)

cc = meson.get_compiler('c')

if cc.has_argument('--std=c99')
add_project_arguments('--std=c99', language: ['c'])
endif

# handle libmspack dependency
libmspack_files = [
'libmspack' / 'mspack' / 'cabc.c',
Expand Down
11 changes: 10 additions & 1 deletion subprojects/packagefiles/libzip-1.9.2/meson.build
Original file line number Diff line number Diff line change
@@ -1,10 +1,19 @@
project('libzip', 'c',
version: '1.9.2')
version: '1.9.2',
license: 'BSD-3-clause',
meson_version: '>=0.55.0',
)

py3_exe = import('python').find_installation()
cc = meson.get_compiler('c')
is_static_build = get_option('static_runtime')

if cc.has_argument('--std=gnu99')
add_project_arguments('--std=gnu99', language: ['c'])
elif cc.has_argument('--std=c99')
add_project_arguments('--std=c99', language: ['c'])
endif

# Create config.h file
conf_data = configuration_data()
zlib_dep = dependency('zlib', required: get_option('use_sys_zlib'), static: is_static_build)
Expand Down
11 changes: 9 additions & 2 deletions subprojects/packagefiles/lz4-1.9.4/meson.build
Original file line number Diff line number Diff line change
@@ -1,7 +1,14 @@
project('lz4', ['c'],
license: ['BSD', 'GPLv2'],
license: 'BSD-2-Clause-Patent AND GPL-2.0-or-later',
version: '1.9.4',
meson_version: '>=0.47.0')
meson_version: '>=0.55.0',
)

cc = meson.get_compiler('c')

if cc.has_argument('--std=c99')
add_project_arguments('--std=c99', language: ['c'])
endif

lz4_files = [
'lib/lz4.c',
Expand Down
4 changes: 4 additions & 0 deletions subprojects/packagefiles/pcre2/meson.build
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,10 @@ project('pcre2', 'c', version: '10.44')

cc = meson.get_compiler('c')

if cc.has_argument('--std=c99')
add_project_arguments('--std=c99', language: ['c'])
endif

conf_data = configuration_data()

pcre2_chartables = configure_file(input : 'src/pcre2_chartables.c.dist',
Expand Down
14 changes: 13 additions & 1 deletion subprojects/packagefiles/rizin-grammar-c/meson.build
Original file line number Diff line number Diff line change
@@ -1,4 +1,16 @@
project('rizin-grammar-c', 'c', default_options: ['werror=false'])
project('rizin-grammar-c', 'c',
license: 'MIT',
meson_version: '>=0.55.0',
default_options: [
'werror=false'
]
)

cc = meson.get_compiler('c')

if cc.has_argument('--std=c99')
add_project_arguments('--std=c99', language: ['c'])
endif

ts_c_files = [
'src/parser.c'
Expand Down
11 changes: 10 additions & 1 deletion subprojects/packagefiles/tree-sitter-0.21.0/meson.build
Original file line number Diff line number Diff line change
@@ -1,7 +1,16 @@
project('tree-sitter', 'c')
project('tree-sitter', 'c',
license: 'MIT',
meson_version: '>=0.55.0',
)

cc = meson.get_compiler('c')

if cc.has_argument('--std=gnu99')
add_project_arguments('--std=gnu99', language: ['c'])
elif cc.has_argument('--std=c99')
add_project_arguments('--std=c99', language: ['c'])
endif

tree_sitter_path = 'tree-sitter'

tree_sitter_files = ['lib/src/lib.c']
Expand Down
12 changes: 10 additions & 2 deletions subprojects/packagefiles/xz-5.2.9/meson.build
Original file line number Diff line number Diff line change
@@ -1,10 +1,18 @@
# liblzma is what upstream uses for their pkg-config name
project('liblzma', 'c',
version : '5.2.9',
license : 'pd/lgpl2/gpl2/gpl3',)
version : '5.4.3',
license : ['PD', 'LGPL2', 'GPL2', 'GPL3'],
meson_version: '>=0.55.0',
)

cc = meson.get_compiler('c')

if cc.has_argument('--std=gnu99')
add_project_arguments('--std=gnu99', language: ['c'])
elif cc.has_argument('--std=c99')
add_project_arguments('--std=c99', language: ['c'])
endif

lzma_cflags = ['-DHAVE_CONFIG_H', '-DTUKLIB_SYMBOL_PREFIX=lzma_', '-DLZMA_API_STATIC']

cdata = configuration_data()
Expand Down
10 changes: 9 additions & 1 deletion subprojects/packagefiles/zlib-1.3.1/meson.build
Original file line number Diff line number Diff line change
@@ -1,7 +1,15 @@
project('zlib', 'c', version : '1.3.1', license : 'zlib')
project('zlib', 'c',
version : '1.3.1',
license : 'zlib',
meson_version: '>=0.55.0',
)

cc = meson.get_compiler('c')

if cc.has_argument('--std=c99')
add_project_arguments('--std=c99', language: ['c'])
endif

link_args = []
compile_args = []
if cc.get_argument_syntax() == 'msvc'
Expand Down
9 changes: 8 additions & 1 deletion subprojects/rizin-shell-parser/meson.build
Original file line number Diff line number Diff line change
@@ -1,7 +1,14 @@
project('rizin-shell-parser', 'c',
license : [ 'LGPL']
license: 'LGPL-3.0-only',
meson_version: '>=0.55.0',
)

cc = meson.get_compiler('c')

if cc.has_argument('--std=c99')
add_project_arguments('--std=c99', language: ['c'])
endif

tree_sitter_dep = dependency('tree-sitter')
grammar_js = files('grammar.js')
tree_sitter_wrap_py = files('meson_tree_sitter_generate.py')
Expand Down
11 changes: 10 additions & 1 deletion subprojects/rzar/meson.build
Original file line number Diff line number Diff line change
@@ -1,12 +1,21 @@
project('rzar', 'c',
license : [ 'LGPL']
license: 'LGPL-3.0-only',
meson_version: '>=0.55.0',
)

# handle ar dependency
ar_files = [
'ar.c'
]

cc = meson.get_compiler('c')

if cc.has_argument('--std=gnu99')
add_project_arguments('--std=gnu99', language: ['c'])
elif cc.has_argument('--std=c99')
add_project_arguments('--std=c99', language: ['c'])
endif

rz_util_dep = dependency('rz_util')
ar_inc = [include_directories(['.'])]

Expand Down
7 changes: 7 additions & 0 deletions subprojects/rzgdb/meson.build
Original file line number Diff line number Diff line change
@@ -1,5 +1,12 @@
project('rzw32dbg_wrap', 'c')

cc = meson.get_compiler('c')

if cc.has_argument('--std=gnu99')
add_project_arguments('--std=gnu99', language: ['c'])
elif cc.has_argument('--std=c99')
add_project_arguments('--std=c99', language: ['c'])
endif

gdb_files = [
'src/arch.c',
Expand Down
Loading

0 comments on commit ef04796

Please sign in to comment.