Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

feat: support call kclvm service by go rpc server #173

Merged
merged 2 commits into from
Aug 31, 2022
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions internal/kclvm_py/scripts/build-cpython.sh
Original file line number Diff line number Diff line change
Expand Up @@ -72,6 +72,7 @@ cpython_source_dir="$topdir/_build/3rdparty/Python-${py_ver_str}"
# Perform the configuration/make/make install process.
set -x
cd $cpython_build_dir
eval $config_envs $cpython_source_dir/configure $prefix_option $config_options "--enable-shared"
eval $config_envs $cpython_source_dir/configure $prefix_option $config_options
# The make -j command may fail on some OS.
# make -j "$(nproc)"
Expand Down
19 changes: 19 additions & 0 deletions internal/kclvm_py/scripts/build-kclvm.sh
Original file line number Diff line number Diff line change
Expand Up @@ -35,6 +35,25 @@ mkdir -p bin
mkdir -p lib
cp $cpython_build_dir/bin/${py_exe_name} $kclvm_install_dir/bin/kclvm
cp -r $cpython_build_dir/lib/${py_lib_basename} $kclvm_install_dir/lib/

# Darwin dylib
if [ -e $cpython_build_dir/lib/lib${py_lib_basename}.dylib ]; then
touch $kclvm_install_dir/lib/lib${py_lib_basename}.dylib
rm $kclvm_install_dir/lib/lib${py_lib_basename}.dylib
mv $cpython_build_dir/lib/lib${py_lib_basename}.dylib $kclvm_install_dir/lib/lib${py_lib_basename}.dylib
fi
# Linux so
if [ -e $cpython_build_dir/lib/lib${py_lib_basename}m.so.1.0 ]; then
touch $kclvm_install_dir/lib/lib${py_lib_basename}.so
rm $kclvm_install_dir/lib/lib${py_lib_basename}.so
mv $cpython_build_dir/lib/lib${py_lib_basename}m.so.1.0 $kclvm_install_dir/lib/lib${py_lib_basename}.so
fi
# Windows dll
if [ -e $cpython_build_dir/lib/lib${py_lib_basename}.dll ]; then
touch $kclvm_install_dir/lib/lib${py_lib_basename}.dll
rm $kclvm_install_dir/lib/lib${py_lib_basename}.dll
mv $cpython_build_dir/lib/lib${py_lib_basename}.dll $kclvm_install_dir/lib/lib${py_lib_basename}.dll
fi
cp -r $cpython_build_dir/include $kclvm_install_dir/

# Copy KCLVM.
Expand Down
31 changes: 30 additions & 1 deletion internal/kclvm_py/scripts/update-kclvm.sh
Original file line number Diff line number Diff line change
Expand Up @@ -117,13 +117,42 @@ if [ -e $topdir/kclvm/target/release/libkclvm.dll ]; then
cp $topdir/kclvm/target/release/libkclvm.dll $kclvm_install_dir/lib/libkclvm_native_shared.dll
fi

#WASM

# WASM
rustup target add wasm32-unknown-unknown
cargo build --release --target wasm32-unknown-unknown
cp $topdir/kclvm/target/wasm32-unknown-unknown/release/libkclvm.a $kclvm_install_dir/lib/libkclvm_wasm32.a
cp src/_kclvm_undefined_wasm.txt $kclvm_install_dir/lib/_kclvm_undefined_wasm.txt

cd $topdir/kclvm/capi
## Native
cargo build --release

# Darwin dylib
if [ -e $topdir/kclvm/target/release/libkclvm_capi.dylib ]; then
touch $kclvm_install_dir/lib/libkclvm_capi.dylib
rm $kclvm_install_dir/lib/libkclvm_capi.dylib
cp $topdir/kclvm/target/release/libkclvm_capi.dylib $kclvm_install_dir/lib/
cp $topdir/kclvm/target/release/libkclvm_capi.dylib $kclvm_install_dir/lib/libkclvm_capi.dylib
fi
# Linux so
if [ -e $topdir/kclvm/target/release/libkclvm_capi.so ]; then
touch $kclvm_install_dir/lib/libkclvm_capi.so
rm $kclvm_install_dir/lib/libkclvm_capi.so
cp $topdir/kclvm/target/release/libkclvm_capi.so $kclvm_install_dir/lib/
cp $topdir/kclvm/target/release/libkclvm_capi.so $kclvm_install_dir/lib/libkclvm_capi.so
fi
# Windows dll
if [ -e $topdir/kclvm/target/release/libkclvm_capi.dll ]; then
touch $kclvm_install_dir/lib/libkclvm_capi.dll
rm $kclvm_install_dir/lib/libkclvm_capi.dll
cp $topdir/kclvm/target/release/libkclvm_capi.dll $kclvm_install_dir/lib/
cp $topdir/kclvm/target/release/libkclvm_capi.dll $kclvm_install_dir/lib/libkclvm_capi.dll
fi


# Copy LLVM runtime and header
cd $topdir/kclvm/runtime
cp src/_kclvm.bc $kclvm_install_dir/include/_kclvm.bc
cp src/_kclvm.h $kclvm_install_dir/include/_kclvm.h

Expand Down
25 changes: 17 additions & 8 deletions kclvm/capi/src/service/service.rs
Original file line number Diff line number Diff line change
Expand Up @@ -83,24 +83,33 @@ impl KclvmService {
}

let kcl_paths_str = kcl_paths.iter().map(|s| s.as_str()).collect::<Vec<&str>>();

let mut result = ExecProgram_Result::default();
let program = load_program(&kcl_paths_str.as_slice(), Some(opts))?;
let start_time = SystemTime::now();
let json_result = kclvm_runner::execute(program, self.plugin_agent, &native_args)?;
let exec_result = kclvm_runner::execute(program, self.plugin_agent, &native_args);
let escape_time = match SystemTime::now().duration_since(start_time) {
Ok(dur) => dur.as_secs_f32(),
Err(err) => return Err(err.to_string()),
};
result.escaped_time = escape_time.to_string();
let json_result = match exec_result {
Ok(res) => res,
Err(res) => {
if res.is_empty() {
return Ok(result);
} else {
return Err(res);
}
}
};
let kcl_val = ValueRef::from_json(&json_result).unwrap();
if let Some(val) = kcl_val.get_by_key("__kcl_PanicInfo__") {
if val.is_truthy() {
return Err(json_result);
}
}
let (json_result, yaml_result) = kcl_val.plan();
let escape_time = match SystemTime::now().duration_since(start_time) {
Ok(dur) => dur.as_secs_f32(),
Err(err) => return Err(err.to_string()),
};
let mut result = ExecProgram_Result::default();
result.json_result = json_result;
result.escaped_time = escape_time.to_string();
if !args.disable_yaml_result {
result.yaml_result = yaml_result;
}
Expand Down