From 56829645944da9d169c5854d6f87ce50ef7bb3e2 Mon Sep 17 00:00:00 2001 From: DreamConnected <1487442471@qq.com> Date: Wed, 5 Nov 2025 20:52:50 +0800 Subject: [PATCH 1/2] CI code-test.yml: add tset units --- .github/workflows/code-test.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.github/workflows/code-test.yml b/.github/workflows/code-test.yml index f147488..9420a87 100644 --- a/.github/workflows/code-test.yml +++ b/.github/workflows/code-test.yml @@ -24,6 +24,7 @@ jobs: - name: Test build run: | + git submodule update --init --recursive sed -i "s|android-ndk-r27c|$ANDROID_NDK_HOME|g" aarch64-android-api30.txt meson setup build \ From 172737e7244906be4d9b5ba903ee69d5394cb428 Mon Sep 17 00:00:00 2001 From: DreamConnected <1487442471@qq.com> Date: Wed, 5 Nov 2025 21:19:55 +0800 Subject: [PATCH 2/2] meson.build: let's move to meson! Signed-off-by: DreamConnected <1487442471@qq.com> --- .gitmodules | 4 +- aarch64-android-api30.txt | 22 +++++++ meson.build | 111 ++++++++++++++++++++++++++++++++++ meson_options.txt | 5 ++ src/meson.build | 124 ++++++++++++++++++++++++++++++++++++++ 5 files changed, 264 insertions(+), 2 deletions(-) create mode 100644 aarch64-android-api30.txt create mode 100644 meson.build create mode 100644 meson_options.txt create mode 100644 src/meson.build diff --git a/.gitmodules b/.gitmodules index 5edc699..1672fdd 100644 --- a/.gitmodules +++ b/.gitmodules @@ -1,6 +1,6 @@ [submodule "src/ruri"] path = src/ruri - url = https://github.com/Moe-hacker/ruri + url = https://github.com/RuriOSS/ruri [submodule "src/catsh"] path = src/catsh - url = https://github.com/rurioss/catsh + url = https://github.com/RuriOSS/catsh diff --git a/aarch64-android-api30.txt b/aarch64-android-api30.txt new file mode 100644 index 0000000..5192523 --- /dev/null +++ b/aarch64-android-api30.txt @@ -0,0 +1,22 @@ +[binaries] +c = 'android-ndk-r27c/toolchains/llvm/prebuilt/linux-x86_64/bin/aarch64-linux-android30-clang' +cpp = 'android-ndk-r27c/toolchains/llvm/prebuilt/linux-x86_64/bin/aarch64-linux-android30-clang++' +ar = 'android-ndk-r27c/toolchains/llvm/prebuilt/linux-x86_64/bin/llvm-ar' +as = 'android-ndk-r27c/toolchains/llvm/prebuilt/linux-x86_64/bin/llvm-as' +ld = 'android-ndk-r27c/toolchains/llvm/prebuilt/linux-x86_64/bin/llvm-ld' +strip = 'android-ndk-r27c/toolchains/llvm/prebuilt/linux-x86_64/bin/llvm-strip' +ranlib = 'android-ndk-r27c/toolchains/llvm/prebuilt/linux-x86_64/bin/llvm-ranlib' +pkgconfig = '/usr/bin/pkg-config' +cmake = '/usr/bin/cmake' + +[host_machine] +system = 'linux' +cpu_family = 'x86_64' +cpu = 'x86_64' +endian = 'little' + +[target_machine] +system = 'linux' +cpu_family = 'aarch64' +cpu = 'aarch64' +endian = 'little' \ No newline at end of file diff --git a/meson.build b/meson.build new file mode 100644 index 0000000..1cad3d5 --- /dev/null +++ b/meson.build @@ -0,0 +1,111 @@ +project( + 'rurima', + 'c', + meson_version : '>= 0.61', + version : '0.9.0', + license : 'MIT', + default_options : [ + 'warning_level=3', + 'b_lto=true', + 'b_lto_mode=thin', + ], +) + +cc = meson.get_compiler('c') +pkgconfig = import('pkgconfig') +pkgconfig_libs = [] +libruri_dependencies = [] + +## Build flags +common_cc_flags = [ + '-Wno-pedantic', + '-Wno-newline-eof', + '-Wno-sign-compare', + '-Wno-unused-result', + '-Wno-unused-variable', + '-Wno-unused-function', + '-Wno-unused-parameter', + '-Wno-unused-but-set-variable', + '-Wno-missing-field-initializers', + '-Wno-gnu-zero-variadic-macro-arguments' +] + +add_project_arguments(cc.get_supported_arguments(common_cc_flags), language: 'c') + +libruri_version = '3.9.3' + +prefixdir = get_option('prefix') + +# Configuration options. +srcconf = configuration_data() +srcconf.set('_GNU_SOURCE', true) + +want_cap = get_option('cap') +want_seccomp = get_option('seccomp') + +## Cap. +if want_cap + libcap = dependency('libcap', required: false) + pkgconfig_libs += libcap + libruri_dependencies += libcap + if libcap.found() == false + add_project_arguments(cc.get_supported_arguments('-DDISABLE_LIBCAP=on'), language: 'c') + endif +else + add_project_arguments(cc.get_supported_arguments('-DDISABLE_LIBCAP=on'), language: 'c') +endif + +## Seccomp. +if want_seccomp + libseccomp = dependency('libseccomp', required: false) + pkgconfig_libs += libseccomp + libruri_dependencies += libseccomp + if libseccomp.found() == false + add_project_arguments(cc.get_supported_arguments('-DDISABLE_LIBSECCOMP=on'), language: 'c') + endif +else + add_project_arguments(cc.get_supported_arguments('-DDISABLE_LIBSECCOMP=on'), language: 'c') +endif + +# src ruri +subdir('src') + +rurima_sources = [ + 'src/archive.c', + 'src/checkdep.c', + 'src/dockerhub.c', + 'src/exec.c', + 'src/info.c', + 'src/lxcmirror.c', + 'src/main.c', + 'src/net.c', + 'src/shared.c', + 'src/signal.c', + 'src/subcommand.c' +] + +rurima_deps = [ + libruri_dep, + libruri_dependencies, +] + +executable('rurima', + rurima_sources, + dependencies: rurima_deps, + install: true, + install_dir: get_option('bindir') +) + +install_data('README.md', install_dir: get_option('datadir') / 'doc' / meson.project_name()) + +summary({ + 'Build type': get_option('buildtype'), + 'Install prefix': get_option('prefix'), + 'Source directory': meson.project_source_root(), + 'Build directory': meson.project_build_root(), +}, section: 'Directories') + +summary({ + 'libcap': libcap.found(), + 'libseccomp': libseccomp.found(), +}, section: 'Dependencies') diff --git a/meson_options.txt b/meson_options.txt new file mode 100644 index 0000000..0d53002 --- /dev/null +++ b/meson_options.txt @@ -0,0 +1,5 @@ +option('cap', type: 'boolean', value: true, + description: 'use caps') + +option('seccomp', type: 'boolean', value: true, + description: 'use seccomp') diff --git a/src/meson.build b/src/meson.build new file mode 100644 index 0000000..99df7b6 --- /dev/null +++ b/src/meson.build @@ -0,0 +1,124 @@ +# Rurima includes. +rurima_includes = include_directories( + 'include', + 'ruri') + +## libcatsh +libcatsh_include_dir = include_directories('catsh/src/include') + +libcatsh_sources = [ + 'catsh/src/catsh.c', +] + +libcatsh = library('catsh', + libcatsh_sources, + include_directories: libcatsh_include_dir, + install: true, + version: '0.5.0', + soversion: '1', +) + +pkgconfig.generate(libcatsh, + name: 'libcatsh', + description: 'C ATSH library', + version: '0.5.0', +) + +libcatsh_dep = declare_dependency( + link_with: libcatsh, + include_directories: libcatsh_include_dir, +) + +install_headers('catsh/src/include/catsh.h', subdir: 'catsh') + +## libcprintf +libcprintf_include_dir = include_directories('ruri/src/include') + +libcprintf_sources = [ + 'ruri/src/cprintf.c', +] + +libcprintf = library('cprintf', + libcprintf_sources, + include_directories: libcprintf_include_dir, + install: true, + version: '0.2.1', + soversion: '1', +) + +pkgconfig.generate(libcprintf, + name: 'libcprintf', + description: 'C formatted print library', + version: '0.2.1', +) + +libcprintf_dep = declare_dependency( + link_with: libcprintf, + include_directories: libcprintf_include_dir, +) + +install_headers('ruri/src/include/cprintf.h', subdir: 'cprintf') + + +## libruri +libruri_include_dir = include_directories( + 'ruri/src/include', + 'ruri/src/easteregg/include') + +libruri_sources = [ + 'ruri/src/easteregg/action.c', + 'ruri/src/easteregg/layer.c', + 'ruri/src/easteregg/nekofeng.c', + 'ruri/src/easteregg/typewriter.c', + 'ruri/src/caplist.c', + 'ruri/src/cgroup.c', + 'ruri/src/chroot.c', + 'ruri/src/config.c', + 'ruri/src/elf-magic.c', + 'ruri/src/info.c', + 'ruri/src/k2v.c', + 'ruri/src/mount.c', + 'ruri/src/passwd.c', + 'ruri/src/ps.c', + 'ruri/src/rootless.c', + 'ruri/src/ruri.c', + 'ruri/src/rurienv.c', + 'ruri/src/rurifetch.c', + 'ruri/src/seccomp.c', + 'ruri/src/signal.c', + 'ruri/src/umount.c', + 'ruri/src/unshare.c' +] + +libruri = library('ruri', + libruri_sources, + include_directories: libruri_include_dir, + dependencies: [ + libcprintf_dep, + libcatsh_dep, + libruri_dependencies, + ], + install: true, + version: libruri_version, + soversion: '1', +) + +pkgconfig.generate( + libruri, + name: 'libruri', + description: 'RURI library', + version: libruri_version, + requires: ['libcprintf', 'libcatsh', 'libcap', 'libseccomp'], +) + +libruri_dep = declare_dependency( + link_with: libruri, + include_directories: libruri_include_dir, + dependencies: [ + libcprintf_dep, + libcatsh_dep, + libruri_dependencies, + ], +) + +install_headers('ruri/src/include/ruri.h', subdir: 'ruri')