Skip to content

Commit

Permalink
Meson refactor: collect modules in dict and centralize config (rizino…
Browse files Browse the repository at this point in the history
…rg#2945)

Duplicated code for pkg-config and cmake configuration is avoided by
letting every rizin module register itself in a global dictionary
called "modules" which is then iterated in one place to perform any
shared logic, inspired by how qemu handles multiple targets in its meson
build system.

This is an almost pure refactor, so the resulting .pc/.cmake files
should be identical with the following exceptions:
- rz_reg.pc does not have plugindir anymore as rz_reg has no plugins.
- Some other modules have their dependencies in .pc files altered to be
  consistent with cmake.
  • Loading branch information
thestr4ng3r committed Aug 20, 2022
1 parent fa29f1b commit 4e5857c
Show file tree
Hide file tree
Showing 28 changed files with 252 additions and 949 deletions.
64 changes: 20 additions & 44 deletions librz/analysis/meson.build
Original file line number Diff line number Diff line change
Expand Up @@ -291,49 +291,25 @@ rz_analysis_dep = declare_dependency(link_with: rz_analysis,
include_directories: rz_analysis_inc)
meson.override_dependency('rz_analysis', rz_analysis_dep)

pkgconfig_mod.generate(rz_analysis,
subdirs: 'librz',
version: rizin_version,
name: 'rz_analysis',
filebase: 'rz_analysis',
requires: [
'rz_util',
'rz_crypto',
'rz_reg',
'rz_asm',
'rz_parse',
'rz_syscall',
'rz_search',
'rz_cons',
'rz_diff',
'rz_bin',
'rz_flag',
'rz_type'
],
description: 'rizin foundation libraries',
variables: [
'plugindir=@0@'.format(rizin_plugins),
'datdir=@0@'.format(rizin_datdir_rz),
],
)

if not is_static_libs_only
conf = configuration_data()
conf.set('RZ_VERSION', rizin_version)
conf.set('RIZIN_MODULE', rz_analysis.name())
conf.set('RIZIN_MODULE_DEPS', ' '.join(['rz_util', 'rz_crypto', 'rz_reg', 'rz_asm', 'rz_parse',
'rz_syscall', 'rz_search', 'rz_cons', 'rz_diff', 'rz_bin', 'rz_flag', 'rz_type']))
conf.set('PACKAGE_RELATIVE_PATH', cmake_package_relative_path)
conf.set('INSTALL_INCDIR', rizin_incdir)
conf.set('INSTALL_LIBDIR', rizin_libdir)
conf.set('INSTALL_PLUGDIR', rizin_plugins)
conf.set('rizin_libname', rz_analysis.name())
cmake_mod.configure_package_config_file(
name: conf.get('rizin_libname'),
input: '../RzModulesConfig.cmake.in',
install_dir: rizin_cmakedir / conf.get('rizin_libname'),
configuration: conf,
)
endif
modules += { 'rz_analysis': {
'target': rz_analysis,
'dependencies': [
'rz_util',
'rz_crypto',
'rz_reg',
'rz_syscall',
'rz_search',
'rz_cons',
'rz_flag',
'rz_hash',
'rz_diff',
'rz_parse',
'rz_asm',
'rz_bin',
'rz_type',
'rz_il',
],
'plugins': [analysis_plugins]
}}

subdir('d')
42 changes: 5 additions & 37 deletions librz/asm/meson.build
Original file line number Diff line number Diff line change
Expand Up @@ -331,43 +331,11 @@ rz_asm_dep = declare_dependency(link_with: rz_asm,
include_directories: rz_asm_inc)
meson.override_dependency('rz_asm', rz_asm_dep)

pkgconfig_mod.generate(rz_asm,
subdirs: 'librz',
version: rizin_version,
name: 'rz_asm',
filebase: 'rz_asm',
requires: [
'rz_util',
'rz_syscall',
'rz_parse',
'rz_flag',
'rz_bin',
'rz_socket'
],
description: 'rizin foundation libraries',
variables: [
'plugindir=@0@'.format(rizin_plugins),
'datdir=@0@'.format(rizin_datdir_rz),
],
)

if not is_static_libs_only
conf = configuration_data()
conf.set('RZ_VERSION', rizin_version)
conf.set('RIZIN_MODULE', rz_asm.name())
conf.set('RIZIN_MODULE_DEPS', ' '.join(['rz_util', 'rz_syscall', 'rz_flag', 'rz_parse', 'rz_bin']))
conf.set('PACKAGE_RELATIVE_PATH', cmake_package_relative_path)
conf.set('INSTALL_INCDIR', rizin_incdir)
conf.set('INSTALL_LIBDIR', rizin_libdir)
conf.set('INSTALL_PLUGDIR', rizin_plugins)
conf.set('rizin_libname', rz_asm.name())
cmake_mod.configure_package_config_file(
name: conf.get('rizin_libname'),
input: '../RzModulesConfig.cmake.in',
install_dir: rizin_cmakedir / conf.get('rizin_libname'),
configuration: conf,
)
endif
modules += { 'rz_asm': {
'target': rz_asm,
'dependencies': ['rz_util', 'rz_config', 'rz_syscall', 'rz_flag', 'rz_parse', 'rz_bin'],
'plugins': [asm_plugins]
}}

subdir('d')
subdir('cpus')
Expand Down
48 changes: 12 additions & 36 deletions librz/bin/meson.build
Original file line number Diff line number Diff line change
Expand Up @@ -281,41 +281,17 @@ rz_bin_dep = declare_dependency(link_with: rz_bin,
include_directories: rz_bin_inc)
meson.override_dependency('rz_bin', rz_bin_dep)

pkgconfig_mod.generate(rz_bin,
subdirs: 'librz',
version: rizin_version,
name: 'rz_bin',
filebase: 'rz_bin',
requires: pkgconfig_magic_requires + [
'rz_util',
'rz_io',
'rz_socket',
'rz_syscall',
'rz_type'
],
description: 'rizin foundation libraries',
variables: [
'plugindir=@0@'.format(rizin_plugins),
'datdir=@0@'.format(rizin_datdir_rz),
],
)

if not is_static_libs_only
conf = configuration_data()
conf.set('RZ_VERSION', rizin_version)
conf.set('RIZIN_MODULE', rz_bin.name())
conf.set('RIZIN_MODULE_DEPS', ' '.join(['rz_util', 'rz_io', 'rz_socket', 'rz_syscall', 'rz_type']))
conf.set('PACKAGE_RELATIVE_PATH', cmake_package_relative_path)
conf.set('INSTALL_INCDIR', rizin_incdir)
conf.set('INSTALL_LIBDIR', rizin_libdir)
conf.set('INSTALL_PLUGDIR', rizin_plugins)
conf.set('rizin_libname', rz_bin.name())
cmake_mod.configure_package_config_file(
name: conf.get('rizin_libname'),
input: '../RzModulesConfig.cmake.in',
install_dir: rizin_cmakedir / conf.get('rizin_libname'),
configuration: conf,
)
endif
modules += { 'rz_bin': {
'target': rz_bin,
'dependencies': [
'rz_magic',
'rz_util',
'rz_io',
'rz_socket',
'rz_syscall',
'rz_type'
],
'plugins': [bin_plugins, bin_xtr_plugins]
}}

subdir('d')
37 changes: 5 additions & 32 deletions librz/bp/meson.build
Original file line number Diff line number Diff line change
Expand Up @@ -42,35 +42,8 @@ rz_bp_dep = declare_dependency(link_with: rz_bp,
include_directories: [platform_inc])
meson.override_dependency('rz_bp', rz_bp_dep)

pkgconfig_mod.generate(rz_bp,
subdirs: 'librz',
version: rizin_version,
name: 'rz_bp',
filebase: 'rz_bp',
requires: [
'rz_util'
],
description: 'rizin foundation libraries',
variables: [
'plugindir=@0@'.format(rizin_plugins),
'datdir=@0@'.format(rizin_datdir_rz),
],
)

if not is_static_libs_only
conf = configuration_data()
conf.set('RZ_VERSION', rizin_version)
conf.set('RIZIN_MODULE', rz_bp.name())
conf.set('RIZIN_MODULE_DEPS', ' '.join(['rz_util']))
conf.set('PACKAGE_RELATIVE_PATH', cmake_package_relative_path)
conf.set('INSTALL_INCDIR', rizin_incdir)
conf.set('INSTALL_LIBDIR', rizin_libdir)
conf.set('INSTALL_PLUGDIR', rizin_plugins)
conf.set('rizin_libname', rz_bp.name())
cmake_mod.configure_package_config_file(
name: conf.get('rizin_libname'),
input: '../RzModulesConfig.cmake.in',
install_dir: rizin_cmakedir / conf.get('rizin_libname'),
configuration: conf,
)
endif
modules += { 'rz_bp': {
'target': rz_bp,
'dependencies': ['rz_util'],
'plugins': [bp_plugins]
}}
35 changes: 4 additions & 31 deletions librz/config/meson.build
Original file line number Diff line number Diff line change
Expand Up @@ -22,34 +22,7 @@ rz_config_dep = declare_dependency(link_with: rz_config,
include_directories: [platform_inc])
meson.override_dependency('rz_config', rz_config_dep)

pkgconfig_mod.generate(rz_config,
subdirs: 'librz',
version: rizin_version,
name: 'rz_config',
filebase: 'rz_config',
requires: [
'rz_util'
],
description: 'rizin foundation libraries',
variables: [
'datdir=@0@'.format(rizin_datdir_rz),
],
)

if not is_static_libs_only
conf = configuration_data()
conf.set('RZ_VERSION', rizin_version)
conf.set('RIZIN_MODULE', rz_config.name())
conf.set('RIZIN_MODULE_DEPS', ' '.join(['rz_util']))
conf.set('PACKAGE_RELATIVE_PATH', cmake_package_relative_path)
conf.set('INSTALL_INCDIR', rizin_incdir)
conf.set('INSTALL_LIBDIR', rizin_libdir)
conf.set('INSTALL_PLUGDIR', rizin_plugins)
conf.set('rizin_libname', rz_config.name())
cmake_mod.configure_package_config_file(
name: conf.get('rizin_libname'),
input: '../RzModulesConfig.cmake.in',
install_dir: rizin_cmakedir / conf.get('rizin_libname'),
configuration: conf,
)
endif
modules += { 'rz_config': {
'target': rz_config,
'dependencies': ['rz_util']
}}
35 changes: 4 additions & 31 deletions librz/cons/meson.build
Original file line number Diff line number Diff line change
Expand Up @@ -33,36 +33,9 @@ rz_cons_dep = declare_dependency(link_with: rz_cons,
include_directories: [platform_inc])
meson.override_dependency('rz_cons', rz_cons_dep)

pkgconfig_mod.generate(rz_cons,
subdirs: 'librz',
version: rizin_version,
name: 'rz_cons',
filebase: 'rz_cons',
requires: [
'rz_util'
],
description: 'rizin foundation libraries',
variables: [
'datdir=@0@'.format(rizin_datdir_rz),
],
)

if not is_static_libs_only
conf = configuration_data()
conf.set('RZ_VERSION', rizin_version)
conf.set('RIZIN_MODULE', rz_cons.name())
conf.set('RIZIN_MODULE_DEPS', ' '.join(['rz_util']))
conf.set('PACKAGE_RELATIVE_PATH', cmake_package_relative_path)
conf.set('INSTALL_INCDIR', rizin_incdir)
conf.set('INSTALL_LIBDIR', rizin_libdir)
conf.set('INSTALL_PLUGDIR', rizin_plugins)
conf.set('rizin_libname', rz_cons.name())
cmake_mod.configure_package_config_file(
name: conf.get('rizin_libname'),
input: '../RzModulesConfig.cmake.in',
install_dir: rizin_cmakedir / conf.get('rizin_libname'),
configuration: conf,
)
endif
modules += { 'rz_cons': {
'target': rz_cons,
'dependencies': ['rz_util']
}}

subdir('d')
89 changes: 31 additions & 58 deletions librz/core/meson.build
Original file line number Diff line number Diff line change
Expand Up @@ -166,62 +166,35 @@ rz_core_dep = declare_dependency(link_with: rz_core,
include_directories: rz_core_inc)
meson.override_dependency('rz_core', rz_core_dep)

pkgconfig_mod.generate(
rz_core,
subdirs: 'librz',
version: rizin_version,
name: 'rz_core',
filebase: 'rz_core',
requires: pkgconfig_magic_requires + [
'rz_util',
'rz_demangler',
'rz_diff',
'rz_reg',
'rz_syscall',
'rz_search',
'rz_cons',
'rz_analysis',
'rz_socket',
'rz_type',
'rz_io',
'rz_lang',
'rz_hash',
'rz_flag',
'rz_parse',
'rz_egg',
'rz_debug',
'rz_crypto',
'rz_config',
'rz_bin',
'rz_asm',
'rz_bp',
'rz_sign',
'rz_il'
],
description: 'rizin foundation libraries',
variables: [
'plugindir=@0@'.format(rizin_plugins),
'datdir=@0@'.format(rizin_datdir_rz),
],
)
modules += { 'rz_core': {
'target': rz_core,
'dependencies': [
'rz_magic',
'rz_util',
'rz_demangler',
'rz_diff',
'rz_reg',
'rz_syscall',
'rz_search',
'rz_cons',
'rz_analysis',
'rz_socket',
'rz_type',
'rz_io',
'rz_lang',
'rz_hash',
'rz_flag',
'rz_parse',
'rz_egg',
'rz_debug',
'rz_crypto',
'rz_config',
'rz_bin',
'rz_asm',
'rz_bp',
'rz_sign',
'rz_il'
],
'plugins': [core_plugins]
}}

if not is_static_libs_only
conf = configuration_data()
conf.set('RZ_VERSION', rizin_version)
conf.set('RIZIN_MODULE', rz_core.name())
conf.set('RIZIN_MODULE_DEPS', ' '.join(['rz_util', 'rz_demangler', 'rz_diff', 'rz_magic',
'rz_socket', 'rz_flag', 'rz_cons', 'rz_lang', 'rz_hash', 'rz_crypto', 'rz_io', 'rz_reg',
'rz_bp', 'rz_syscall', 'rz_parse', 'rz_asm', 'rz_egg', 'rz_search', 'rz_sign', 'rz_il',
'rz_analysis', 'rz_type', 'rz_debug', 'rz_config', 'rz_bin']))
conf.set('PACKAGE_RELATIVE_PATH', cmake_package_relative_path)
conf.set('INSTALL_INCDIR', rizin_incdir)
conf.set('INSTALL_LIBDIR', rizin_libdir)
conf.set('INSTALL_PLUGDIR', rizin_plugins)
conf.set('rizin_libname', rz_core.name())
cmake_mod.configure_package_config_file(
name: conf.get('rizin_libname'),
input: '../RzModulesConfig.cmake.in',
install_dir: rizin_cmakedir / conf.get('rizin_libname'),
configuration: conf,
)
endif
Loading

0 comments on commit 4e5857c

Please sign in to comment.