From 259c485427a1150e6ae1ccd9d872605c8903bc89 Mon Sep 17 00:00:00 2001 From: "Hui, Chunyang" Date: Tue, 21 Jul 2020 03:54:35 +0000 Subject: [PATCH] Use new build directory arch --- .gitignore | 1 - src/exec/Makefile | 2 +- src/libos/Makefile | 48 +++++++++++++++++++------------- src/pal/Makefile | 30 ++++++++++++-------- src/run/Makefile | 4 +-- src/sgxenv.mk | 8 ++++++ tools/gen_enclave_conf/Makefile | 2 +- tools/occlum | 26 ++++++++--------- tools/protect-integrity/Makefile | 2 +- 9 files changed, 73 insertions(+), 50 deletions(-) diff --git a/.gitignore b/.gitignore index 953bf531..c0908c82 100644 --- a/.gitignore +++ b/.gitignore @@ -3,5 +3,4 @@ *.so *.orig build/ -build_sim/ .DS_Store diff --git a/src/exec/Makefile b/src/exec/Makefile index 15fef4c5..5deafa5e 100644 --- a/src/exec/Makefile +++ b/src/exec/Makefile @@ -2,7 +2,7 @@ include ../sgxenv.mk EXEC_PROTO := occlum_exec.proto SRC_FILES := $(shell find . -type f -name '*.rs') Cargo.toml $(EXEC_PROTO) -RUST_TARGET_DIR := $(BUILD_DIR)/src/exec/cargo-target +RUST_TARGET_DIR := $(OBJ_DIR)/exec/cargo-target RUST_OUT_DIR := $(BUILD_DIR)/bin EXEC_TARGET := $(RUST_OUT_DIR)/*occlum_exec* diff --git a/src/libos/Makefile b/src/libos/Makefile index 0d9a8be0..3458c22b 100644 --- a/src/libos/Makefile +++ b/src/libos/Makefile @@ -46,26 +46,35 @@ LIBOS_LOG ?= error LIBOS_SONAME := libocclum-libos.so.$(MAJOR_VER_NUM) ifneq ($(SGX_MODE), HW) + LIBOS_CORE_LIB_NAME := occlum-libos-core_sim LIBOS_SO_REAL := $(BUILD_DIR)/lib/libocclum-libos_sim.so.$(VERSION_NUM) else + LIBOS_CORE_LIB_NAME := occlum-libos-core LIBOS_SO_REAL := $(BUILD_DIR)/lib/libocclum-libos.so.$(VERSION_NUM) endif -LIBOS_CORE_A := $(BUILD_DIR)/lib/libocclum-libos-core.a -LIBOS_CORE_RS_A := $(BUILD_DIR)/lib/libocclum_libos_core_rs.a +LIBOS_CORE_A := $(OBJ_DIR)/libos/lib/lib$(LIBOS_CORE_LIB_NAME).a +LIBOS_CORE_RS_A := $(OBJ_DIR)/libos/lib/libocclum_libos_core_rs.a # All source code RUST_SRCS := $(wildcard src/*.rs src/*/*.rs src/*/*/*.rs src/*/*/*/*.rs src/*/*/*/*/*.rs) -RUST_TARGET_DIR := $(BUILD_DIR)/src/libos/cargo-target -RUST_OUT_DIR := $(BUILD_DIR)/lib -EDL_C_SRCS := $(addprefix $(BUILD_DIR)/src/libos/,src/Enclave_t.c src/Enclave_t.h) -EDL_C_OBJS := $(addprefix $(BUILD_DIR)/src/libos/,src/Enclave_t.o) +RUST_TARGET_DIR := $(OBJ_DIR)/libos/cargo-target +RUST_OUT_DIR := $(OBJ_DIR)/libos/lib +EDL_C_SRCS := $(addprefix $(OBJ_DIR)/libos/,$(SRC_OBJ)/Enclave_t.c $(SRC_OBJ)/Enclave_t.h) +EDL_C_OBJS := $(addprefix $(OBJ_DIR)/libos/,$(SRC_OBJ)/Enclave_t.o) C_SRCS := $(sort $(wildcard src/*.c src/*/*.c src/*/*/*.c)) -C_OBJS := $(addprefix $(BUILD_DIR)/src/libos/,$(C_SRCS:.c=.o)) CXX_SRCS := $(sort $(wildcard src/*.cpp src/*/*.cpp)) -CXX_OBJS := $(addprefix $(BUILD_DIR)/src/libos/,$(CXX_SRCS:.cpp=.o)) S_SRCS := $(sort $(wildcard src/*.S src/*/*.S src/*/*/*.S)) -S_OBJS := $(addprefix $(BUILD_DIR)/src/libos/,$(S_SRCS:.S=.o)) +C_OBJS := $(addprefix $(OBJ_DIR)/libos/,$(C_SRCS:.c=.o)) +CXX_OBJS := $(addprefix $(OBJ_DIR)/libos/,$(CXX_SRCS:.cpp=.o)) +S_OBJS := $(addprefix $(OBJ_DIR)/libos/,$(S_SRCS:.S=.o)) + +# Object files for simulation mode are stored in libos/src_sim +ifneq ($(SGX_MODE), HW) + C_OBJS := $(subst libos/src,libos/src_sim,$(C_OBJS)) + CXX_OBJS := $(subst libos/src,libos/src_sim,$(CXX_OBJS)) + S_OBJS := $(subst libos/src,libos/src_sim,$(S_OBJS)) +endif ALL_BUILD_SUBDIRS := $(sort $(patsubst %/,%,$(dir $(LIBOS_SO_REAL) $(EDL_C_OBJS) $(C_OBJS) $(CXX_OBJS) $(S_OBJS)) $(RUST_TARGET_DIR) $(RUST_OUT_DIR))) @@ -75,8 +84,8 @@ C_COMMON_FLAGS += -g C_FLAGS := $(SGX_CFLAGS_T) $(C_COMMON_FLAGS) CXX_FLAGS := $(SGX_CXXFLAGS_T) $(C_COMMON_FLAGS) -_Other_Link_Flags := -L$(RUST_SGX_SDK_DIR)/compiler-rt/ -L$(BUILD_DIR)/lib -_Other_Enclave_Libs := -locclum-libos-core -lsgx_tprotected_fs +_Other_Link_Flags := -L$(RUST_SGX_SDK_DIR)/compiler-rt/ -L$(BUILD_DIR)/lib -L$(RUST_OUT_DIR) +_Other_Enclave_Libs := -l$(LIBOS_CORE_LIB_NAME) -lsgx_tprotected_fs LINK_FLAGS := $(SGX_LFLAGS_T) .PHONY: all clean @@ -107,27 +116,26 @@ $(LIBOS_CORE_RS_A): $(RUST_SRCS) @echo "CARGO (debug) => $@" endif -$(BUILD_DIR)/src/libos/src/Enclave_t.o: $(BUILD_DIR)/src/libos/src/Enclave_t.c +$(OBJ_DIR)/libos/$(SRC_OBJ)/Enclave_t.o: $(OBJ_DIR)/libos/$(SRC_OBJ)/Enclave_t.c @$(CC) $(C_FLAGS) -Iinclude/edl -c $< -o $@ @echo "CC <= $@" -$(BUILD_DIR)/src/libos/src/Enclave_t.c: $(SGX_EDGER8R) ../Enclave.edl - @cd $(BUILD_DIR)/src/libos/src && $(SGX_EDGER8R) --trusted $(CUR_DIR)/../Enclave.edl --search-path $(SGX_SDK)/include --search-path $(RUST_SGX_SDK_DIR)/edl +$(OBJ_DIR)/libos/$(SRC_OBJ)/Enclave_t.c: $(SGX_EDGER8R) ../Enclave.edl + @cd $(OBJ_DIR)/libos/$(SRC_OBJ) && $(SGX_EDGER8R) --trusted $(CUR_DIR)/../Enclave.edl --search-path $(SGX_SDK)/include --search-path $(RUST_SGX_SDK_DIR)/edl @echo "GEN <= $@" -$(BUILD_DIR)/src/libos/%.o: %.c +$(C_OBJS):$(OBJ_DIR)/libos/$(SRC_OBJ)/%.o: src/%.c @$(CC) $(C_FLAGS) -c $< -o $@ @echo "CC <= $@" -$(BUILD_DIR)/src/libos/%.o: %.cpp +$(CXX_OBJS): $(OBJ_DIR)/libos/$(SRC_OBJ)/%.o: src/%.cpp @$(CXX) $(CXX_FLAGS) -c $< -o $@ @echo "CXX <= $@" -$(BUILD_DIR)/src/libos/%.o: %.S +$(S_OBJS):$(OBJ_DIR)/libos/$(SRC_OBJ)/%.o: src/%.S @$(CC) $(C_FLAGS) -c $< -o $@ @echo "AS <= $@" clean: - @-$(RM) -f $(LIBOS_SO_REAL) $(LIBOS_CORE_A) $(LIBOS_CORE_RS_A) \ - $(EDL_C_OBJS) $(EDL_C_SRCS) $(C_OBJS) $(CXX_OBJS) $(S_OBJS) - @-$(RM) -rf $(RUST_TARGET_DIR) + @-$(RM) -rf $(OBJ_DIR)/libos + @-$(RM) -f $(LIBOS_SO_REAL) diff --git a/src/pal/Makefile b/src/pal/Makefile index 1d673013..79227f6d 100644 --- a/src/pal/Makefile +++ b/src/pal/Makefile @@ -12,15 +12,22 @@ endif # A dependency on Rust SGX SDK LIBSGX_USTDC_A := $(BUILD_DIR)/lib/libsgx_ustdc.a -EDL_C_SRCS := $(addprefix $(BUILD_DIR)/src/pal/src/,Enclave_u.c Enclave_u.h) -EDL_C_OBJS := $(addprefix $(BUILD_DIR)/src/pal/src/,Enclave_u.o) +EDL_C_SRCS := $(addprefix $(OBJ_DIR)/pal/$(SRC_OBJ)/,Enclave_u.c Enclave_u.h) +EDL_C_OBJS := $(addprefix $(OBJ_DIR)/pal/$(SRC_OBJ)/,Enclave_u.o) C_SRCS := $(sort $(wildcard src/*.c src/*/*.c)) -C_OBJS := $(addprefix $(BUILD_DIR)/src/pal/,$(C_SRCS:.c=.o)) CXX_SRCS := $(sort $(wildcard src/*.cpp src/*/*.cpp)) -CXX_OBJS := $(addprefix $(BUILD_DIR)/src/pal/,$(CXX_SRCS:.cpp=.o)) +C_OBJS := $(addprefix $(OBJ_DIR)/pal/,$(C_SRCS:.c=.o)) +CXX_OBJS := $(addprefix $(OBJ_DIR)/pal/,$(CXX_SRCS:.cpp=.o)) + +# Object files for simulation mode are stored in libos/src_sim +ifneq ($(SGX_MODE), HW) + C_OBJS := $(subst pal/src,pal/src_sim,$(C_OBJS)) + CXX_OBJS := $(subst pal/src,pal/src_sim,$(CXX_OBJS)) +endif + HEADER_FILES := $(sort $(wildcard include/*.h include/*/*.h)) -C_COMMON_FLAGS := -I$(BUILD_DIR)/src/pal/src -Iinclude -Iinclude/edl +C_COMMON_FLAGS := -I$(OBJ_DIR)/pal/$(SRC_OBJ) -Iinclude -Iinclude/edl C_FLAGS := $(C_COMMON_FLAGS) $(SGX_CFLAGS_U) CXX_FLAGS := $(C_COMMON_FLAGS) $(SGX_CXXFLAGS_U) LINK_FLAGS := $(SGX_LFLAGS_U) -shared -L$(RUST_SGX_SDK_DIR)/sgx_ustdc/ -lsgx_ustdc -lsgx_uprotected_fs -ldl @@ -42,22 +49,22 @@ $(LIBOCCLUM_PAL_SO_REAL): $(LIBSGX_USTDC_A) $(EDL_C_OBJS) $(C_OBJS) $(CXX_OBJS) ln -sf $(notdir $(LIBOCCLUM_PAL_SONAME)) $(notdir $(LIBOCCLUM_PAL_SO)) @echo "LINK => $@" -$(BUILD_DIR)/src/pal/src/Enclave_u.o: $(BUILD_DIR)/src/pal/src/Enclave_u.c +$(OBJ_DIR)/pal/$(SRC_OBJ)/Enclave_u.o: $(OBJ_DIR)/pal/$(SRC_OBJ)/Enclave_u.c @$(CC) $(C_FLAGS) -c $< -o $@ @echo "CC <= $@" -$(BUILD_DIR)/src/pal/src/Enclave_u.c: $(SGX_EDGER8R) ../Enclave.edl - @cd $(BUILD_DIR)/src/pal/src && \ +$(OBJ_DIR)/pal/$(SRC_OBJ)/Enclave_u.c: $(SGX_EDGER8R) ../Enclave.edl + @cd $(OBJ_DIR)/pal/$(SRC_OBJ) && \ $(SGX_EDGER8R) --untrusted $(CUR_DIR)/../Enclave.edl \ --search-path $(SGX_SDK)/include \ --search-path $(RUST_SGX_SDK_DIR)/edl/ @echo "GEN <= $@" -$(BUILD_DIR)/src/pal/%.o: %.c +$(OBJ_DIR)/pal/$(SRC_OBJ)/%.o: src/%.c @$(CC) $(C_FLAGS) -c $< -o $@ @echo "CC <= $@" -$(BUILD_DIR)/src/pal/%.o: %.cpp +$(OBJ_DIR)/pal/$(SRC_OBJ)/%.o: src/%.cpp @$(CXX) $(CXX_FLAGS) -c $< -o $@ @echo "CXX <= $@" @@ -73,4 +80,5 @@ format-check: $(C_SRCS) $(CXX_SRCS) $(HEADER_FILES) @$(C_FORMATTER) --check $^ clean: - @-$(RM) -f $(LIBOCCLUM_PAL_SO) $(LIBOCCLUM_PAL_SO_REAL) $(LIBOCCLUM_PAL_SONAME) $(LIBSGX_USTDC_A) $(C_OBJS) $(CXX_OBJS) $(EDL_C_OBJS) $(EDL_C_SRCS) + @-$(RM) -f $(BUILD_DIR)/lib/$(LIBOCCLUM_PAL_SONAME) $(LIBOCCLUM_PAL_SO) $(LIBOCCLUM_PAL_SO_REAL) $(LIBSGX_USTDC_A) + @-$(RM) -rf $(OBJ_DIR)/pal diff --git a/src/run/Makefile b/src/run/Makefile index 1cdadd85..e997606f 100644 --- a/src/run/Makefile +++ b/src/run/Makefile @@ -3,7 +3,7 @@ include ../sgxenv.mk BIN := $(BUILD_DIR)/bin/occlum-run C_SRCS := $(sort $(wildcard *.c)) -C_OBJS := $(addprefix $(BUILD_DIR)/src/run/,$(C_SRCS:.c=.o)) +C_OBJS := $(addprefix $(OBJ_DIR)/run/,$(C_SRCS:.c=.o)) C_COMMON_FLAGS := -I$(PROJECT_DIR)/src/pal/include C_FLAGS := $(C_COMMON_FLAGS) $(SGX_CFLAGS_U) @@ -22,7 +22,7 @@ $(BIN): $(C_OBJS) @$(CC) $^ -o $@ $(LINK_FLAGS) @echo "LINK => $@" -$(BUILD_DIR)/src/run/%.o: %.c +$(OBJ_DIR)/run/%.o: %.c @$(CC) $(C_FLAGS) -c $< -o $@ @echo "CC <= $@" diff --git a/src/sgxenv.mk b/src/sgxenv.mk index 19855cf0..b84d3333 100644 --- a/src/sgxenv.mk +++ b/src/sgxenv.mk @@ -14,6 +14,14 @@ VERSION_NUM = $(MAJOR_VER_NUM).$(MINOR_VER_NUM).$(PATCH_VER_NUM) C_FORMATTER := $(PROJECT_DIR)/tools/c_formatter +# Save code and object file generated during building src +OBJ_DIR := $(PROJECT_DIR)/build/internal/src +ifneq ($(SGX_MODE), HW) + SRC_OBJ := src_sim +else + SRC_OBJ := src +endif + BUILD_DIR := $(PROJECT_DIR)/build # If OCCLUM_RELEASE_BUILD equals to 1, y, or yes, then build in release mode diff --git a/tools/gen_enclave_conf/Makefile b/tools/gen_enclave_conf/Makefile index 345ce4f9..ad120838 100644 --- a/tools/gen_enclave_conf/Makefile +++ b/tools/gen_enclave_conf/Makefile @@ -1,7 +1,7 @@ include ../../src/sgxenv.mk SRC_FILES := $(shell find . -type f -name '*.rs') Cargo.toml -RUST_TARGET_DIR := $(BUILD_DIR)/tools/genconf/cargo-target +RUST_TARGET_DIR := $(BUILD_DIR)/internal/tools/genconf/cargo-target RUST_OUT_DIR := $(BUILD_DIR)/bin TARGET_BINARY := $(RUST_OUT_DIR)/gen_enclave_conf diff --git a/tools/occlum b/tools/occlum index 303799fc..937acfea 100755 --- a/tools/occlum +++ b/tools/occlum @@ -53,7 +53,7 @@ EOF get_conf_root_fs_mac() { LD_LIBRARY_PATH="$SGX_SDK/sdk_libs" \ - "$occlum_dir/$build_dir/bin/occlum-protect-integrity" show-mac "$context_dir/build/mount/__ROOT/metadata" + "$occlum_dir/build/bin/occlum-protect-integrity" show-mac "$context_dir/build/mount/__ROOT/metadata" } get_conf_default_stack_size() { @@ -88,7 +88,7 @@ get_conf_entry_points() { get_occlum_conf_file_mac() { LD_LIBRARY_PATH="$SGX_SDK/sdk_libs" \ - "$occlum_dir/$build_dir/bin/occlum-protect-integrity" show-mac "$context_dir/build/Occlum.json.protected" + "$occlum_dir/build/bin/occlum-protect-integrity" show-mac "$context_dir/build/Occlum.json.protected" } parse_occlum_user_space_size() { @@ -148,7 +148,6 @@ cmd_init() { cmd_build() { check_has_init - build_dir=build pal_lib=libocclum-pal.so libos_lib=libocclum-libos.so @@ -156,7 +155,7 @@ cmd_build() { case "$1" in --sign-key) [ -n "$2" ] && ENCLAVE_SIGN_KEY=$2 ; shift 2 || exit_error "empty signing key path" ;; --sign-tool) [ -n "$2" ] && ENCLAVE_SIGN_TOOL=$2 ; shift 2 || exit_error "empty signing tool path" ;; - --sgx-mode) [[ -n "$2" && "$2" != "HW" ]] && export SGX_MODE=SW && build_dir=build_sim ; shift 2 || exit_error "empty sgx mode";; + --sgx-mode) [[ -n "$2" && "$2" != "HW" ]] && export SGX_MODE=SIM; shift 2 || exit_error "empty sgx mode";; *) exit_error "Unknown option: $1" ;; esac done @@ -181,14 +180,14 @@ cmd_build() { rm -rf run mkdir -p build/bin - ln -s $occlum_dir/$build_dir/bin/occlum-run $context_dir/build/bin/occlum-run + ln -s $occlum_dir/build/bin/occlum-run $context_dir/build/bin/occlum-run mkdir -p build/lib - cp "$occlum_dir/$build_dir/lib/$pal_lib.$occlum_version" build/lib/ + cp "$occlum_dir/build/lib/$pal_lib.$occlum_version" build/lib/ cd build/lib && ln -sf "$pal_lib.$occlum_version" "libocclum-pal.so.$major_ver" && \ ln -sf "libocclum-pal.so.$major_ver" libocclum-pal.so && cd - mkdir -p build/mount/ - cd "$occlum_dir/$build_dir/bin/" && \ + cd "$occlum_dir/build/bin/" && \ LD_LIBRARY_PATH="$SGX_SDK/sdk_libs" ./sefs-cli \ --integrity-only \ "$context_dir/build/mount/__ROOT" \ @@ -203,9 +202,9 @@ cmd_build() { export OCCLUM_CONF_ENV=`get_conf_env` export OCCLUM_CONF_ENTRY_POINTS=`get_conf_entry_points` cd "$context_dir/build" - "$occlum_dir/$build_dir/bin/occlum-gen-default-occlum-json"\ + "$occlum_dir/build/bin/occlum-gen-default-occlum-json"\ > "Occlum.json" - LD_LIBRARY_PATH="$SGX_SDK/sdk_libs" "$occlum_dir/$build_dir/bin/occlum-protect-integrity" protect Occlum.json + LD_LIBRARY_PATH="$SGX_SDK/sdk_libs" "$occlum_dir/build/bin/occlum-protect-integrity" protect Occlum.json export OCCLUM_BUILTIN_CONF_FILE_MAC=`get_occlum_conf_file_mac` echo "EXPORT => OCCLUM_BUILTIN_CONF_FILE_MAC = $OCCLUM_BUILTIN_CONF_FILE_MAC" @@ -213,12 +212,13 @@ cmd_build() { echo "EXPORT => OCCLUM_BUILTIN_VM_USER_SPACE_SIZE = $OCCLUM_BUILTIN_VM_USER_SPACE_SIZE" cd $context_dir/build/lib && \ - cp "$occlum_dir/$build_dir/lib/$libos_lib.$occlum_version" . && ln -sf "$libos_lib.$occlum_version" "libocclum-libos.so.$major_ver" + cp "$occlum_dir/build/lib/$libos_lib.$occlum_version" . && ln -sf "$libos_lib.$occlum_version" "libocclum-libos.so.$major_ver" && \ + ln -sf "libocclum-libos.so.$major_ver" libocclum-libos.so echo -e "$OCCLUM_BUILTIN_CONF_FILE_MAC\c" > temp_mac_file && \ objcopy --update-section .builtin_config=temp_mac_file libocclum-libos.so.$major_ver && \ rm temp_mac_file - $occlum_dir/$build_dir/bin/gen_enclave_conf -i "$working_dir/Occlum.json" -o "$context_dir/build/Enclave.xml" + $occlum_dir/build/bin/gen_enclave_conf -i "$working_dir/Occlum.json" -o "$context_dir/build/Enclave.xml" $ENCLAVE_SIGN_TOOL sign \ -key $ENCLAVE_SIGN_KEY \ @@ -237,8 +237,8 @@ cmd_build() { mkdir -p "$context_dir/run/mount/__ROOT" - ln -s $occlum_dir/$build_dir/bin/occlum_exec_client $context_dir/build/bin/occlum_exec_client - ln -s $occlum_dir/$build_dir/bin/occlum_exec_server $context_dir/build/bin/occlum_exec_server + ln -s $occlum_dir/build/bin/occlum_exec_client $context_dir/build/bin/occlum_exec_client + ln -s $occlum_dir/build/bin/occlum_exec_server $context_dir/build/bin/occlum_exec_server echo "Built the Occlum image and enclave successfully" } diff --git a/tools/protect-integrity/Makefile b/tools/protect-integrity/Makefile index b0201197..4985a05e 100644 --- a/tools/protect-integrity/Makefile +++ b/tools/protect-integrity/Makefile @@ -16,7 +16,7 @@ SGX_DEBUG ?= 1 C_FORMATTER := $(PROJECT_DIR)/tools/c_formatter BUILD_DIR := $(PROJECT_DIR)/build -OBJS_DIR := $(BUILD_DIR)/tools/protect-integrity +OBJS_DIR := $(BUILD_DIR)/internal/tools/protect-integrity ifeq ($(shell getconf LONG_BIT), 32) SGX_ARCH := x86