diff options
Diffstat (limited to 'core')
| -rw-r--r-- | core/bindings/lang/clang/Cargo.toml | 7 | ||||
| -rw-r--r-- | core/bindings/lang/clang/Generate.toml | 11 | ||||
| -rw-r--r-- | core/bindings/lang/clang/build.rs | 34 | ||||
| -rw-r--r-- | core/bindings/lang/clang/headers/ngpd_player.h | 39 | ||||
| -rw-r--r-- | core/bindings/lang/clang/headers/nogamepads.h | 48 |
5 files changed, 99 insertions, 40 deletions
diff --git a/core/bindings/lang/clang/Cargo.toml b/core/bindings/lang/clang/Cargo.toml index 34d1fed..e094413 100644 --- a/core/bindings/lang/clang/Cargo.toml +++ b/core/bindings/lang/clang/Cargo.toml @@ -3,10 +3,15 @@ name = "nogamepads-c-bindings" edition = "2024" version.workspace = true +build = "build.rs" + [dependencies] nogamepads-core = { path = "./../../../../core" } libc = "0.2.172" +[build-dependencies] +cbindgen = "0.29.0" + [lib] name = "nogamepads_c" -crate-type = ["cdylib"] +crate-type = ["cdylib", "rlib"] diff --git a/core/bindings/lang/clang/Generate.toml b/core/bindings/lang/clang/Generate.toml new file mode 100644 index 0000000..08d8b00 --- /dev/null +++ b/core/bindings/lang/clang/Generate.toml @@ -0,0 +1,11 @@ +language = "C" +include_guard = "NOGAMEPADS_H" +header = "// Auto generated by cbindgen 0.29.0" +cpp_compat = true + +[parse] +parse_deps = true +include = ["*"] + +[fn] +prefix = "ngp_"
\ No newline at end of file diff --git a/core/bindings/lang/clang/build.rs b/core/bindings/lang/clang/build.rs new file mode 100644 index 0000000..c43ee7f --- /dev/null +++ b/core/bindings/lang/clang/build.rs @@ -0,0 +1,34 @@ +fn main() { + + // Get the project root directory + let manifest_dir = std::env::var("CARGO_MANIFEST_DIR").unwrap(); + let root_path = std::path::Path::new(&manifest_dir); + + // Input configuration file path + let config_path = root_path.join("Generate.toml"); + + // Output directory path (headers folder in the crate directory) + let headers_dir = root_path.join("headers"); + + // Create the headers directory (if it does not exist) + std::fs::create_dir_all(&headers_dir).expect("Failed to create headers directory"); + + // Output file path + let output_file = headers_dir.join("nogamepads.h"); + + // Load configuration from Generate.toml + let config = cbindgen::Config::from_file(&config_path) + .expect("Failed to parse Generate.toml configuration"); + + // Generate header file + cbindgen::Builder::new() + .with_crate(manifest_dir) + .with_config(config) + .generate() + .expect("Failed to generate C header file") + .write_to_file(&output_file); + + println!("cargo:rerun-if-changed={}", config_path.display()); + println!("cargo:rerun-if-changed=src/mycode.rs"); + println!("cargo:rerun-if-changed=build.rs"); +}
\ No newline at end of file diff --git a/core/bindings/lang/clang/headers/ngpd_player.h b/core/bindings/lang/clang/headers/ngpd_player.h deleted file mode 100644 index 00fbe5b..0000000 --- a/core/bindings/lang/clang/headers/ngpd_player.h +++ /dev/null @@ -1,39 +0,0 @@ -#ifndef PLAYER_FFI_H -#define PLAYER_FFI_H - -#include <stdbool.h> -#include <stdint.h> - -typedef struct FfiAccount { - char* id; - char* player_hash; -} FfiAccount; - -typedef struct FfiCustomize { - char* nickname; - int32_t color_hue; - double color_saturation; - double color_value; -} FfiCustomize; - -typedef struct FfiPlayer { - FfiAccount account; - FfiCustomize* customize; -} FfiPlayer; - -#ifdef __cplusplus -extern "C" { -#endif - -FfiPlayer* player_register(const char* id, const char* password); -bool player_check(const FfiPlayer* player, const char* password); -void player_set_nickname(FfiPlayer* player, const char* nickname); -void player_set_hue(FfiPlayer* player, int hue); -void player_set_hsv(FfiPlayer* player, int hue, double saturation, double value); -void player_free(FfiPlayer* player); - -#ifdef __cplusplus -} -#endif - -#endif
\ No newline at end of file diff --git a/core/bindings/lang/clang/headers/nogamepads.h b/core/bindings/lang/clang/headers/nogamepads.h new file mode 100644 index 0000000..f1ac85a --- /dev/null +++ b/core/bindings/lang/clang/headers/nogamepads.h @@ -0,0 +1,48 @@ +// 自动生成的头文件 - 请勿手动编辑 + +#ifndef NOGAMEPADS_H +#define NOGAMEPADS_H + +#include <stdarg.h> +#include <stdbool.h> +#include <stdint.h> +#include <stdlib.h> + +typedef struct FfiAccount { + char *id; + char *player_hash; +} FfiAccount; + +typedef struct FfiCustomize { + char *nickname; + int color_hue; + double color_saturation; + double color_value; +} FfiCustomize; + +typedef struct FfiPlayer { + struct FfiAccount account; + struct FfiCustomize *customize; +} FfiPlayer; + +#ifdef __cplusplus +extern "C" { +#endif // __cplusplus + +ngp_ struct FfiPlayer *player_register(const char *id, const char *password); + +ngp_ bool player_check(const struct FfiPlayer *player, const char *password); + +ngp_ void player_set_nickname(struct FfiPlayer *player, const char *nickname); + +ngp_ void player_set_hue(struct FfiPlayer *player, int hue); + +ngp_ void player_set_hsv(struct FfiPlayer *player, int hue, double saturation, double value); + +ngp_ void player_free(struct FfiPlayer *player); + +#ifdef __cplusplus +} // extern "C" +#endif // __cplusplus + +#endif /* NOGAMEPADS_H */ |
