Skip to content

Commit

Permalink
refactor: kcl scripts and bump kclvm to kcl (#564)
Browse files Browse the repository at this point in the history
  • Loading branch information
Peefy committed Jun 5, 2023
1 parent a83255f commit e895ece
Show file tree
Hide file tree
Showing 12 changed files with 363 additions and 49 deletions.
82 changes: 41 additions & 41 deletions internal/scripts/build.sh
Original file line number Diff line number Diff line change
Expand Up @@ -12,45 +12,45 @@ else
fi

prepare_dirs () {
kclvm_install_dir="$topdir/_build/dist/$os/kclvm"
mkdir -p "$kclvm_install_dir/bin"
mkdir -p "$kclvm_install_dir/lib/site-packages"
mkdir -p "$kclvm_install_dir/include"
install_dir="$topdir/_build/dist/$os/kclvm"
mkdir -p "$install_dir/bin"
mkdir -p "$install_dir/lib/site-packages"
mkdir -p "$install_dir/include"
}

prepare_dirs

# Perform the build process.
set -x

# Copy KCLVM.
cp "$topdir/internal/scripts/cli/kcl" $kclvm_install_dir/bin/
cp "$topdir/internal/scripts/cli/kclvm" $kclvm_install_dir/bin/
cp "$topdir/internal/scripts/cli/kcl-plugin" $kclvm_install_dir/bin/
cp "$topdir/internal/scripts/cli/kcl-doc" $kclvm_install_dir/bin/
cp "$topdir/internal/scripts/cli/kcl-test" $kclvm_install_dir/bin/
cp "$topdir/internal/scripts/cli/kcl-lint" $kclvm_install_dir/bin/
cp "$topdir/internal/scripts/cli/kcl-fmt" $kclvm_install_dir/bin/
cp "$topdir/internal/scripts/cli/kcl-vet" $kclvm_install_dir/bin/
chmod +x $kclvm_install_dir/bin/kcl
chmod +x $kclvm_install_dir/bin/kclvm
chmod +x $kclvm_install_dir/bin/kcl-plugin
chmod +x $kclvm_install_dir/bin/kcl-doc
chmod +x $kclvm_install_dir/bin/kcl-test
chmod +x $kclvm_install_dir/bin/kcl-lint
chmod +x $kclvm_install_dir/bin/kcl-fmt
chmod +x $kclvm_install_dir/bin/kcl-vet

if [ -d $kclvm_install_dir/lib/site-packages/kclvm ]; then
rm -rf $kclvm_install_dir/lib/site-packages/kclvm
# Copy kcl scripts
cp "$topdir/internal/scripts/cli/kcl" $install_dir/bin/
cp "$topdir/internal/scripts/cli/kclvm" $install_dir/bin/
cp "$topdir/internal/scripts/cli/kcl-plugin" $install_dir/bin/
cp "$topdir/internal/scripts/cli/kcl-doc" $install_dir/bin/
cp "$topdir/internal/scripts/cli/kcl-test" $install_dir/bin/
cp "$topdir/internal/scripts/cli/kcl-lint" $install_dir/bin/
cp "$topdir/internal/scripts/cli/kcl-fmt" $install_dir/bin/
cp "$topdir/internal/scripts/cli/kcl-vet" $install_dir/bin/
chmod +x $install_dir/bin/kcl
chmod +x $install_dir/bin/kclvm
chmod +x $install_dir/bin/kcl-plugin
chmod +x $install_dir/bin/kcl-doc
chmod +x $install_dir/bin/kcl-test
chmod +x $install_dir/bin/kcl-lint
chmod +x $install_dir/bin/kcl-fmt
chmod +x $install_dir/bin/kcl-vet

if [ -d $install_dir/lib/site-packages/kclvm ]; then
rm -rf $install_dir/lib/site-packages/kclvm
fi

# Install plugins
cp -rf $topdir/plugins $kclvm_install_dir/
cp -rf $topdir/plugins $install_dir/

set +x

# build kclvm
# build kcl

cd $topdir/kclvm
cargo build --release
Expand All @@ -71,39 +71,39 @@ esac
# Copy libkclvm_cli lib

if [ -e $topdir/kclvm/target/release/libkclvm_cli_cdylib.$dll_extension ]; then
touch $kclvm_install_dir/bin/libkclvm_cli_cdylib.$dll_extension
rm $kclvm_install_dir/bin/libkclvm_cli_cdylib.$dll_extension
cp $topdir/kclvm/target/release/libkclvm_cli_cdylib.$dll_extension $kclvm_install_dir/bin/libkclvm_cli_cdylib.$dll_extension
touch $install_dir/bin/libkclvm_cli_cdylib.$dll_extension
rm $install_dir/bin/libkclvm_cli_cdylib.$dll_extension
cp $topdir/kclvm/target/release/libkclvm_cli_cdylib.$dll_extension $install_dir/bin/libkclvm_cli_cdylib.$dll_extension
fi

# build kcl LSP server

cd $topdir/kclvm/tools/src/LSP
cargo build --release

touch $kclvm_install_dir/bin/kcl-language-server
rm $kclvm_install_dir/bin/kcl-language-server
cp $topdir/kclvm/target/release/kcl-language-server $kclvm_install_dir/bin/kcl-language-server
touch $install_dir/bin/kcl-language-server
rm $install_dir/bin/kcl-language-server
cp $topdir/kclvm/target/release/kcl-language-server $install_dir/bin/kcl-language-server


cd $topdir/kclvm_cli
cargo build --release

touch $kclvm_install_dir/bin/kclvm_cli
rm $kclvm_install_dir/bin/kclvm_cli
cp ./target/release/kclvm_cli $kclvm_install_dir/bin/kclvm_cli
touch $install_dir/bin/kclvm_cli
rm $install_dir/bin/kclvm_cli
cp ./target/release/kclvm_cli $install_dir/bin/kclvm_cli


# Copy KCLVM C API header
# Copy kcl C API header
cd $topdir/kclvm/runtime
cp src/_kclvm.h $kclvm_install_dir/include/_kclvm.h
cp src/_kclvm.h $install_dir/include/_kclvm.h

# build kclvm_plugin python module
# build kcl plugin python module
cd $topdir/kclvm/plugin
cp ./kclvm_plugin.py $kclvm_install_dir/lib/site-packages/
cp ./kclvm_runtime.py $kclvm_install_dir/lib/site-packages/
cp ./kclvm_plugin.py $install_dir/lib/site-packages/
cp ./kclvm_runtime.py $install_dir/lib/site-packages/

cd $topdir
# Print the summary.
echo "================ Summary ================"
echo " KCLVM is updated into $kclvm_install_dir"
echo " KCLVM is updated into $install_dir"
94 changes: 94 additions & 0 deletions internal/scripts/python-plugin/build-cpython.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,94 @@
#!/usr/bin/env bash

# Stop on error.
set -e

topdir=$PWD
# Environment
if [ -f "/etc/os-release" ]; then
source /etc/os-release
os=$ID
else
os=$(uname)
fi

prepare_dirs () {
cpython_build_dir="$topdir/_build/build/$os/cpython"
mkdir -p "$cpython_build_dir"
cpython_install_dir="$topdir/_build/python_dist/$os/cpython"
mkdir -p "$cpython_install_dir"
}

# Switch configuration options.
config_option="Default"
if [ "$os" != "" ]; then
config_option=$os
fi

# python version
py_ver_major="3"
py_ver_minor="7"
py_ver_micro="6"

for config in "$config_option"
do
case $config in
"Default" | "centos")
config_envs="LANG=C.UTF-8"
config_options="--enable-optimizations --with-ssl"
echo "$REPLY: The configuration is $config: config_envs=$config_envs config_options=$config_options"
break
;;
"Darwin")
if [ "$sslpath" == "" ]; then
sslpath=$(brew --prefix openssl@1.1)
fi

py_ver_major="3"
py_ver_minor="9"
py_ver_micro="12"

config_envs="LANG=C.UTF-8"
config_options="--enable-optimizations --with-openssl=$sslpath --with-ssl-default-suites=python"
echo "$REPLY: The configuration is $config: config_envs=$config_envs config_options=$config_options"
break
;;
"ubuntu" | "debian" | "Ubuntu" |"Debian" | "Static-Debian" | "Cood1-Debian" | "Cood1Shared-Debian")
config_envs="CFLAGS=-Wno-coverage-mismatch"
config_options="--enable-optimizations --with-ssl"
echo "$REPLY: The configuration is $config: config_envs=$config_envs config_options=$config_options"
break
;;
*) echo "Invalid config option $REPLY:$config"
exit 1
break
;;
esac
done

# py_ver_str="$(python3 -c 'import os; print(os.path.basename(os.path.dirname(os.__file__)))')"
py_ver_str="${py_ver_major}.${py_ver_minor}.${py_ver_micro}"

# wget python
mkdir -p $topdir/_build/3rdparty
wget -P $topdir/_build/3rdparty "https://www.python.org/ftp/python/${py_ver_str}/Python-${py_ver_str}.tgz"
tar zxvf $topdir/_build/3rdparty/Python-${py_ver_str}.tgz -C $topdir/_build/3rdparty

prepare_dirs
prefix_option="--prefix=$cpython_install_dir"
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)"
make -j8 build_all
make -j8 altinstall
set +x

# Print the summary.
echo "================ Summary ================"
echo " CPython is built into $cpython_build_dir"
152 changes: 152 additions & 0 deletions internal/scripts/python-plugin/build-kcl.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,152 @@
#!/usr/bin/env bash

# Stop on error.
set -e

topdir=$PWD
# Environment
if [ -f "/etc/os-release" ]; then
source /etc/os-release
os=$ID
else
os=$(uname)
fi

prepare_dirs () {
cpython_build_dir="$topdir/_build/python_dist/$os/cpython"
kclvm_packages_dir="$topdir/_build/packages"
kcl_install_dir="$topdir/_build/python_dist/$os/kclvm"
mkdir -p "$kcl_install_dir"
mkdir -p "$kclvm_packages_dir"
}

prepare_dirs

# python exe name
py_exe_name="python3.7"
if [ -d "${cpython_build_dir}/lib/python3.9" ]; then
py_exe_name="python3.9"
fi

# py_lib_basename: python3.x
py_lib_basename="python3.7"
if [ -d "${cpython_build_dir}/lib/python3.9" ]; then
py_lib_basename="python3.9"
fi

# Perform the build process.
set -x

# Copy files from CPython.
cd $kcl_install_dir
mkdir -p bin
mkdir -p lib
cp $cpython_build_dir/bin/${py_exe_name} $kcl_install_dir/bin/kclvm
cp -r $cpython_build_dir/lib/${py_lib_basename} $kcl_install_dir/lib/

# Darwin dylib
if [ -e $cpython_build_dir/lib/lib${py_lib_basename}.dylib ]; then
touch $kcl_install_dir/lib/lib${py_lib_basename}.dylib
rm $kcl_install_dir/lib/lib${py_lib_basename}.dylib
mv $cpython_build_dir/lib/lib${py_lib_basename}.dylib $kcl_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 $kcl_install_dir/lib/lib${py_lib_basename}.so
rm $kcl_install_dir/lib/lib${py_lib_basename}.so
mv $cpython_build_dir/lib/lib${py_lib_basename}m.so.1.0 $kcl_install_dir/lib/lib${py_lib_basename}.so
fi
# Windows dll
if [ -e $cpython_build_dir/lib/lib${py_lib_basename}.dll ]; then
touch $kcl_install_dir/lib/lib${py_lib_basename}.dll
rm $kcl_install_dir/lib/lib${py_lib_basename}.dll
mv $cpython_build_dir/lib/lib${py_lib_basename}.dll $kcl_install_dir/lib/lib${py_lib_basename}.dll
fi
cp -r $cpython_build_dir/include $kcl_install_dir/

# Copy KCL Scripts.
scripts_dir="$topdir/internal/scripts/python-plugin/cli"
cp "$scripts_dir/kcl" $kcl_install_dir/bin/
cp "$scripts_dir/kcl-plugin" $kcl_install_dir/bin/
cp "$scripts_dir/kcl-doc" $kcl_install_dir/bin/
cp "$scripts_dir/kcl-test" $kcl_install_dir/bin/
cp "$scripts_dir/kcl-lint" $kcl_install_dir/bin/
cp "$scripts_dir/kcl-fmt" $kcl_install_dir/bin/
cp "$scripts_dir/kcl-vet" $kcl_install_dir/bin/
chmod +x $kcl_install_dir/bin/kcl
chmod +x $kcl_install_dir/bin/kcl-plugin
chmod +x $kcl_install_dir/bin/kcl-doc
chmod +x $kcl_install_dir/bin/kcl-test
chmod +x $kcl_install_dir/bin/kcl-lint
chmod +x $kcl_install_dir/bin/kcl-fmt
chmod +x $kcl_install_dir/bin/kcl-vet

if [ -d $kcl_install_dir/lib/${py_lib_basename}/kclvm ]; then
rm -rf $kcl_install_dir/lib/${py_lib_basename}/kclvm
fi

# Get site-packages.
$kcl_install_dir/bin/kclvm -m pip install --upgrade -U kclvm

# Install plugins
cp -rf $topdir/plugins $kcl_install_dir/

set +x

# build kcl

cd $topdir/kclvm
cargo build --release

# Switch dll file extension according to os.
dll_extension="so"
case $os in
"Default" | "default" | "centos" | "ubuntu" | "debian" | "Ubuntu" |"Debian" | "Static-Debian" | "Cood1-Debian" | "Cood1Shared-Debian")
dll_extension="so"
;;
"Darwin" | "darwin" | "ios" | "macos")
dll_extension="dylib"
;;
*) dll_extension="dll"
;;
esac

# Copy libkclvm_cli lib

if [ -e $topdir/kclvm/target/release/libkclvm_cli_cdylib.$dll_extension ]; then
touch $kcl_install_dir/bin/libkclvm_cli_cdylib.$dll_extension
rm $kcl_install_dir/bin/libkclvm_cli_cdylib.$dll_extension
cp $topdir/kclvm/target/release/libkclvm_cli_cdylib.$dll_extension $kcl_install_dir/bin/libkclvm_cli_cdylib.$dll_extension
fi

# build kcl LSP server

cd $topdir/kclvm/tools/src/LSP
cargo build --release

touch $kcl_install_dir/bin/kcl-language-server
rm $kcl_install_dir/bin/kcl-language-server
cp $topdir/kclvm/target/release/kcl-language-server $kcl_install_dir/bin/kcl-language-server


cd $topdir/kclvm_cli
cargo build --release

touch $kcl_install_dir/bin/kclvm_cli
rm $kcl_install_dir/bin/kclvm_cli
cp ./target/release/kclvm_cli $kcl_install_dir/bin/kclvm_cli


# Copy kcl C API header
cd $topdir/kclvm/runtime
cp src/_kclvm.h $kcl_install_dir/include/_kclvm.h

# build kcl plugin python module
cd $topdir/kclvm/plugin
cp ./kclvm_plugin.py $kcl_install_dir/lib/site-packages/
cp ./kclvm_runtime.py $kcl_install_dir/lib/site-packages/

cd $topdir
# Print the summary.
echo "================ Summary ================"
echo " KCLVM is updated into $kcl_install_dir"
7 changes: 7 additions & 0 deletions internal/scripts/python-plugin/cli/kcl
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
#!/bin/sh

kclvm_path=$(cd `dirname $0`; pwd)/kclvm
install_dir=$(cd `dirname $0`/..; pwd)
export KCLVM_CLI_BIN_PATH=$install_dir/bin
export PATHONPATH=''
$kclvm_path -m kclvm "$@"
7 changes: 7 additions & 0 deletions internal/scripts/python-plugin/cli/kcl-doc
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
#!/bin/sh

kclvm_path=$(cd `dirname $0`; pwd)/kclvm
install_dir=$(cd `dirname $0`/..; pwd)
export KCLVM_CLI_BIN_PATH=$install_dir/bin
export PATHONPATH=''
$kclvm_path -m kclvm.tools.docs "$@"
7 changes: 7 additions & 0 deletions internal/scripts/python-plugin/cli/kcl-fmt
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
#!/bin/sh

kclvm_path=$(cd `dirname $0`; pwd)/kclvm
install_dir=$(cd `dirname $0`/..; pwd)
export KCLVM_CLI_BIN_PATH=$install_dir/bin
export PATHONPATH=''
$kclvm_path -m kclvm.tools.format "$@"
Loading

0 comments on commit e895ece

Please sign in to comment.