include ../sgxenv.mk DEBUG=1 LIBOS_ENCLAVE := libocclum.signed.so LIBOS_SO := libocclum.so # Link $(LIBOS_A), $(C_OBJS) and all dependencies LIBOS_A := libocclum_rs.a # Built from Rust code RUST_SRCS := $(wildcard src/*.rs src/*/*.rs src/*/*/*.rs) C_SRCS := $(sort $(filter-out src/Enclave_t.c, $(wildcard src/*.c src/*/*.c))) src/Enclave_t.c C_OBJS := $(C_SRCS:.c=.o) S_SRCS := $(wildcard src/*.S src/*/*.S) S_OBJS := $(S_SRCS:.S=.o) EDL_C_SRCS := src/Enclave_t.c src/Enclave_t.h ENCLAVE_CONFIG := Enclave_config.xml ENCLAVE_KEY := Enclave_private.pem C_FLAGS := $(SGX_CFLAGS_T) -fno-stack-protector -I./include/ _Other_Link_Flags := -L$(RUST_SGX_SDK_DIR)/compiler-rt/ -L. _Other_Enclave_Libs := -lcompiler-rt-patch -locclum_rs -lsgx_tprotected_fs LINK_FLAGS := $(SGX_LFLAGS_T) .PHONY: all compiler-rt clean all: $(LIBOS_ENCLAVE) $(LIBOS_ENCLAVE): $(LIBOS_SO) @$(SGX_ENCLAVE_SIGNER) sign -key $(ENCLAVE_KEY) -enclave $^ -out $@ -config $(ENCLAVE_CONFIG) @echo "SIGN => $@" $(LIBOS_SO): compiler-rt $(LIBOS_A) $(C_OBJS) $(S_OBJS) @$(CC) $(C_OBJS) $(S_OBJS) -o $@ $(LINK_FLAGS) @echo "LINK => $@" $(C_OBJS): %.o: %.c @$(CC) $(C_FLAGS) -c $< -o $@ @echo "CC <= $@" $(S_OBJS): %.o: %.S @$(CC) $(C_FLAGS) -c $< -o $@ @echo "CC <= $@" $(EDL_C_SRCS): $(SGX_EDGER8R) ../Enclave.edl @cd src/ && $(SGX_EDGER8R) --trusted ../../Enclave.edl --search-path $(SGX_SDK)/include --search-path $(RUST_SGX_SDK_DIR)/edl/ @echo "GEN <= $(EDL_C_SRCS)" compiler-rt: @$(MAKE) --no-print-directory -C $(RUST_SGX_SDK_DIR)/compiler-rt/ > /dev/null ifeq ($(DEBUG), 1) $(LIBOS_A): $(RUST_SRCS) @RUSTC_BOOTSTRAP=1 cargo build @cp ./target/debug/$(LIBOS_A) $(LIBOS_A) @echo "CARGO (debug) => $(LIBOS_A)" else $(LIBOS_A): $(RUST_SRCS) @RUSTC_BOOTSTRAP=1 cargo build --release @cp ./target/release/$(LIBOS_A) $(LIBOS_A) @echo "CARGO (release) => $(LIBOS_A)" endif clean: @cargo clean @-$(RM) $(LIBOS_ENCLAVE) $(LIBOS_SO) $(LIBOS_A) $(C_OBJS) $(S_OBJS) $(EDL_C_SRCS)