diff --git a/.github/subproject_test/meson.build b/.github/subproject_test/meson.build new file mode 100644 index 00000000000..73b6cb28b0a --- /dev/null +++ b/.github/subproject_test/meson.build @@ -0,0 +1,52 @@ +project('subpoj_tester', 'c') + +rz_deps = [ + dependency('rz_core'), + dependency('rz_reg'), + dependency('rz_flag'), + dependency('rz_hash'), + dependency('rz_bin'), + dependency('rz_bp'), + dependency('rz_io'), + dependency('rz_search'), + dependency('rz_sign'), + dependency('rz_cons'), + dependency('rz_lang'), + dependency('rz_socket'), + dependency('rz_type'), + dependency('rz_debug'), + dependency('rz_il'), + dependency('rz_demangler'), + dependency('rz_util'), + dependency('rz_main'), + dependency('rz_crypto'), + dependency('rz_config'), + dependency('rz_egg'), + dependency('rz_syscall'), + dependency('rz_magic'), + ] + +# TODO: extend to perform actually linking test as well! +tester_source = custom_target('main.c', + command: ['echo', ''' +#include + +int main(void) { + printf("hello world\n"); + return 0; +} + '''], + output: 'main.c', + capture: true, + ) + + +subproj_tester = executable('subproj_tester', + tester_source, + dependencies: rz_deps, + pie: true, + ) + +test('basic', subproj_tester) + + diff --git a/.github/subproject_test/subprojects/rizin.wrap b/.github/subproject_test/subprojects/rizin.wrap new file mode 100644 index 00000000000..2c1b24ea836 --- /dev/null +++ b/.github/subproject_test/subprojects/rizin.wrap @@ -0,0 +1,36 @@ +[wrap-git] + +url=${REPOSITORY} +revision=${BRANCH} + +depth = 1 + +[provide] +rz_core = rz_core_dep +rz_reg = rz_reg_dep +rz_flag = rz_flag_dep +rz_hash = rz_hash_dep +rz_bin = rz_bin_dep +rz_bp = rz_bp_dep +rz_io = rz_io_dep +rz_search = rz_search_dep +rz_sign = rz_sign_dep +rz_cons = rz_cons_dep +rz_lang = rz_lang_dep +rz_socket = rz_socket_dep +rz_type = rz_type_dep +rz_debug = rz_debug_dep +#rz_ghidra = rz_ghidra_dep +rz_il = rz_il_dep +rz_demangler = rz_demangler_dep +rz_util = rz_util_dep +rz_main = rz_main_dep +rz_asm = rz_asm_dep +rz_crypto = rz_crypto_dep +rz_config = rz_config_dep +rz_egg = rz_egg_dep +rz_syscall = rz_syscall_dep +rz_magic = rz_magic_dep +rz_parse = rz_parse_dep +rz_analysis = rz_analysis_dep + diff --git a/.github/workflows/subproject.yml b/.github/workflows/subproject.yml new file mode 100644 index 00000000000..23631d460a4 --- /dev/null +++ b/.github/workflows/subproject.yml @@ -0,0 +1,69 @@ +name: Subproject build + +on: + push: + paths: + - '**.c' + - '**.h' + - '**.in' + - '**.inc' + - '**/meson.build' + - 'subprojects/**' + - 'test/**' + - '.github/workflows/subproject.yml' + - '.github/subproject_test/**' + branches: + - 'dev' + - 'stable' + - 'container-*' + pull_request: + paths: + - '**.c' + - '**.h' + - '**.in' + - '**.inc' + - '**/meson.build' + - 'subprojects/**' + - '.github/workflows/subproject.yml' + - '.github/subproject_test/**' + branches: + - 'dev' + - 'stable' + - 'release-*' + +# Automatically cancel any previous workflow on new push. +concurrency: + group: ${{ github.workflow }}-${{ github.ref }}-${{ github.event_name }} + cancel-in-progress: true + +jobs: + build: + name: meson-subproject + runs-on: ubuntu-22.04 + steps: + - uses: actions/checkout@v4 + - name: Install dependencies + run: | + sudo apt-get --assume-yes update + sudo apt-get --assume-yes install python3-wheel python3-setuptools pkgconf libcurl4-openssl-dev libpkgconf-dev libarchive-dev + sudo python3 -m pip install ninja meson + + - name: Replace branch in wrap-file + run: | + # NOTE: This is a workaround, as meson wrap files cannot be used on remote tracking + git checkout -b "${{ github.ref_name }}" + sed -i 's@\${REPOSITORY}@file://'"$PWD"'@' .github/subproject_test/subprojects/rizin.wrap + sed -i 's@\${BRANCH}@'"${{ github.ref_name }}"'@' .github/subproject_test/subprojects/rizin.wrap + + - name: Meson setup + run: meson setup build .github/subproject_test/ + - name: Checkout our Testsuite Binaries + uses: actions/checkout@v4 + with: + repository: rizinorg/rizin-testbins + path: .github/subproject_teyt/subprojects/rizin/test/bins + - name: Ninja compile and install + run: ninja -C build && sudo meson install -C build + + - name: Run unit tests + run: meson test -C build diff --git a/meson.build b/meson.build index 19c5760123b..1b1e34643d5 100644 --- a/meson.build +++ b/meson.build @@ -84,10 +84,10 @@ endif # Hence, we have to disable them for the newer once. # Older compilers don't have these warnings and should not be included with #pragma if cc.has_argument('-Wenum-conversion') - add_global_arguments('-DCC_SUPPORTS_W_ENUM_CONVERION', language: ['c', 'cpp']) + add_project_arguments('-DCC_SUPPORTS_W_ENUM_CONVERION', language: ['c', 'cpp']) endif if cc.has_argument('-Wenum-compare') - add_global_arguments('-DCC_SUPPORTS_W_ENUM_COMPARE', language: ['c', 'cpp']) + add_project_arguments('-DCC_SUPPORTS_W_ENUM_COMPARE', language: ['c', 'cpp']) endif if cc.has_argument('--std=gnu99') diff --git a/test/integration/meson.build b/test/integration/meson.build index 4a9b00e0958..ba93d65ea57 100644 --- a/test/integration/meson.build +++ b/test/integration/meson.build @@ -1,10 +1,6 @@ -if get_option('enable_tests') +if get_option('enable_tests') and cli_enabled test_conf_data = configuration_data() - if cli_enabled - test_conf_data.set_quoted('RIZIN_BUILD_PATH', rizin_exe.full_path()) - else - test_conf_data.set_quoted('RIZIN_BUILD_PATH', meson.current_build_dir()) - endif + test_conf_data.set_quoted('RIZIN_BUILD_PATH', rizin_exe.full_path()) test_conf_data.set_quoted('TEST_BUILD_TYPES_DIR', fs.as_posix(types_build_dir)) test_config_h = configure_file( input: 'test_config.h.in',