Skip to content

Commit

Permalink
chore: fix fslock build in wasm (#1226)
Browse files Browse the repository at this point in the history
update issue #1217
  • Loading branch information
chai2010 committed Apr 17, 2024
1 parent 5237ecb commit 3d6d6c9
Show file tree
Hide file tree
Showing 10 changed files with 83 additions and 10 deletions.
37 changes: 37 additions & 0 deletions build-wasm32-wasi.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,37 @@
# Build wasm32-wasi target

- Apple M1 should set `AR` and `CC` env
- `export AR=/opt/homebrew/opt/llvm/bin/llvm-ar`
- `export CC=/opt/homebrew/opt/llvm/bin/clang`
- see https://github.com/surrealdb/surrealdb.wasm/issues/41
- `fslock` donot support wasm
- https://github.com/brunoczim/fslock/issues/9
- https://users.rust-lang.org/t/compile-bug-unresolved-import-crate-sys/70719
- Build wasm-wasi target
- `cargo build --target=wasm32-wasi --release`

## build status

- compiler_base ok
- kclvm/macros ok
- kclvm/runtime ok
- kclvm/utils ok
- kclvm/version ok
- kclvm/span ok
- kclvm/error ok
- kclvm/ast ok
- kclvm/lexer ok
- kclvm/ast_pretty ok
- kclvm/config ok
- kclvm/parser ok
- kclvm/sema ok
- kclvm/query ok
- kclvm/loader ok
- kclvm/evaluator ok
- kclvm/compiler ok
- kclvm/driver ok
- kclvm/tools failed
- kclvm/runner failed
- kclvm/cmd failed
- kclvm/api failed

3 changes: 1 addition & 2 deletions kclvm/Cargo.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

1 change: 0 additions & 1 deletion kclvm/config/Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,6 @@ toml = "0.5.8"
ron = "0.7.0"
chrono = "0.4.19"
glob = "0.3.0"
fslock = "0.2.1"
pathdiff = "0.2.1"
anyhow = "1.0"

Expand Down
6 changes: 3 additions & 3 deletions kclvm/config/src/cache.rs
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
extern crate chrono;
use super::modfile::KCL_FILE_SUFFIX;
use anyhow::Result;
use fslock::LockFile;
use kclvm_utils::fslock::open_lock_file;
use kclvm_utils::pkgpath::{parse_external_pkg_name, rm_external_pkg_name};
use md5::{Digest, Md5};
use serde::{de::DeserializeOwned, Serialize};
Expand Down Expand Up @@ -203,7 +203,7 @@ pub fn write_info_cache(
let relative_path = filepath.replacen(root, ".", 1);
let cache_info = get_cache_info(filepath);
let tmp_filename = temp_file(&cache_dir, "");
let mut lock_file = LockFile::open(&format!("{}{}", dst_filename, LOCK_SUFFIX)).unwrap();
let mut lock_file = open_lock_file(&format!("{}{}", dst_filename, LOCK_SUFFIX)).unwrap();
lock_file.lock().unwrap();
let mut cache = read_info_cache(root, target, cache_name);
cache.insert(relative_path, cache_info);
Expand Down Expand Up @@ -265,7 +265,7 @@ pub fn save_data_to_file<T>(dst_filename: &str, tmp_filename: &str, data: T)
where
T: Serialize,
{
let mut lock_file = LockFile::open(&format!("{}{}", dst_filename, LOCK_SUFFIX)).unwrap();
let mut lock_file = open_lock_file(&format!("{}{}", dst_filename, LOCK_SUFFIX)).unwrap();
lock_file.lock().unwrap();
let file = File::create(tmp_filename).unwrap();
ron::ser::to_writer(file, &data).unwrap();
Expand Down
1 change: 0 additions & 1 deletion kclvm/runner/Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,6 @@ glob = "0.3.0"
walkdir = "2"
libc = "0.2.112"
indexmap = "1.0"
fslock = "0.2.1"
libloading = "0.7.3"
threadpool = "1.0"
chrono = "0.4.19"
Expand Down
3 changes: 2 additions & 1 deletion kclvm/runner/src/assembler.rs
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@ use kclvm_ast::ast::{self, Program};
use kclvm_compiler::codegen::{emit_code, EmitOptions, OBJECT_FILE_SUFFIX};
use kclvm_config::cache::{load_pkg_cache, save_pkg_cache, CacheOption, KCL_CACHE_PATH_ENV_VAR};
use kclvm_sema::resolver::scope::ProgramScope;
use kclvm_utils::fslock::open_lock_file;
use std::{
collections::HashMap,
env,
Expand Down Expand Up @@ -330,7 +331,7 @@ impl KclvmAssembler {
let target = self.target.clone();
{
// Locking file for parallel code generation.
let mut file_lock = fslock::LockFile::open(&lock_file_path)?;
let mut file_lock = open_lock_file(&lock_file_path)?;
file_lock.lock()?;

let root = &compile_prog.root;
Expand Down
4 changes: 2 additions & 2 deletions kclvm/runner/src/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,6 @@ use std::{collections::HashMap, ffi::OsStr, path::Path};

use anyhow::{anyhow, bail, Result};
use assembler::KclvmLibAssembler;
use fslock::LockFile;
use kclvm_ast::{
ast::{Module, Program},
MAIN_PKG,
Expand All @@ -14,6 +13,7 @@ use kclvm_query::apply_overrides;
use kclvm_sema::resolver::{
resolve_program, resolve_program_with_opts, scope::ProgramScope, Options,
};
use kclvm_utils::fslock::open_lock_file;
use linker::Command;
#[cfg(feature = "llvm")]
use runner::LibRunner;
Expand Down Expand Up @@ -289,7 +289,7 @@ fn build_with_lock<P: AsRef<Path>>(
.join(format!("pkg.lock"))
.display()
.to_string();
let mut lock_file = LockFile::open(&lock_file)?;
let mut lock_file = open_lock_file(&lock_file)?;
lock_file.lock()?;
let artifact = build(args, program, scope, output);
lock_file.unlock()?;
Expand Down
6 changes: 6 additions & 0 deletions kclvm/utils/Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -7,3 +7,9 @@ edition = "2021"

[dependencies]
anyhow = "1"

[target.'cfg(windows)'.dependencies]
fslock = "0.2.1"

[target.'cfg(unix)'.dependencies]
fslock = "0.2.1"
31 changes: 31 additions & 0 deletions kclvm/utils/src/fslock.rs
Original file line number Diff line number Diff line change
@@ -0,0 +1,31 @@
//! Copyright The KCL Authors. All rights reserved.

#[cfg(unix)]
pub fn open_lock_file(path: &str) -> Result<fslock::LockFile, fslock::Error> {
return fslock::LockFile::open(path);
}

#[cfg(windows)]
pub fn open_lock_file(path: &str) -> Result<fslock::LockFile, fslock::Error> {
return fslock::LockFile::open(path);
}

#[cfg(target_arch = "wasm32")]
pub fn open_lock_file(_path: &str) -> Result<LockFile, std::io::Error> {
Ok(LockFile { _fd: 0 })
}

#[cfg(target_arch = "wasm32")]
pub struct LockFile {
_fd: i32,
}

#[cfg(target_arch = "wasm32")]
impl LockFile {
pub fn lock(&mut self) -> Result<(), std::io::Error> {
Ok(()) // TODO: support wasm32
}
pub fn unlock(&mut self) -> Result<(), std::io::Error> {
Ok(()) // TODO: support wasm32
}
}
1 change: 1 addition & 0 deletions kclvm/utils/src/lib.rs
Original file line number Diff line number Diff line change
@@ -1,2 +1,3 @@
pub mod fslock;
pub mod path;
pub mod pkgpath;

0 comments on commit 3d6d6c9

Please sign in to comment.