Add Occlum version for dynamic libraries

This commit is contained in:
Hui, Chunyang 2020-06-18 08:18:16 +00:00
parent f854950416
commit 6909629241
8 changed files with 82 additions and 36 deletions

@ -63,20 +63,29 @@ test:
OCCLUM_PREFIX ?= /opt/occlum OCCLUM_PREFIX ?= /opt/occlum
install: install:
@# Install both libraries for HW mode and SIM mode @# Install both libraries for HW mode and SIM mode
@$(MAKE) --no-print-directory -C src @$(MAKE) SGX_MODE=HW --no-print-directory -C src
@$(MAKE) SGX_MODE=SIM --no-print-directory -C src @$(MAKE) SGX_MODE=SIM --no-print-directory -C src
install -d $(OCCLUM_PREFIX)/build/bin/
install -t $(OCCLUM_PREFIX)/build/bin/ -D build/bin/* @echo "Install libraries for SGX hardware mode ..."
install -d $(OCCLUM_PREFIX)/build/lib/ @mkdir -p $(OCCLUM_PREFIX)/build/bin/
install -t $(OCCLUM_PREFIX)/build/lib/ -D build/lib/* @cp build/bin/* $(OCCLUM_PREFIX)/build/bin
install -d $(OCCLUM_PREFIX)/build_sim/bin/ @mkdir -p $(OCCLUM_PREFIX)/build/lib/
install -t $(OCCLUM_PREFIX)/build_sim/bin/ -D build_sim/bin/* @cp --no-dereference build/lib/* $(OCCLUM_PREFIX)/build/lib/
install -d $(OCCLUM_PREFIX)/build_sim/lib/
install -t $(OCCLUM_PREFIX)/build_sim/lib/ -D build_sim/lib/* @echo "Install libraries for SGX simulation mode ..."
install -d $(OCCLUM_PREFIX)/include/ @mkdir -p $(OCCLUM_PREFIX)/build_sim/bin/
install -t $(OCCLUM_PREFIX)/include/ -m 444 src/pal/include/*.h @cp build_sim/bin/* $(OCCLUM_PREFIX)/build_sim/bin
install -d $(OCCLUM_PREFIX)/etc/template/ @mkdir -p $(OCCLUM_PREFIX)/build_sim/lib/
install -t $(OCCLUM_PREFIX)/etc/template/ -m 444 etc/template/* @cp --no-dereference build_sim/lib/* $(OCCLUM_PREFIX)/build_sim/lib/
@echo "Install headers and miscs ..."
@mkdir -p $(OCCLUM_PREFIX)/include/
@cp -r src/pal/include/*.h $(OCCLUM_PREFIX)/include
@chmod 444 $(OCCLUM_PREFIX)/include/*.h
@mkdir -p $(OCCLUM_PREFIX)/etc/template/
@cp etc/template/* $(OCCLUM_PREFIX)/etc/template
@chmod 444 $(OCCLUM_PREFIX)/etc/template/*
@echo "Installation is done."
format: format:
@$(MAKE) --no-print-directory -C test format @$(MAKE) --no-print-directory -C test format

@ -44,6 +44,8 @@ include ../sgxenv.mk
LIBOS_LOG ?= error LIBOS_LOG ?= error
LIBOS_SO := $(BUILD_DIR)/lib/libocclum-libos.so LIBOS_SO := $(BUILD_DIR)/lib/libocclum-libos.so
LIBOS_SONAME := $(LIBOS_SO).$(MAJOR_VER_NUM)
LIBOS_SO_REAL := $(LIBOS_SO).$(VERSION_NUM)
LIBOS_CORE_A := $(BUILD_DIR)/lib/libocclum-libos-core.a LIBOS_CORE_A := $(BUILD_DIR)/lib/libocclum-libos-core.a
LIBOS_CORE_RS_A := $(BUILD_DIR)/lib/libocclum_libos_core_rs.a LIBOS_CORE_RS_A := $(BUILD_DIR)/lib/libocclum_libos_core_rs.a
@ -60,7 +62,7 @@ CXX_OBJS := $(addprefix $(BUILD_DIR)/src/libos/,$(CXX_SRCS:.cpp=.o))
S_SRCS := $(sort $(wildcard src/*.S src/*/*.S src/*/*/*.S)) S_SRCS := $(sort $(wildcard src/*.S src/*/*.S src/*/*/*.S))
S_OBJS := $(addprefix $(BUILD_DIR)/src/libos/,$(S_SRCS:.S=.o)) S_OBJS := $(addprefix $(BUILD_DIR)/src/libos/,$(S_SRCS:.S=.o))
ALL_BUILD_SUBDIRS := $(sort $(patsubst %/,%,$(dir $(LIBOS_SO) $(EDL_C_OBJS) $(C_OBJS) $(CXX_OBJS) $(S_OBJS)) $(RUST_TARGET_DIR) $(RUST_OUT_DIR))) ALL_BUILD_SUBDIRS := $(sort $(patsubst %/,%,$(dir $(LIBOS_SO_REAL) $(EDL_C_OBJS) $(C_OBJS) $(CXX_OBJS) $(S_OBJS)) $(RUST_TARGET_DIR) $(RUST_OUT_DIR)))
C_COMMON_FLAGS := -fno-stack-protector -I./include/ C_COMMON_FLAGS := -fno-stack-protector -I./include/
# SGX GDB support # SGX GDB support
@ -74,15 +76,16 @@ LINK_FLAGS := $(SGX_LFLAGS_T)
.PHONY: all clean .PHONY: all clean
all: $(ALL_BUILD_SUBDIRS) $(LIBOS_SO) all: $(ALL_BUILD_SUBDIRS) $(LIBOS_SO_REAL)
$(ALL_BUILD_SUBDIRS): $(ALL_BUILD_SUBDIRS):
@mkdir -p $@ @mkdir -p $@
LIBOS_SO_DEPS := $(LIBOS_CORE_A) $(LIBCOMPILER_RT_PATCH_A) LIBOS_SO_DEPS := $(LIBOS_CORE_A) $(LIBCOMPILER_RT_PATCH_A)
$(LIBOS_SO): $(LIBOS_CORE_A) $(LIBCOMPILER_RT_PATCH_A) $(LIBOS_SO_REAL): $(LIBOS_CORE_A) $(LIBCOMPILER_RT_PATCH_A)
@$(CC) $(LIBOS_SO_DEPS) -o $@ $(LINK_FLAGS) @$(CC) $(LIBOS_SO_DEPS) -o $@ $(LINK_FLAGS) -Wl,-soname=$(LIBOS_SONAME)
@cd $(BUILD_DIR)/lib && ln -sf $(notdir $(LIBOS_SO_REAL)) $(notdir $(LIBOS_SONAME))
@echo "LINK => $@" @echo "LINK => $@"
$(LIBOS_CORE_A): $(LIBOS_CORE_RS_A) $(C_OBJS) $(CXX_OBJS) $(S_OBJS) $(EDL_C_OBJS) $(LIBOS_CORE_A): $(LIBOS_CORE_RS_A) $(C_OBJS) $(CXX_OBJS) $(S_OBJS) $(EDL_C_OBJS)
@ -121,6 +124,6 @@ $(BUILD_DIR)/src/libos/%.o: %.S
@echo "AS <= $@" @echo "AS <= $@"
clean: clean:
@-$(RM) -f $(LIBOS_SO) $(LIBOS_CORE_A) $(LIBOS_CORE_RS_A) \ @-$(RM) -f $(LIBOS_SONAME) $(LIBOS_SO_REAL) $(LIBOS_CORE_A) $(LIBOS_CORE_RS_A) \
$(EDL_C_OBJS) $(EDL_C_SRCS) $(C_OBJS) $(CXX_OBJS) $(S_OBJS) $(EDL_C_OBJS) $(EDL_C_SRCS) $(C_OBJS) $(CXX_OBJS) $(S_OBJS)
@-$(RM) -rf $(RUST_TARGET_DIR) @-$(RM) -rf $(RUST_TARGET_DIR)

@ -1,6 +1,8 @@
include ../sgxenv.mk include ../sgxenv.mk
LIBOCCLUM_PAL_SO := $(BUILD_DIR)/lib/libocclum-pal.so LIBOCCLUM_PAL_SO := $(BUILD_DIR)/lib/libocclum-pal.so
LIBOCCLUM_PAL_SONAME := $(LIBOCCLUM_PAL_SO).$(MAJOR_VER_NUM)
LIBOCCLUM_PAL_SO_REAL := $(LIBOCCLUM_PAL_SO).$(VERSION_NUM)
# A dependency on Rust SGX SDK # A dependency on Rust SGX SDK
LIBSGX_USTDC_A := $(BUILD_DIR)/lib/libsgx_ustdc.a LIBSGX_USTDC_A := $(BUILD_DIR)/lib/libsgx_ustdc.a
@ -23,13 +25,15 @@ ALL_BUILD_SUBDIRS := $(sort $(patsubst %/,%,$(dir $(LIBOCCLUM_PAL_SO) $(EDL_C_OB
.PHONY: all format format-check clean .PHONY: all format format-check clean
all: $(ALL_BUILD_SUBDIRS) $(LIBOCCLUM_PAL_SO) all: $(ALL_BUILD_SUBDIRS) $(LIBOCCLUM_PAL_SO_REAL)
$(ALL_BUILD_SUBDIRS): $(ALL_BUILD_SUBDIRS):
@mkdir -p $@ @mkdir -p $@
$(LIBOCCLUM_PAL_SO): $(LIBSGX_USTDC_A) $(EDL_C_OBJS) $(C_OBJS) $(CXX_OBJS) $(LIBOCCLUM_PAL_SO_REAL): $(LIBSGX_USTDC_A) $(EDL_C_OBJS) $(C_OBJS) $(CXX_OBJS)
@$(CXX) $^ -o $@ $(LINK_FLAGS) @$(CXX) $^ -o $@ $(LINK_FLAGS) -Wl,-soname=$(LIBOCCLUM_PAL_SONAME)
@cd $(BUILD_DIR)/lib && ln -sf $(notdir $(LIBOCCLUM_PAL_SO_REAL)) $(notdir $(LIBOCCLUM_PAL_SONAME)) && \
ln -sf $(notdir $(LIBOCCLUM_PAL_SONAME)) $(notdir $(LIBOCCLUM_PAL_SO))
@echo "LINK => $@" @echo "LINK => $@"
$(BUILD_DIR)/src/pal/src/Enclave_u.o: $(BUILD_DIR)/src/pal/src/Enclave_u.c $(BUILD_DIR)/src/pal/src/Enclave_u.o: $(BUILD_DIR)/src/pal/src/Enclave_u.c
@ -63,4 +67,4 @@ format-check: $(C_SRCS) $(CXX_SRCS) $(HEADER_FILES)
@$(C_FORMATTER) --check $^ @$(C_FORMATTER) --check $^
clean: clean:
@-$(RM) -f $(LIBOCCLUM_PAL_SO) $(LIBSGX_USTDC_A) $(C_OBJS) $(CXX_OBJS) $(EDL_C_OBJS) $(EDL_C_SRCS) @-$(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)

@ -0,0 +1,14 @@
#ifndef _OCCLUM_VERSION_H_
#define _OCCLUM_VERSION_H_
#define OCCLUM_MAJOR_VERSION 0
#define OCCLUM_MINOR_VERSION 13
#define OCCLUM_PATCH_VERSION 0
#define STRINGIZE_PRE(X) #X
#define STRINGIZE(X) STRINGIZE_PRE(X)
#define OCCLUM_VERSION_NUM_STR STRINGIZE(OCCLUM_MAJOR_VERSION) "." \
STRINGIZE(OCCLUM_MAJOR_VERSION) "." STRINGIZE(OCCLUM_PATCH_VERSION)
#endif

@ -7,6 +7,11 @@ SGX_SDK ?= /opt/intel/sgxsdk
SGX_MODE ?= HW SGX_MODE ?= HW
SGX_ARCH ?= x64 SGX_ARCH ?= x64
MAJOR_VER_NUM = $(shell grep '\#define OCCLUM_MAJOR_VERSION' $(PROJECT_DIR)/src/pal/include/occlum_version.h | awk '{print $$3}')
MINOR_VER_NUM = $(shell grep '\#define OCCLUM_MINOR_VERSION' $(PROJECT_DIR)/src/pal/include/occlum_version.h | awk '{print $$3}')
PATCH_VER_NUM = $(shell grep '\#define OCCLUM_PATCH_VERSION' $(PROJECT_DIR)/src/pal/include/occlum_version.h | awk '{print $$3}')
VERSION_NUM = $(MAJOR_VER_NUM).$(MINOR_VER_NUM).$(PATCH_VER_NUM)
C_FORMATTER := $(PROJECT_DIR)/tools/c_formatter C_FORMATTER := $(PROJECT_DIR)/tools/c_formatter
ifneq ($(SGX_MODE), HW) ifneq ($(SGX_MODE), HW)

@ -2,6 +2,7 @@
this_dir="$( cd "$( dirname "${BASH_SOURCE[0]}" )" >/dev/null 2>&1 && pwd )" this_dir="$( cd "$( dirname "${BASH_SOURCE[0]}" )" >/dev/null 2>&1 && pwd )"
occlum_dir="$( cd "$( dirname "$this_dir/../../../" )" >/dev/null 2>&1 && pwd )" occlum_dir="$( cd "$( dirname "$this_dir/../../../" )" >/dev/null 2>&1 && pwd )"
occlum_major_ver=0
if [ -z $OCCLUM_INSTANCE_DIR ];then if [ -z $OCCLUM_INSTANCE_DIR ];then
OCCLUM_INSTANCE_DIR=".occlum" OCCLUM_INSTANCE_DIR=".occlum"
@ -169,7 +170,7 @@ cmd_build() {
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/
mkdir -p build/lib mkdir -p build/lib
cp "$occlum_dir/$build_dir/lib/libocclum-pal.so" build/lib/ cp "$occlum_dir/$build_dir/lib/libocclum-pal.so.$occlum_major_ver" build/lib/
chmod 531 -R $working_dir/image/bin chmod 531 -R $working_dir/image/bin
chmod 531 -R $working_dir/image/lib chmod 531 -R $working_dir/image/lib
@ -199,9 +200,9 @@ cmd_build() {
echo "EXPORT => OCCLUM_BUILTIN_VM_USER_SPACE_SIZE = $OCCLUM_BUILTIN_VM_USER_SPACE_SIZE" echo "EXPORT => OCCLUM_BUILTIN_VM_USER_SPACE_SIZE = $OCCLUM_BUILTIN_VM_USER_SPACE_SIZE"
cd $context_dir/build/lib && \ cd $context_dir/build/lib && \
cp "$occlum_dir/$build_dir/lib/libocclum-libos.so" . cp "$occlum_dir/$build_dir/lib/libocclum-libos.so.$occlum_major_ver" .
echo -e "$OCCLUM_BUILTIN_CONF_FILE_MAC\c" > temp_mac_file && \ echo -e "$OCCLUM_BUILTIN_CONF_FILE_MAC\c" > temp_mac_file && \
objcopy --update-section .builtin_config=temp_mac_file libocclum-libos.so && \ objcopy --update-section .builtin_config=temp_mac_file libocclum-libos.so.$occlum_major_ver && \
rm temp_mac_file 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_dir/bin/gen_enclave_conf -i "$working_dir/Occlum.json" -o "$context_dir/build/Enclave.xml"
@ -209,7 +210,7 @@ cmd_build() {
$ENCLAVE_SIGN_TOOL sign \ $ENCLAVE_SIGN_TOOL sign \
-key $ENCLAVE_SIGN_KEY \ -key $ENCLAVE_SIGN_KEY \
-config "$context_dir/build/Enclave.xml" \ -config "$context_dir/build/Enclave.xml" \
-enclave "$context_dir/build/lib/libocclum-libos.so" \ -enclave "$context_dir/build/lib/libocclum-libos.so.$occlum_major_ver" \
-out "$context_dir/build/lib/libocclum-libos.signed.so" -out "$context_dir/build/lib/libocclum-libos.signed.so"
rm -f "$context_dir/build/Enclave.xml" rm -f "$context_dir/build/Enclave.xml"
cd "$context_dir" cd "$context_dir"

@ -16,9 +16,11 @@
#include <sgx_error.h> #include <sgx_error.h>
#include <sgx_urts.h> #include <sgx_urts.h>
#include "../../../src/pal/include/occlum_version.h"
#define MAX_PATH FILENAME_MAX #define MAX_PATH FILENAME_MAX
#define TOKEN_FILENAME "enclave.token" #define TOKEN_FILENAME "enclave.token"
#define ENCLAVE_FILENAME "occlum-protect-integrity.signed.so" #define ENCLAVE_FILENAME "occlum-protect-integrity.signed.so." STRINGIZE(OCCLUM_MAJOR_VERSION)
// ========================================================================== // ==========================================================================
// Enclave Initialization // Enclave Initialization

@ -3,6 +3,11 @@
CUR_DIR := $(shell dirname $(realpath $(lastword $(MAKEFILE_LIST)))) CUR_DIR := $(shell dirname $(realpath $(lastword $(MAKEFILE_LIST))))
PROJECT_DIR := $(realpath $(CUR_DIR)/../../) PROJECT_DIR := $(realpath $(CUR_DIR)/../../)
MAJOR_VER_NUM = $(shell grep '\#define OCCLUM_MAJOR_VERSION' $(PROJECT_DIR)/src/pal/include/occlum_version.h | awk '{print $$3}')
MINOR_VER_NUM = $(shell grep '\#define OCCLUM_MINOR_VERSION' $(PROJECT_DIR)/src/pal/include/occlum_version.h | awk '{print $$3}')
PATCH_VER_NUM = $(shell grep '\#define OCCLUM_PATCH_VERSION' $(PROJECT_DIR)/src/pal/include/occlum_version.h | awk '{print $$3}')
VERSION_NUM = $(MAJOR_VER_NUM).$(MINOR_VER_NUM).$(PATCH_VER_NUM)
SGX_SDK ?= /opt/intel/sgxsdk SGX_SDK ?= /opt/intel/sgxsdk
SGX_MODE ?= HW SGX_MODE ?= HW
SGX_ARCH ?= x64 SGX_ARCH ?= x64
@ -130,7 +135,9 @@ ENCLAVE_CPP_OBJS := $(addprefix $(OBJS_DIR)/,$(ENCLAVE_CPP_FILES:.cpp=.o))
ENCLAVE_OBJS := $(ENCLAVE_C_OBJS) $(ENCLAVE_CPP_OBJS) ENCLAVE_OBJS := $(ENCLAVE_C_OBJS) $(ENCLAVE_CPP_OBJS)
ENCLAVE_NAME := $(BUILD_DIR)/lib/occlum-protect-integrity.so ENCLAVE_NAME := $(BUILD_DIR)/lib/occlum-protect-integrity.so
SIGNED_ENCLAVE_NAME := $(BUILD_DIR)/lib/occlum-protect-integrity.signed.so ENCLAVE_REAL_NAME := $(ENCLAVE_NAME).$(VERSION_NUM)
SIGNED_ENCLAVE_NAME := $(BUILD_DIR)/lib/occlum-protect-integrity.signed.so.$(VERSION_NUM)
SIGNED_ENCLAVE_SONAME := $(BUILD_DIR)/lib/occlum-protect-integrity.signed.so.$(MAJOR_VER_NUM) # used for soft link
ENCLAVE_CONFIG_FILE := Enclave/Enclave.config.xml ENCLAVE_CONFIG_FILE := Enclave/Enclave.config.xml
ALL_BUILD_SUBDIRS := $(sort $(patsubst %/,%,$(dir $(APP_NAME) $(SIGNED_ENCLAVE_NAME) $(ENCLAVE_OBJS) $(APP_OBJS)))) ALL_BUILD_SUBDIRS := $(sort $(patsubst %/,%,$(dir $(APP_NAME) $(SIGNED_ENCLAVE_NAME) $(ENCLAVE_OBJS) $(APP_OBJS))))
@ -147,16 +154,16 @@ endif
.PHONY: all test format format-check clean .PHONY: all test format format-check clean
ifeq ($(BUILD_MODE), HW_RELEASE) ifeq ($(BUILD_MODE), HW_RELEASE)
all: $(APP_NAME) $(ENCLAVE_NAME) all: $(APP_NAME) $(ENCLAVE_REAL_NAME)
@echo "The project has been built in release hardware mode." @echo "The project has been built in release hardware mode."
@echo "Please sign the $(ENCLAVE_NAME) first with your signing key before you run the $(APP_NAME) to launch and access the enclave." @echo "Please sign the $(ENCLAVE_REAL_NAME) first with your signing key before you run the $(APP_NAME) to launch and access the enclave."
@echo "To sign the enclave use the command:" @echo "To sign the enclave use the command:"
@echo " $(SGX_ENCLAVE_SIGNER) sign -key <your key> -enclave $(ENCLAVE_NAME) -out <$(SIGNED_ENCLAVE_NAME)> -config $(ENCLAVE_CONFIG_FILE)" @echo " $(SGX_ENCLAVE_SIGNER) sign -key <your key> -enclave $(ENCLAVE_REAL_NAME) -out <$(SIGNED_ENCLAVE_NAME)> -config $(ENCLAVE_CONFIG_FILE)"
@echo "You can also sign the enclave using an external signing tool." @echo "You can also sign the enclave using an external signing tool."
@echo "To build the project in simulation mode set SGX_MODE=SIM. To build the project in prerelease mode set SGX_PRERELEASE=1 and SGX_MODE=HW." @echo "To build the project in simulation mode set SGX_MODE=SIM. To build the project in prerelease mode set SGX_PRERELEASE=1 and SGX_MODE=HW."
else else
all: $(ALL_BUILD_SUBDIRS) $(APP_NAME) $(SIGNED_ENCLAVE_NAME) all: $(ALL_BUILD_SUBDIRS) $(APP_NAME) $(SIGNED_ENCLAVE_SONAME)
endif endif
@ -204,12 +211,13 @@ $(OBJS_DIR)/Enclave/%.o: Enclave/%.c
@$(CC) $(ENCLAVE_C_FLAGS) -c $< -o $@ @$(CC) $(ENCLAVE_C_FLAGS) -c $< -o $@
@echo "CC <= $@" @echo "CC <= $@"
$(ENCLAVE_NAME): $(ENCLAVE_OBJS) $(ENCLAVE_REAL_NAME): $(ENCLAVE_OBJS)
@$(CXX) $^ -o $@ $(ENCLAVE_LINK_FLAGS) @$(CXX) $^ -o $@ $(ENCLAVE_LINK_FLAGS)
@echo "LINK => $@" @echo "LINK => $@"
$(SIGNED_ENCLAVE_NAME): $(ENCLAVE_NAME) $(SIGNED_ENCLAVE_SONAME): $(ENCLAVE_REAL_NAME)
@$(SGX_ENCLAVE_SIGNER) sign -key Enclave/Enclave_private.pem -enclave $(ENCLAVE_NAME) -out $@ -config $(ENCLAVE_CONFIG_FILE) @$(SGX_ENCLAVE_SIGNER) sign -key Enclave/Enclave_private.pem -enclave $(ENCLAVE_REAL_NAME) -out $(SIGNED_ENCLAVE_NAME) -config $(ENCLAVE_CONFIG_FILE)
@cd $(BUILD_DIR)/lib && ln -sf $(notdir $(SIGNED_ENCLAVE_NAME)) $(notdir $(SIGNED_ENCLAVE_SONAME))
@echo "SIGN => $@" @echo "SIGN => $@"
test: all random.txt test: all random.txt
@ -231,4 +239,4 @@ format-check: $(APP_HEADER_FILES) $(APP_CPP_FILES) $(ENCLAVE_HEADER_FILES) $(ENC
clean: clean:
@rm -f $(APP_NAME) $(ENCLAVE_NAME) $(SIGNED_ENCLAVE_NAME) $(APP_OBJS) $(OBJS_DIR)/App/Enclave_u.* $(ENCLAVE_OBJS) $(OBJS_DIR)/Enclave/Enclave_t.* *.test.txt random.txt* @rm -f $(APP_NAME) $(ENCLAVE_REAL_NAME) $(SIGNED_ENCLAVE_NAME) $(SIGNED_ENCLAVE_SONAME) $(APP_OBJS) $(OBJS_DIR)/App/Enclave_u.* $(ENCLAVE_OBJS) $(OBJS_DIR)/Enclave/Enclave_t.* *.test.txt random.txt*