Add an example
This commit is contained in:
parent
3ad2750c09
commit
007d5e813d
|
@ -129,7 +129,7 @@ dependencies = [
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "gmod"
|
name = "gmod"
|
||||||
version = "9.0.0"
|
version = "9.1.0"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"cfg_table",
|
"cfg_table",
|
||||||
"cstr",
|
"cstr",
|
||||||
|
|
|
@ -2,4 +2,7 @@
|
||||||
members = [
|
members = [
|
||||||
"gmod",
|
"gmod",
|
||||||
"gmod-macros"
|
"gmod-macros"
|
||||||
|
]
|
||||||
|
exclude = [
|
||||||
|
"example/my-first-binary-module"
|
||||||
]
|
]
|
40
README.md
40
README.md
|
@ -8,42 +8,4 @@ A swiss army knife for creating binary modules for Garry's Mod in Rust.
|
||||||
|
|
||||||
# Example
|
# Example
|
||||||
|
|
||||||
### rust-toolchain.toml
|
[Click here](https://github.com/WilliamVenner/gmod-rs/tree/master/example/my-first-binary-module) to see an example.
|
||||||
|
|
||||||
Because we're using the [`C-unwind`](https://rust-lang.github.io/rfcs/2797-project-ffi-unwind.html) ABI, this crate must be used on a [Nightly Rust](https://doc.rust-lang.org/book/appendix-07-nightly-rust.html) compiler.
|
|
||||||
|
|
||||||
```toml
|
|
||||||
[toolchain]
|
|
||||||
channel = "nightly"
|
|
||||||
```
|
|
||||||
|
|
||||||
### Cargo.toml
|
|
||||||
|
|
||||||
```toml
|
|
||||||
[lib]
|
|
||||||
crate-type = ["cdylib"]
|
|
||||||
|
|
||||||
[dependencies]
|
|
||||||
gmod = "*"
|
|
||||||
```
|
|
||||||
|
|
||||||
### lib.rs
|
|
||||||
|
|
||||||
```rust
|
|
||||||
#![feature(c_unwind)]
|
|
||||||
|
|
||||||
#[macro_use]
|
|
||||||
extern crate gmod;
|
|
||||||
|
|
||||||
#[gmod13_open]
|
|
||||||
fn gmod13_open(lua: gmod::lua::State) -> i32 {
|
|
||||||
println!("Hello from binary module!");
|
|
||||||
0
|
|
||||||
}
|
|
||||||
|
|
||||||
#[gmod13_close]
|
|
||||||
fn gmod13_close(lua: gmod::lua::State) -> i32 {
|
|
||||||
println!("Goodbye from binary module!");
|
|
||||||
0
|
|
||||||
}
|
|
||||||
```
|
|
|
@ -0,0 +1,11 @@
|
||||||
|
[package]
|
||||||
|
name = "my-first-binary-module"
|
||||||
|
version = "0.1.0"
|
||||||
|
edition = "2021"
|
||||||
|
publish = false
|
||||||
|
|
||||||
|
[lib]
|
||||||
|
crate-type = ["cdylib"]
|
||||||
|
|
||||||
|
[dependencies]
|
||||||
|
gmod = "*"
|
|
@ -0,0 +1,40 @@
|
||||||
|
# Installing Rust
|
||||||
|
|
||||||
|
Installing Rust is as easy as downloading [rustup](https://rustup.rs/) and running it!
|
||||||
|
|
||||||
|
# Building the example
|
||||||
|
|
||||||
|
To build the example in debug mode, simply type in a terminal:
|
||||||
|
|
||||||
|
`cargo build`
|
||||||
|
|
||||||
|
You can find the compiled binary in `target/debug/my_first_binary_module.dll` (or `.so` if you're building on Linux)
|
||||||
|
|
||||||
|
# Using the example in Garry's Mod
|
||||||
|
|
||||||
|
First, rename the compiled binary to `gmsv_my_first_binary_module_PLATFORM.dll` where `PLATFORM` is one of the following:
|
||||||
|
|
||||||
|
| Platform | Description |
|
||||||
|
|:---:|:---:|
|
||||||
|
| `win32` | Windows 32-bit<br>Use this if your server is running Windows and is on the `main` branch of Garry's Mod (this is the default branch.) |
|
||||||
|
| `win64` | Windows 64-bit<br>Use this if your server is running Windows and is on the `x86-64` branch of Garry's Mod. |
|
||||||
|
| `linux` | Linux 32-bit<br>Use this if your server is running Linux and is on the `main` branch of Garry's Mod (this is the default branch.) |
|
||||||
|
| `linux64` | Linux 64-bit<br>Use this if your server is running Linux and is on the `x86-64` branch of Garry's Mod. |
|
||||||
|
|
||||||
|
Then, move the compiled binary to `garrysmod/lua/bin/` on your server. If the `bin` folder doesn't exist, create it.
|
||||||
|
|
||||||
|
Finally, you can load the module from Lua!
|
||||||
|
|
||||||
|
```lua
|
||||||
|
require("my_first_binary_module")
|
||||||
|
```
|
||||||
|
|
||||||
|
# Preparing your module for release
|
||||||
|
|
||||||
|
If you've written a useful module and want to release it to the world, or just on your server, build with the `--release` flag:
|
||||||
|
|
||||||
|
`cargo build --release`
|
||||||
|
|
||||||
|
This enables performance optimization of the compiled binary and removes debug symbols which make the binary huge, whilst taking longer to compile.
|
||||||
|
|
||||||
|
On Linux, you'll want to run the `strip` command on the compiled binary to remove debug symbols.
|
|
@ -0,0 +1,2 @@
|
||||||
|
[toolchain]
|
||||||
|
channel = "nightly"
|
|
@ -0,0 +1,15 @@
|
||||||
|
#![feature(c_unwind)]
|
||||||
|
|
||||||
|
#[macro_use] extern crate gmod;
|
||||||
|
|
||||||
|
#[gmod13_open]
|
||||||
|
fn gmod13_open(lua: gmod::lua::State) -> i32 {
|
||||||
|
println!("Hello from binary module!");
|
||||||
|
0
|
||||||
|
}
|
||||||
|
|
||||||
|
#[gmod13_close]
|
||||||
|
fn gmod13_close(lua: gmod::lua::State) -> i32 {
|
||||||
|
println!("Goodbye from binary module!");
|
||||||
|
0
|
||||||
|
}
|
Loading…
Reference in New Issue