Make the command line tool more robust

The CLI tool is robust in the sense that it can handle the execution of
init/build/run/gdb commands in any order (as long as the commands are invoked
sequentially, not concurrently).
This commit is contained in:
Tate, Hongliang Tian 2020-03-26 08:08:03 +00:00 committed by tate.thl
parent a7400ca6dc
commit 60b1e2c28d

@ -76,10 +76,30 @@ parse_occlum_user_space_size() {
numfmt --from=iec ${size_with_unit::-1} numfmt --from=iec ${size_with_unit::-1}
} }
check_has_init() {
if [ ! -d "$context_dir" ]; then
echo "Error: the current working directory is not initialized as an Occlum context. Need to run \"occlum init\" first."
exit 1
fi
}
check_has_built() {
check_has_init
if [ ! -d "$context_dir/run/mount/root" ]; then
echo "Error: the Occlum image and enclave are not built yet. Need to run \"occlum build\" first."
exit 1
fi
}
cmd_init() { cmd_init() {
cd "$working_dir" if [ -d "$context_dir" ]; then
mkdir -p .occlum echo "Error: the current working directory has been initialized as an Occlum context"
exit 1
fi
mkdir "$context_dir"
cd "$context_dir" cd "$context_dir"
echo "initialized" > status echo "initialized" > status
@ -108,6 +128,8 @@ cmd_init() {
} }
cmd_build() { cmd_build() {
check_has_init
build_dir=build build_dir=build
while [ -n "$1" ]; do while [ -n "$1" ]; do
@ -135,6 +157,7 @@ cmd_build() {
echo "building" > status echo "building" > status
rm -rf build rm -rf build
rm -rf run
mkdir -p build/bin mkdir -p build/bin
cp "$occlum_dir/$build_dir/bin/occlum-run" build/bin/ cp "$occlum_dir/$build_dir/bin/occlum-run" build/bin/
@ -188,18 +211,20 @@ cmd_build() {
cd "$context_dir" cd "$context_dir"
echo "built" > status echo "built" > status
mkdir -p "$context_dir/run/mount/root"
if [[ -n $SGX_MODE && "$SGX_MODE" != "HW" ]]; then if [[ -n $SGX_MODE && "$SGX_MODE" != "HW" ]]; then
echo "SIM" > .sgx_mode echo "SIM" > .sgx_mode
else else
echo "HW" > .sgx_mode echo "HW" > .sgx_mode
fi fi
mkdir -p "$context_dir/run/mount/root"
echo "Built the Occlum image and enclave successfully" echo "Built the Occlum image and enclave successfully"
} }
cmd_run() { cmd_run() {
check_has_built
SGX_MODE=$(cat $context_dir/.sgx_mode) SGX_MODE=$(cat $context_dir/.sgx_mode)
if [[ -n $SGX_MODE && "$SGX_MODE" != "HW" ]]; then if [[ -n $SGX_MODE && "$SGX_MODE" != "HW" ]]; then
export LD_LIBRARY_PATH="$context_dir/build/lib:$SGX_SDK/sdk_libs/" export LD_LIBRARY_PATH="$context_dir/build/lib:$SGX_SDK/sdk_libs/"
@ -216,6 +241,8 @@ cmd_run() {
} }
cmd_gdb() { cmd_gdb() {
check_has_built
SGX_MODE=$(cat $context_dir/.sgx_mode) SGX_MODE=$(cat $context_dir/.sgx_mode)
if [[ -n $SGX_MODE && "$SGX_MODE" != "HW" ]]; then if [[ -n $SGX_MODE && "$SGX_MODE" != "HW" ]]; then
export LD_LIBRARY_PATH="$context_dir/build/lib:$SGX_SDK/sdk_libs/" export LD_LIBRARY_PATH="$context_dir/build/lib:$SGX_SDK/sdk_libs/"