From 22906f1065da4ed53dd8df33f700c1d6ead49bee Mon Sep 17 00:00:00 2001 From: Lucas Schwiderski Date: Tue, 22 Apr 2025 16:01:47 +0200 Subject: [PATCH 1/8] Use external URLs in CI This makes it agnostic to the internal topology on the server hosting the worker. --- .ci/pipelines/pr.yml | 12 ++++++++++-- .ci/pipelines/set-pr-pipelines.yml | 16 +++++++++++++--- .ci/tasks/build.yml | 4 +++- .ci/tasks/clippy.yml | 4 +++- Justfile | 13 +++++++++++++ 5 files changed, 42 insertions(+), 7 deletions(-) diff --git a/.ci/pipelines/pr.yml b/.ci/pipelines/pr.yml index f21409c..4deb271 100644 --- a/.ci/pipelines/pr.yml +++ b/.ci/pipelines/pr.yml @@ -4,12 +4,16 @@ resource_types: - name: gitea-package type: registry-image source: - repository: registry.local:5000/gitea-package + repository: registry.sclu1034.dev/gitea-package + username: ((registry_user)) + password: ((registry_password)) - name: gitea-status type: registry-image source: - repository: registry.local:5000/gitea-status + repository: registry.sclu1034.dev/gitea-status + username: ((registry_user)) + password: ((registry_password)) resources: - name: repo @@ -84,6 +88,8 @@ jobs: file: repo/.ci/tasks/clippy.yml vars: forgejo_api_key: ((forgejo_api_key)) + registry_user: ((registry_user)) + registry_password: ((registry_password)) - name: build @@ -124,6 +130,8 @@ jobs: pr: ((pr)) forgejo_url: ((forgejo_url)) forgejo_api_key: ((forgejo_api_key)) + registry_user: ((registry_user)) + registry_password: ((registry_password)) - load_var: version_number reveal: true diff --git a/.ci/pipelines/set-pr-pipelines.yml b/.ci/pipelines/set-pr-pipelines.yml index 0712b03..792faad 100644 --- a/.ci/pipelines/set-pr-pipelines.yml +++ b/.ci/pipelines/set-pr-pipelines.yml @@ -5,17 +5,23 @@ resource_types: - name: gitea-package type: registry-image source: - repository: registry.local:5000/gitea-package + repository: registry.sclu1034.dev/gitea-package + username: ((registry_user)) + password: ((registry_password)) - name: gitea-status type: registry-image source: - repository: registry.local:5000/gitea-status + repository: registry.sclu1034.dev/gitea-status + username: ((registry_user)) + password: ((registry_password)) - name: gitea-pr type: registry-image source: - repository: registry.local:5000/gitea-pr + repository: registry.sclu1034.dev/gitea-pr + username: ((registry_user)) + password: ((registry_password)) resources: @@ -75,6 +81,8 @@ jobs: forgejo_url: ((forgejo_url)) owner: ((owner)) repo: ((repo)) + registry_user: ((registry_user)) + registry_password: ((registry_password)) instance_vars: number: ((.:pr.number)) @@ -115,6 +123,8 @@ jobs: pr: "" forgejo_url: ((forgejo_url)) forgejo_api_key: ((forgejo_api_key)) + registry_user: ((registry_user)) + registry_password: ((registry_password)) - load_var: version_number reveal: true diff --git a/.ci/tasks/build.yml b/.ci/tasks/build.yml index e8652c4..d0afe6a 100644 --- a/.ci/tasks/build.yml +++ b/.ci/tasks/build.yml @@ -6,8 +6,10 @@ image_resource: name: rust-xwin type: registry-image source: - repository: registry.local:5000/rust-xwin-ci + repository: registry.sclu1034.dev/rust-xwin-ci tag: latest + username: ((registry_user)) + password: ((registry_password)) inputs: - name: repo diff --git a/.ci/tasks/clippy.yml b/.ci/tasks/clippy.yml index 149ce54..690954b 100644 --- a/.ci/tasks/clippy.yml +++ b/.ci/tasks/clippy.yml @@ -6,8 +6,10 @@ image_resource: name: rust-xwin-ci type: registry-image source: - repository: registry.local:5000/rust-xwin-ci + repository: registry.sclu1034.dev/rust-xwin-ci tag: latest + username: ((registry_user)) + password: ((registry_password)) inputs: - name: repo diff --git a/Justfile b/Justfile index 4ce14c9..4825633 100644 --- a/Justfile +++ b/Justfile @@ -1,3 +1,5 @@ +fly_target := "main" + image: docker build -t dt-plugin-builder . @@ -9,3 +11,14 @@ build: -v ./:/src/plugin \ dt-plugin-builder \ cargo build -Zbuild-std --target x86_64-pc-windows-msvc + +set-base-pipeline: + fly -t {{fly_target}} set-pipeline \ + --pipeline dt-plugin-template-pr \ + --config .ci/pipelines/set-pr-pipelines.yml \ + -v forgejo_url=https://git.sclu1034.dev \ + -v forgejo_api_key=${FORGEJO_API_KEY} \ + -v registry_user=${REGISTRY_USER} \ + -v registry_password=${REGISTRY_PASSWORD} \ + -v owner=bitsquid_dt \ + -v repo=dt-plugin-template From 1aa84e3618709342a41748b9f546cd3f22d03208 Mon Sep 17 00:00:00 2001 From: Lucas Schwiderski Date: Thu, 8 May 2025 00:50:40 +0200 Subject: [PATCH 2/8] Update to new engine API version --- src/plugin_api.h | 19 +++++++++++++------ src/stingray_sdk.rs | 6 +++--- 2 files changed, 16 insertions(+), 9 deletions(-) diff --git a/src/plugin_api.h b/src/plugin_api.h index fe29b8c..6cb4c3c 100644 --- a/src/plugin_api.h +++ b/src/plugin_api.h @@ -69,7 +69,7 @@ typedef void *(*GetApiFunction)(unsigned api); struct PluginApi { #ifdef __cplusplus - uint32_t version = 65; + uint32_t version = 69; uint32_t flags = 3; // lua plugin #else uint32_t version; @@ -83,13 +83,19 @@ struct PluginApi { loaded. */ void (*loaded)(GetApiFunction get_engine_api); + // Seemingly not called by current versions of the engine, at least in release + // mode. /* Called at the start of a "hot reload" of the plugin DLL. Should return a pointer to a serialized "state" for the plugin.*/ void *(*start_reload)(GetApiFunction get_engine_api); + // Seemingly not called by current versions of the engine, at least in release + // mode. /* Called just before the plugin is unloaded. */ void (*unloaded)(); + // Seemingly not called by current versions of the engine, at least in release + // mode. /* Called to finalized the "hot reload" after the plugin has been reloaded with the new code. Should restore the state from the serialized state data. Note that it is the responsibility of the plugin to free the state data. */ @@ -223,9 +229,8 @@ struct LuaApi { int (*checkstack)(lua_State *L, int sz); void (*xmove)(lua_State *from, lua_State *to, int n); - const void *(*fnx1)(lua_State *L, int idx); - /* Access functions */ + int (*isnil)(lua_State *L, int idx); int (*isnumber)(lua_State *L, int idx); int (*isstring)(lua_State *L, int idx); int (*iscfunction)(lua_State *L, int idx); @@ -313,8 +318,6 @@ struct LuaApi { int (*gethookmask)(lua_State *L); int (*gethookcount)(lua_State *L); - // int (*fnx3) (lua_State* L); - /* Library functions */ void (*lib_openlib)(lua_State *L, const char *libname, const luaL_Reg *l, int nup); @@ -399,6 +402,8 @@ struct LuaApi { /* Gets a Unit at the specified index. */ CApiUnit *(*getunit)(lua_State *L, int i); + void *(*getunknown)(lua_State *L, int i); + /* Gets the Lua state where the main scripts execute. */ lua_State *(*getscriptenvironmentstate)(); @@ -423,8 +428,10 @@ struct LuaApi { /* Returns true if the stack entry is a UnitReference. */ int (*isunitreference)(lua_State *L, int i); + size_t (*objlen2)(lua_State *L, int idx); + /* Reserved for expansion of the API. */ - void *reserved[32]; + // void *reserved[30]; }; struct LoggingApi { diff --git a/src/stingray_sdk.rs b/src/stingray_sdk.rs index b046b63..1631c5c 100644 --- a/src/stingray_sdk.rs +++ b/src/stingray_sdk.rs @@ -13,16 +13,16 @@ use std::ffi::CString; use std::os::raw::c_char; use std::os::raw::c_void; -use bindings::lua_CFunction; -pub use bindings::lua_State; pub use bindings::GetApiFunction; pub use bindings::PluginApi; pub use bindings::PluginApiID; +use bindings::lua_CFunction; +pub use bindings::lua_State; impl std::default::Default for PluginApi { fn default() -> Self { Self { - version: 65, + version: 69, flags: 3, setup_game: None, update_game: None, From c3f7d54626cb03aaa1e3cbf55aece8a9ebed26a0 Mon Sep 17 00:00:00 2001 From: Lucas Schwiderski Date: Thu, 8 May 2025 00:52:57 +0200 Subject: [PATCH 3/8] Rework plugin structure Also implements logging through the common `log` macros. --- Cargo.lock | 5 ++- Cargo.toml | 1 + Dockerfile | 4 +- Justfile | 95 +++++++++++++++++++++++++++++++++++++++++++-- src/lib.rs | 36 +++++++++++------ src/lua.rs | 16 ++++++++ src/plugin.rs | 42 +++++--------------- src/stingray_sdk.rs | 24 ++++++++++++ 8 files changed, 171 insertions(+), 52 deletions(-) create mode 100644 src/lua.rs diff --git a/Cargo.lock b/Cargo.lock index 8ea5eb8..4b84ed3 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -69,6 +69,7 @@ version = "0.1.0" dependencies = [ "bindgen", "libc", + "log", ] [[package]] @@ -110,9 +111,9 @@ dependencies = [ [[package]] name = "log" -version = "0.4.22" +version = "0.4.27" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a7a70ba024b9dc04c27ea2f0c0548feb474ec5c54bba33a7f72f873a39d07b24" +checksum = "13dc2df351e3202783a1fe0d44375f7295ffb4049267b0f3018346dc122a1d94" [[package]] name = "memchr" diff --git a/Cargo.toml b/Cargo.toml index 36d3a21..bb3f2f6 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -7,6 +7,7 @@ edition = "2021" [dependencies] libc = "0.2.144" +log = { version = "0.4.27", features = ["release_max_level_info"] } [build-dependencies] bindgen = "0.71.0" diff --git a/Dockerfile b/Dockerfile index 1a5a968..92019d0 100644 --- a/Dockerfile +++ b/Dockerfile @@ -24,7 +24,7 @@ RUN set -eux; \ # And to keep that to a minimum, we still delete the stuff we don't need. rm -rf /root/.xwin-cache; -FROM rust:slim-bullseye AS final +FROM rust:1.86.0-slim-bullseye AS final ARG LLVM_VERSION=18 ENV KEYRINGS=/usr/local/share/keyrings @@ -37,6 +37,7 @@ RUN set -eux; \ apt-get install -y --no-install-recommends \ ca-certificates \ gpg \ + make \ ; \ mkdir -p $KEYRINGS; \ gpg --dearmor > $KEYRINGS/llvm.gpg < /root/llvm-snapshot.gpg.key; \ @@ -69,7 +70,6 @@ RUN set -eux; \ update-alternatives --install /usr/bin/c++ c++ /usr/bin/clang++ 100; \ update-alternatives --install /usr/bin/ld ld /usr/bin/ld.lld 100; \ rustup target add x86_64-pc-windows-msvc; \ - rustup default stable-x86_64-pc-windows-msvc; \ rustup component add rust-src; \ rustup update; \ apt-get remove -y --auto-remove \ diff --git a/Justfile b/Justfile index 4825633..723421a 100644 --- a/Justfile +++ b/Justfile @@ -1,16 +1,103 @@ +set dotenv-load +set dotenv-filename := '.envrc' +set dotenv-required +set allow-duplicate-variables + fly_target := "main" +image_name := "dt-plugin-builder" + +steam_library := env("steam_library") +game_dir := steam_library / "steamapps" / "common" / "Warhammer 40,000 DARKTIDE" +log_dir := env("APPDATA") / "Fatshark" / "Darktide" / "console_logs" + +game_dir := if path_exists(game_dir) == true { + game_dir +} else { + error("Game directory does not exist, please set correct library path: " + game_dir) +} + +proton_dir := home_directory() / ".steam" / "steam" + +export STEAM_COMPAT_DATA_PATH := steam_library / "steamapps" / "compatdata" / "1361210" +export SteamAppId := "1361210" + +release := env("RELEASE", "false") image: - docker build -t dt-plugin-builder . + docker build -t {{image_name}} . -build: +# Compile the Windows DLL through a Docker image +[unix] +compile: docker run \ --rm \ -t \ --user "$(id -u):$(id -g)" \ + -v $HOME/.cargo/registry:/usr/local/cargo/registry \ + -v $HOME/.cargo/git:/usr/local/cargo/git \ + -v $HOME/.rustup/toolchains:/usr/local/rustup/toolchains \ -v ./:/src/plugin \ - dt-plugin-builder \ - cargo build -Zbuild-std --target x86_64-pc-windows-msvc + {{image_name}} \ + cargo build -Zbuild-std --target x86_64-pc-windows-msvc {{ if release != "false" { "--release" } else { "" } }} + +# Compile the DLL and install it to the game's plugin directory +[unix] +build: compile + cp target/x86_64-pc-windows-msvc/{{ if release != "false" { "release" } else { "debug" } }}/dt_p2p.dll "{{game_dir}}/binaries/plugins/dt_p2p_pluginw64_release.dll" + +# Open the newest game log file +[unix] +log: + #!/bin/sh + set -e + file="$(\ls "{{log_dir}}" | tail -1)" + echo "$(tput bold)Opening log file $file$(tput sgr0)" + exec bat "{{log_dir}}/$file" + +# Run the game through Proton +[unix] +game: + #!/bin/sh + set -e + cd "{{game_dir / "binaries"}}" + proton waitforexitandrun ./Darktide.exe \ + -eac-untrusted \ + --bundle-dir ../bundle \ + --ini settings \ + --backend-auth-service-url https://bsp-auth-prod.atoma.cloud \ + --backend-title-service-url https://bsp-td-prod.atoma.cloud \ + -game \ + -launcher_verification_passed_crashify_property false + +# Run the game +# +# Untested! +[windows] +game: + #!cmd.exe + cd "{{game_dir / "binaries"}}" + ./Darktide.exe \ + -eac-untrusted \ + --bundle-dir ../bundle \ + --ini settings \ + --backend-auth-service-url https://bsp-auth-prod.atoma.cloud \ + --backend-title-service-url https://bsp-td-prod.atoma.cloud \ + -game \ + -launcher_verification_passed_crashify_property false + +# Compile the plugin through a Docker image +# +# Make sure to run `just image` first, to build the image. +# Untested: I don't know, if this works with Windows' Docker Desktop. +# I also don't know if/where cargo and rustup keep their caches on Windows. +[windows] +compile-docker: + docker run \ + --rm \ + -t \ + -v ./:/src/plugin \ + {{image_name}} \ + cargo build -Zbuild-std --target x86_64-pc-windows-msvc {{ if release != "false" { "--release" } else { "" } }} set-base-pipeline: fly -t {{fly_target}} set-pipeline \ diff --git a/src/lib.rs b/src/lib.rs index 9cdc2b7..9a6f298 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -1,11 +1,12 @@ use std::ffi::{c_char, CString}; use std::sync::OnceLock; +mod lua; mod plugin; mod stingray_sdk; use plugin::Plugin; -use stingray_sdk::{GetApiFunction, PluginApi, PluginApiID}; +use stingray_sdk::{GetApiFunction, LoggingApi, LuaApi, PluginApi, PluginApiID}; // TODO: Change these /// The name that the plugin is registered to the engine as. @@ -15,6 +16,20 @@ pub const PLUGIN_NAME: &str = "dt-plugin-template"; pub const MODULE_NAME: &str = "DTPluginTemplate"; static PLUGIN: OnceLock = OnceLock::new(); +static LOGGER: OnceLock = OnceLock::new(); +static LUA: OnceLock = OnceLock::new(); + +/// A macro to make accessing global statics a little more convenient. +#[macro_export] +macro_rules! global { + ($name:ident) => {{ + if cfg!(debug_assertions) { + $name.get().expect("global has not been initialized") + } else { + unsafe { $name.get().unwrap_unchecked() } + } + }}; +} #[no_mangle] pub extern "C" fn get_name() -> *const c_char { @@ -24,26 +39,25 @@ pub extern "C" fn get_name() -> *const c_char { #[no_mangle] pub extern "C" fn setup_game(get_engine_api: GetApiFunction) { - let plugin = Plugin::new(get_engine_api); + let logger = LOGGER.get_or_init(|| LoggingApi::get(get_engine_api)); + log::set_logger(logger).expect("Failed to set global logger."); + log::set_max_level(log::LevelFilter::Info); + + let _ = LUA.get_or_init(|| LuaApi::get(get_engine_api)); + + let plugin = PLUGIN.get_or_init(Plugin::new); plugin.setup_game(); - PLUGIN - .set(plugin) - .expect("Failed to initalize global plugin object."); } #[no_mangle] pub extern "C" fn shutdown_game() { - // Safety: The engine ensures that `setup_game` was called before this, so `PLUGIN` has been - // initialized. - let plugin = unsafe { PLUGIN.get().unwrap_unchecked() }; + let plugin = global!(PLUGIN); plugin.shutdown_game(); } #[no_mangle] pub extern "C" fn update_game(dt: f32) { - // Safety: The engine ensures that `setup_game` was called before this, so `PLUGIN` has been - // initialized. - let plugin = unsafe { PLUGIN.get().unwrap_unchecked() }; + let plugin = global!(PLUGIN); plugin.update_game(dt); } diff --git a/src/lua.rs b/src/lua.rs new file mode 100644 index 0000000..b4ad22a --- /dev/null +++ b/src/lua.rs @@ -0,0 +1,16 @@ +use crate::stingray_sdk::lua_State; +use crate::{LUA, global}; + +pub extern "C" fn do_something(l: *mut lua_State) -> i32 { + let lua = global!(LUA); + + if let Some(name) = lua.tolstring(l, 1) { + lua.pushstring( + l, + format!("[do_something] Hello from Rust, {}", name.to_string_lossy()), + ); + 1 + } else { + 0 + } +} diff --git a/src/plugin.rs b/src/plugin.rs index ec861eb..9f85d92 100644 --- a/src/plugin.rs +++ b/src/plugin.rs @@ -1,47 +1,23 @@ -use crate::stingray_sdk::{lua_State, GetApiFunction, LoggingApi, LuaApi}; -use crate::{MODULE_NAME, PLUGIN, PLUGIN_NAME}; +use log::info; -pub(crate) struct Plugin { - pub log: LoggingApi, - pub lua: LuaApi, -} +use crate::{LUA, MODULE_NAME, PLUGIN_NAME, global, lua}; -extern "C" fn do_something(l: *mut lua_State) -> i32 { - // Safety: Plugin must have been initialized for this to be registered as module - // function. - let plugin = unsafe { PLUGIN.get().unwrap_unchecked() }; - - if let Some(name) = plugin.lua.tolstring(l, 1) { - plugin.lua.pushstring( - l, - format!("[do_something] Hello from Rust, {}", name.to_string_lossy()), - ); - 1 - } else { - 0 - } -} +pub(crate) struct Plugin {} impl Plugin { - pub fn new(get_engine_api: GetApiFunction) -> Self { - let log = LoggingApi::get(get_engine_api); - let lua = LuaApi::get(get_engine_api); - Self { log, lua } + pub fn new() -> Self { + Self {} } pub fn setup_game(&self) { - self.log.info( - PLUGIN_NAME, - format!("[setup_game] Hello, world! This is {}!", PLUGIN_NAME), - ); + info!("[setup_game] Hello, world! This is {}!", PLUGIN_NAME); - self.lua - .add_module_function(MODULE_NAME, "do_something", do_something); + let lua = global!(LUA); + lua.add_module_function(MODULE_NAME, "do_something", lua::do_something); } pub fn shutdown_game(&self) { - self.log - .info(PLUGIN_NAME, "[shutdown_game] Goodbye, world!"); + info!("[shutdown_game] Goodbye, world!"); } pub fn update_game(&self, _dt: f32) {} diff --git a/src/stingray_sdk.rs b/src/stingray_sdk.rs index 1631c5c..9fde865 100644 --- a/src/stingray_sdk.rs +++ b/src/stingray_sdk.rs @@ -18,6 +18,7 @@ pub use bindings::PluginApi; pub use bindings::PluginApiID; use bindings::lua_CFunction; pub use bindings::lua_State; +use log::Level; impl std::default::Default for PluginApi { fn default() -> Self { @@ -107,6 +108,29 @@ impl LoggingApi { } } +impl log::Log for LoggingApi { + fn enabled(&self, metadata: &log::Metadata) -> bool { + true + } + + fn log(&self, record: &log::Record) { + if !self.enabled(record.metadata()) { + return; + } + + let line = if let Some(s) = record.args().as_str() { + format!("[{}] {}", record.level(), s) + } else { + format!("[{}] {}", record.level(), record.args()) + }; + + self.info(record.target(), line); + } + + // The engine does not expose a method to flush the log + fn flush(&self) {} +} + #[repr(i32)] #[derive(Clone, Copy, Debug, PartialEq, Eq)] pub enum LuaType { From 18300de7f4b2ea7c84a531da83a5c6b2958c142c Mon Sep 17 00:00:00 2001 From: Renovate Date: Thu, 15 May 2025 20:46:19 +0000 Subject: [PATCH 4/8] Update rust Docker tag to v1.87.0 --- Dockerfile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Dockerfile b/Dockerfile index 92019d0..59e2799 100644 --- a/Dockerfile +++ b/Dockerfile @@ -24,7 +24,7 @@ RUN set -eux; \ # And to keep that to a minimum, we still delete the stuff we don't need. rm -rf /root/.xwin-cache; -FROM rust:1.86.0-slim-bullseye AS final +FROM rust:1.87.0-slim-bullseye AS final ARG LLVM_VERSION=18 ENV KEYRINGS=/usr/local/share/keyrings From 1e0ff96220c80fe95d584e0e0247a6a6042d7ead Mon Sep 17 00:00:00 2001 From: Lucas Schwiderski Date: Fri, 30 May 2025 13:21:00 +0200 Subject: [PATCH 5/8] Disable excessive rebase for Renovate --- .renovaterc | 17 ++++++++--------- 1 file changed, 8 insertions(+), 9 deletions(-) diff --git a/.renovaterc b/.renovaterc index b36f3b4..4cf1302 100644 --- a/.renovaterc +++ b/.renovaterc @@ -1,11 +1,10 @@ { - "$schema": "https://docs.renovatebot.com/renovate-schema.json", - "extends": [ - "config:recommended", - ":combinePatchMinorReleases", - ":enableVulnerabilityAlerts", - ":rebaseStalePrs" - ], - "prConcurrentLimit": 10, - "branchPrefix": "renovate/" + "$schema": "https://docs.renovatebot.com/renovate-schema.json", + "extends": [ + "config:recommended", + ":combinePatchMinorReleases", + ":enableVulnerabilityAlerts" + ], + "prConcurrentLimit": 10, + "branchPrefix": "renovate/" } From 6f4a5e90e711468ed765af42bf38d037c5bdbbef Mon Sep 17 00:00:00 2001 From: Renovate Date: Sun, 8 Jun 2025 11:46:27 +0000 Subject: [PATCH 6/8] Update Rust crate bindgen to 0.72.0 --- Cargo.lock | 4 ++-- Cargo.toml | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 4b84ed3..7bfbde7 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -13,9 +13,9 @@ dependencies = [ [[package]] name = "bindgen" -version = "0.71.1" +version = "0.72.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5f58bf3d7db68cfbac37cfc485a8d711e87e064c3d0fe0435b92f7a407f9d6b3" +checksum = "4f72209734318d0b619a5e0f5129918b848c416e122a3c4ce054e03cb87b726f" dependencies = [ "bitflags", "cexpr", diff --git a/Cargo.toml b/Cargo.toml index bb3f2f6..1eda32c 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -10,7 +10,7 @@ libc = "0.2.144" log = { version = "0.4.27", features = ["release_max_level_info"] } [build-dependencies] -bindgen = "0.71.0" +bindgen = "0.72.0" [lib] crate-type = ["cdylib", "lib"] From d5924c386042921b35100edb48307b4c4cee9bf2 Mon Sep 17 00:00:00 2001 From: Renovate Date: Fri, 13 Jun 2025 17:46:26 +0000 Subject: [PATCH 7/8] Update Rust crate libc to v0.2.173 --- Cargo.lock | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 7bfbde7..4b47c0b 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -95,9 +95,9 @@ dependencies = [ [[package]] name = "libc" -version = "0.2.172" +version = "0.2.173" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d750af042f7ef4f724306de029d18836c26c1765a54a6a3f094cbd23a7267ffa" +checksum = "d8cfeafaffdbc32176b64fb251369d52ea9f0a8fbc6f8759edffef7b525d64bb" [[package]] name = "libloading" From c1a18cb61308b3c9b2bab21dcd9e66e9a98399c4 Mon Sep 17 00:00:00 2001 From: Renovate Date: Tue, 17 Jun 2025 18:01:16 +0000 Subject: [PATCH 8/8] Update Rust crate libc to v0.2.174 --- Cargo.lock | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 4b47c0b..229a6fb 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -95,9 +95,9 @@ dependencies = [ [[package]] name = "libc" -version = "0.2.173" +version = "0.2.174" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d8cfeafaffdbc32176b64fb251369d52ea9f0a8fbc6f8759edffef7b525d64bb" +checksum = "1171693293099992e19cddea4e8b849964e9846f4acee11b3948bcc337be8776" [[package]] name = "libloading"