Skip to content

Commit

Permalink
add rust extension
Browse files Browse the repository at this point in the history
  • Loading branch information
CppCXY committed Aug 30, 2024
1 parent eb0bf98 commit 0a8ca82
Show file tree
Hide file tree
Showing 10 changed files with 77 additions and 0 deletions.
2 changes: 2 additions & 0 deletions .github/workflows/build.yml
Original file line number Diff line number Diff line change
Expand Up @@ -35,6 +35,8 @@ jobs:
container:
image: ${{ matrix.container }}
steps:
- name: Install Rust
uses: actions-rust-lang/setup-rust-toolchain@v1
- name: Install aarch64-linux-gnu
if: ${{ matrix.platform == 'linux-arm64' && matrix.libc != 'musl' }}
run: |
Expand Down
2 changes: 2 additions & 0 deletions .github/workflows/test.yml
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,8 @@ jobs:
- uses: actions/checkout@v4
with:
submodules: recursive
- name: Install Rust
uses: actions-rust-lang/setup-rust-toolchain@v1
- name: Build for Windows
if: ${{ matrix.target == 'windows' }}
run: .\make.bat
Expand Down
23 changes: 23 additions & 0 deletions make.lua
Original file line number Diff line number Diff line change
Expand Up @@ -15,11 +15,13 @@ if lm.sanitize then
end

local includeCodeFormat = true
local rustExtension = true

require "make.detect_platform"

lm:import "3rd/bee.lua/make.lua"
lm:import "make/code_format.lua"
lm:import "make/rust_lib.lua"

lm:source_set 'lpeglabel' {
rootdir = '3rd',
Expand Down Expand Up @@ -56,6 +58,15 @@ lm:executable "lua-language-server" {

local platform = require 'bee.platform'
local exe = platform.os == 'windows' and ".exe" or ""
local lualsRust = ""
if platform.os == 'windows' then
lualsRust = "luals_rust.dll"
elseif platform.os == 'linux' then
lualsRust = "libluals_rust.so"
elseif platform.os == 'macos' then
lualsRust = "libluals_rust.dylib"
end


lm:copy "copy_lua-language-server" {
inputs = "$bin/lua-language-server" .. exe,
Expand All @@ -67,6 +78,17 @@ lm:copy "copy_bootstrap" {
outputs = "bin/main.lua",
}

lm:build "rust-lib" {
rule = "cargo-build",
inputs = "rustlib",
}

lm:copy "copy_rust-lib" {
deps = { "rust-lib" },
inputs = "rustlib/target/release/" .. lualsRust,
outputs = "bin/" .. lualsRust,
}

lm:msvc_copydll 'copy_vcrt' {
type = "vcrt",
outputs = "bin",
Expand All @@ -77,6 +99,7 @@ lm:phony "all" {
"lua-language-server",
"copy_lua-language-server",
"copy_bootstrap",
rustExtension and "copy_rust-lib" or nil
},
windows = {
deps = {
Expand Down
8 changes: 8 additions & 0 deletions make/rust_lib.lua
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
local lm = require "luamake"

lm:rule "cargo-build" {
args = { "cargo", "build", "--manifest-path", "$in/Cargo.toml", "--release" },
description = "cargo build: $in.",
pool = "console",
}

2 changes: 2 additions & 0 deletions rustlib/.gitignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
/target
/Cargo.lock
11 changes: 11 additions & 0 deletions rustlib/Cargo.toml
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
[package]
name = "luals_rust"
version = "0.1.0"
edition = "2021"

# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
[lib]
crate-type = ["cdylib"]

[dependencies]
mlua = { version = "0.10.0-beta.1", features = ["lua54", "module"] }
13 changes: 13 additions & 0 deletions rustlib/src/lib.rs
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
use mlua::prelude::*;

fn hello(_: &Lua, name: String) -> LuaResult<()> {
println!("hello, {}!", name);
Ok(())
}

#[mlua::lua_module]
fn luals_rust(lua: &Lua) -> LuaResult<LuaTable> {
let exports = lua.create_table()?;
exports.set("hello", lua.create_function(hello)?)?;
Ok(exports)
}
12 changes: 12 additions & 0 deletions script/provider/rust-lib.lua
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
local suc, rust = pcall(require, 'luals_rust')
if not suc then
return
end

local m = {}

function m.hello(str)
return rust.hello(str)
end

return m
1 change: 1 addition & 0 deletions test/basic/init.lua
Original file line number Diff line number Diff line change
@@ -1,2 +1,3 @@
require 'basic.textmerger'
require 'basic.filewatch'
require 'basic.rust'
3 changes: 3 additions & 0 deletions test/basic/rust.lua
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
local m = require "provider.rust-lib"

m.hello("world")

0 comments on commit 0a8ca82

Please sign in to comment.