diff --git a/internal/kclvm_py/scripts/build-cpython.sh b/internal/kclvm_py/scripts/build-cpython.sh index 3843c8c74..f62643804 100755 --- a/internal/kclvm_py/scripts/build-cpython.sh +++ b/internal/kclvm_py/scripts/build-cpython.sh @@ -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)" diff --git a/internal/kclvm_py/scripts/build-kclvm.sh b/internal/kclvm_py/scripts/build-kclvm.sh index 71ef4ff76..0cf46f129 100755 --- a/internal/kclvm_py/scripts/build-kclvm.sh +++ b/internal/kclvm_py/scripts/build-kclvm.sh @@ -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. diff --git a/internal/kclvm_py/scripts/update-kclvm.sh b/internal/kclvm_py/scripts/update-kclvm.sh index b15aafa22..bb5f870a3 100755 --- a/internal/kclvm_py/scripts/update-kclvm.sh +++ b/internal/kclvm_py/scripts/update-kclvm.sh @@ -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 diff --git a/kclvm/capi/src/service/service.rs b/kclvm/capi/src/service/service.rs index 2ca99935e..b1104faaa 100644 --- a/kclvm/capi/src/service/service.rs +++ b/kclvm/capi/src/service/service.rs @@ -83,10 +83,25 @@ impl KclvmService { } let kcl_paths_str = kcl_paths.iter().map(|s| s.as_str()).collect::>(); - + 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() { @@ -94,13 +109,7 @@ impl KclvmService { } } 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; }