blob: 05fad4988e75086a5ee1ff9685f56c0f74af40d7 [file] [log] [blame]
# Licensed to the Apache Software Foundation (ASF) under one
# or more contributor license agreements. See the NOTICE file
# distributed with this work for additional information
# regarding copyright ownership. The ASF licenses this file
# to you under the Apache License, Version 2.0 (the
# "License"); you may not use this file except in compliance
# with the License. You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing,
# software distributed under the License is distributed on an
# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
# KIND, either express or implied. See the License for the
# specific language governing permissions and limitations
# under the License.
######## SGX SDK Settings ########
SGX_SDK ?= /opt/intel/sgxsdk
SGX_MODE ?= HW
SGX_ARCH ?= x64
TOP_DIR := ..
include $(TOP_DIR)/buildenv.mk
ifeq ($(shell getconf LONG_BIT), 32)
SGX_ARCH := x86
else ifeq ($(findstring -m32, $(CXXFLAGS)), -m32)
SGX_ARCH := x86
endif
ifeq ($(SGX_ARCH), x86)
SGX_COMMON_CFLAGS := -m32
SGX_LIBRARY_PATH := $(SGX_SDK)/lib
SGX_BIN_PATH := $(SGX_SDK)/bin/x86
else
SGX_COMMON_CFLAGS := -m64
SGX_LIBRARY_PATH := $(SGX_SDK)/lib64
SGX_BIN_PATH := $(SGX_SDK)/bin/x64
endif
SGX_EDGER8R := $(SGX_BIN_PATH)/sgx_edger8r
ifneq ($(SGX_MODE), HYPER)
SGX_ENCLAVE_SIGNER := $(SGX_BIN_PATH)/sgx_sign
else
SGX_ENCLAVE_SIGNER := $(SGX_BIN_PATH)/sgx_sign_hyper
SGX_EDGER8R_MODE := --sgx-mode $(SGX_MODE)
endif
######## CUSTOM Settings ########
CUSTOM_LIBRARY_PATH := ./lib
CUSTOM_BIN_PATH := ./bin
CUSTOM_EDL_PATH := ../sgx_edl/edl
CUSTOM_COMMON_PATH := ../common
######## EDL Settings ########
Enclave_EDL_Files := enclave/enclave_t.c enclave/enclave_t.h app/enclave_u.c app/enclave_u.h
######## APP Settings ########
App_Rust_Flags := --release
App_SRC_Files := $(shell find app/ -type f -name '*.rs') $(shell find app/ -type f -name 'Cargo.toml')
App_Include_Paths := -I ./app -I$(SGX_SDK)/include -I$(CUSTOM_EDL_PATH)
App_C_Flags := $(CFLAGS) -fPIC -Wno-attributes $(App_Include_Paths)
App_Rust_Path := ./app/target/release
App_Enclave_u_Object := $(CUSTOM_LIBRARY_PATH)/libenclave_u.a
App_Name := $(CUSTOM_BIN_PATH)/test
######## Enclave Settings ########
RustEnclave_Build_Flags := --release
RustEnclave_SRC_Files := $(shell find enclave/ -type f -name '*.rs') $(shell find enclave/ -type f -name 'Cargo.toml')
RustEnclave_Include_Paths := -I$(CUSTOM_COMMON_PATH)/inc -I$(CUSTOM_COMMON_PATH)/inc/tlibc -I$(CUSTOM_EDL_PATH)
RustEnclave_Link_Libs := -L$(CUSTOM_LIBRARY_PATH) -lenclave
RustEnclave_Compile_Flags := $(ENCLAVE_CFLAGS) $(RustEnclave_Include_Paths)
RustEnclave_Link_Flags := -Wl,--no-undefined -nostdlib -nodefaultlibs -nostartfiles \
-Wl,--whole-archive $(RustEnclave_Link_Libs) -Wl,--no-whole-archive \
-Wl,--version-script=enclave/enclave.lds \
$(ENCLAVE_LDFLAGS)
RustEnclave_Out_Path := ./enclave/target/release
RustEnclave_Lib_Name := $(RustEnclave_Out_Path)/libunittest.a
RustEnclave_Name := $(CUSTOM_BIN_PATH)/enclave.so
RustEnclave_Signed_Name := $(CUSTOM_BIN_PATH)/enclave.signed.so
.PHONY: all
all: $(Enclave_EDL_Files) $(App_Name) $(RustEnclave_Signed_Name)
######## EDL Objects ########
$(Enclave_EDL_Files): $(SGX_EDGER8R) enclave/enclave.edl
$(SGX_EDGER8R) $(SGX_EDGER8R_MODE) --trusted enclave/enclave.edl --search-path $(CUSTOM_COMMON_PATH)/inc --search-path $(CUSTOM_EDL_PATH) --trusted-dir enclave
$(SGX_EDGER8R) $(SGX_EDGER8R_MODE) --untrusted enclave/enclave.edl --search-path $(CUSTOM_COMMON_PATH)/inc --search-path $(CUSTOM_EDL_PATH) --untrusted-dir app
@echo "GEN => $(Enclave_EDL_Files)"
######## App Objects ########
app/enclave_u.o: $(Enclave_EDL_Files)
@$(CC) $(App_C_Flags) -c app/enclave_u.c -o $@
$(App_Enclave_u_Object): app/enclave_u.o
@mkdir -p $(CUSTOM_LIBRARY_PATH)
@$(AR) rcsD $@ $^
$(App_Name): $(App_Enclave_u_Object) app
@mkdir -p $(CUSTOM_BIN_PATH)
@cp $(App_Rust_Path)/test $(CUSTOM_BIN_PATH)
@echo "LINK => $@"
######## Enclave Objects ########
enclave/enclave_t.o: $(Enclave_EDL_Files)
@$(CC) $(RustEnclave_Compile_Flags) -c enclave/enclave_t.c -o $@
$(RustEnclave_Name): enclave/enclave_t.o enclave
@mkdir -p $(CUSTOM_LIBRARY_PATH)
@mkdir -p $(CUSTOM_BIN_PATH)
@cp $(RustEnclave_Lib_Name) $(CUSTOM_LIBRARY_PATH)/libenclave.a
@$(CXX) enclave/enclave_t.o -o $@ $(RustEnclave_Link_Flags)
@echo "LINK => $@"
$(RustEnclave_Signed_Name): $(RustEnclave_Name) enclave/config.xml
@$(SGX_ENCLAVE_SIGNER) sign -key enclave/private.pem -enclave $(RustEnclave_Name) -out $@ -config enclave/config.xml
@echo "SIGN => $@"
######## Build App ########
.PHONY: app
app:
@cd app && SGX_SDK=$(SGX_SDK) cargo build $(App_Rust_Flags)
######## Build Enclave ########
.PHONY: enclave
enclave:
@cd enclave && cargo build $(RustEnclave_Build_Flags)
######## Run Unit Test ########
.PHONY: test
test: $(App_Name) $(RustEnclave_Signed_Name)
@cd bin && ./test test
######## Run Benchmark ########
.PHONY: bench
bench: $(App_Name) $(RustEnclave_Signed_Name)
@cd bin && ./test bench
.PHONY: clean
clean:
@rm -f $(App_Name) $(RustEnclave_Name) $(RustEnclave_Signed_Name) enclave/*_t.* app/*_u.*
@cd enclave && cargo clean
@cd app && cargo clean
@rm -rf $(CUSTOM_BIN_PATH) $(CUSTOM_LIBRARY_PATH)