| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287 | ## Copyright (C) 2011-2017 Intel Corporation. All rights reserved.## Redistribution and use in source and binary forms, with or without# modification, are permitted provided that the following conditions# are met:##   * Redistributions of source code must retain the above copyright#     notice, this list of conditions and the following disclaimer.#   * Redistributions in binary form must reproduce the above copyright#     notice, this list of conditions and the following disclaimer in#     the documentation and/or other materials provided with the#     distribution.#   * Neither the name of Intel Corporation nor the names of its#     contributors may be used to endorse or promote products derived#     from this software without specific prior written permission.## THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.########## SGX SDK Settings ########SGX_SDK := /home/m2mazmud/sgx2.1/sgxsdkSGX_MODE := HWSGX_ARCH := x64SGX_DEBUG := 1ifeq ($(shell getconf LONG_BIT), 32)	SGX_ARCH := x86else ifeq ($(findstring -m32, $(CXXFLAGS)), -m32)	SGX_ARCH := x86endififeq ($(SGX_ARCH), x86)	SGX_COMMON_CFLAGS := -m32	SGX_LIBRARY_PATH := $(SGX_SDK)/lib	SGX_ENCLAVE_SIGNER := $(SGX_SDK)/bin/x86/sgx_sign	SGX_EDGER8R := $(SGX_SDK)/bin/x86/sgx_edger8relse	SGX_COMMON_CFLAGS := -m64	SGX_LIBRARY_PATH := $(SGX_SDK)/lib64	SGX_ENCLAVE_SIGNER := $(SGX_SDK)/bin/x64/sgx_sign	SGX_EDGER8R := $(SGX_SDK)/bin/x64/sgx_edger8rendififeq ($(SGX_DEBUG), 1)ifeq ($(SGX_PRERELEASE), 1)$(error Cannot set SGX_DEBUG and SGX_PRERELEASE at the same time!!)endifendififeq ($(SGX_DEBUG), 1)	SGX_COMMON_CFLAGS += -O0 -gelse	SGX_COMMON_CFLAGS += -O2endif######## Library Settings #########PHPTrust_Lib_Name := libPHPLocalAttestation_Trusted.a#PHPTrustLib_Cpp_Files := $(wildcard PHPLocalAttestationCode/*.cpp)#PHPTrustLib_Cpp_Objects := $(PHPTrustLib_Cpp_Files:.cpp=.o)#PHPTrustLib_Include_Paths := -I$(SGX_SDK)/include -I$(SGX_SDK)/include/tlibc -I$(SGX_SDK)/include/libcxx -I$(SGX_SDK)/include/epid -I./Include#PHPTrustLib_Compile_Flags := $(SGX_COMMON_CFLAGS) -nostdinc -fvisibility=hidden -fpie -fstack-protector  $(TrustLib_Include_Paths)#PHPTrustLib_Compile_Cxx_Flags :=  -std=c++11 -nostdinc++Trust_Lib_Name := libLocalAttestation_Trusted.aTrustLib_Cpp_Files := $(wildcard LocalAttestationCode/*.cpp)TrustLib_Cpp_Objects := $(TrustLib_Cpp_Files:.cpp=.o)TrustLib_Include_Paths := -I$(SGX_SDK)/include -I$(SGX_SDK)/include/tlibc -I$(SGX_SDK)/include/libcxx -I$(SGX_SDK)/include/epid -I./IncludeTrustLib_Compile_Flags := $(SGX_COMMON_CFLAGS) -nostdinc -fvisibility=hidden -fpie -fstack-protector  $(TrustLib_Include_Paths) -Wall  TrustLib_Compile_Cxx_Flags :=  -std=c++11 -nostdinc++#UnTrustLib_Name := libLocalAttestation_unTrusted.a#UnTrustLib_Cpp_Files := $(wildcard Untrusted_LocalAttestation/*.cpp)#UnTrustLib_Cpp_Objects := $(UnTrustLib_Cpp_Files:.cpp=.o)#UnTrustLib_Include_Paths := -I$(SGX_SDK)/include -I$(SGX_SDK)/include/ippcp -I./Include -I./LocalAttestationCode#UnTrustLib_Compile_Flags := $(SGX_COMMON_CFLAGS) -fPIC -Wno-attributes -std=c++11 $(UnTrustLib_Include_Paths)######## App Settings ########ifneq ($(SGX_MODE), HW)	Urts_Library_Name := sgx_urts_simelse	Urts_Library_Name := sgx_urtsendifApp_Cpp_Files := $(wildcard App/*.cpp)App_Include_Paths := -I$(SGX_SDK)/include -I$(SGX_SDK)/include/ippcp -I./Include -I./LocalAttestationCodeApp_Compile_Flags := $(SGX_COMMON_CFLAGS) -fPIC -Wno-attributes $(App_Include_Paths) -Wall # Three configuration modes - Debug, prerelease, release#   Debug - Macro DEBUG enabled.#   Prerelease - Macro NDEBUG and EDEBUG enabled.#   Release - Macro NDEBUG enabled.ifeq ($(SGX_DEBUG), 1)	App_Compile_Flags += -DDEBUG -UNDEBUG -UEDEBUGelse ifeq ($(SGX_PRERELEASE), 1)	App_Compile_Flags += -DNDEBUG -DEDEBUG -UDEBUGelse	App_Compile_Flags += -DNDEBUG -UEDEBUG -UDEBUGendifApp_Link_Flags := $(SGX_COMMON_CFLAGS) -L$(SGX_LIBRARY_PATH) -l$(Urts_Library_Name) -L. -lpthread -lprotobufifneq ($(SGX_MODE), HW)	App_Link_Flags += -lsgx_uae_service_simelse	App_Link_Flags += -lsgx_uae_serviceendifApp_Cpp_Objects := App/App.o App/systemLA.o App/protobufLAInitiator.o App/protobufSgxLATransformsInitiator.o App/dhmsgs.pb.o #$(App_Cpp_Files:.cpp=.o)App_Name := app######## Enclave Settings ########Decryptor_Version_Script := Decryptor/Decryptor.ldsifneq ($(SGX_MODE), HW)	Trts_Library_Name := sgx_trts_sim	Service_Library_Name := sgx_tservice_simelse	Trts_Library_Name := sgx_trts	Service_Library_Name := sgx_tserviceendifCrypto_Library_Name := sgx_tcryptoEnclave_Cpp_Files_2 := $(wildcard Decryptor/*.cpp)Enclave_Include_Paths := -I$(SGX_SDK)/include -I$(SGX_SDK)/include/tlibc -I$(SGX_SDK)/include/libcxx -I./LocalAttestationCode -I./IncludeCC_BELOW_4_9 := $(shell expr "`$(CC) -dumpversion`" \< "4.9")ifeq ($(CC_BELOW_4_9), 1)	Enclave_Compile_Flags := $(SGX_COMMON_CFLAGS) -nostdinc -fvisibility=hidden -fpie -ffunction-sections -fdata-sections -fstack-protector -Wno-unused-variable -Wall else	Enclave_Compile_Flags := $(SGX_COMMON_CFLAGS) -nostdinc -fvisibility=hidden -fpie -ffunction-sections -fdata-sections -fstack-protector-strong -Wno-unused-variable -Wall endifEnclave_Compile_Flags += $(Enclave_Include_Paths)# To generate a proper enclave, it is recommended to follow below guideline to link the trusted libraries:#    1. Link sgx_trts with the `--whole-archive' and `--no-whole-archive' options,#       so that the whole content of trts is included in the enclave.#    2. For other libraries, you just need to pull the required symbols.#       Use `--start-group' and `--end-group' to link these libraries.# Do NOT move the libraries linked with `--start-group' and `--end-group' within `--whole-archive' and `--no-whole-archive' options.# Otherwise, you may get some undesirable errors.Common_Enclave_Link_Flags := $(SGX_COMMON_CFLAGS) -Wl,--no-undefined -nostdlib -nodefaultlibs -nostartfiles -L$(SGX_LIBRARY_PATH) \	-Wl,--whole-archive -l$(Trts_Library_Name) -Wl,--no-whole-archive \	-Wl,--start-group -L. -lLocalAttestation_Trusted   -lsgx_tstdc -lsgx_tcxx -l$(Crypto_Library_Name) -l$(Service_Library_Name) -Wl,--end-group \	-Wl,-Bstatic -Wl,-Bsymbolic -Wl,--no-undefined \	-Wl,-pie,-eenclave_entry -Wl,--export-dynamic  \	-Wl,--defsym,__ImageBase=0 -Wl,--gc-sectionsDecryptor_Link_Flags := $(Common_Enclave_Link_Flags) -Wl,--version-script=$(Decryptor_Version_Script)Enclave_Cpp_Objects_2 := $(Enclave_Cpp_Files_2:.cpp=.o)Enclave_Name_2 := libDecryptor.soifeq ($(SGX_MODE), HW)ifeq ($(SGX_DEBUG), 1)	Build_Mode = HW_DEBUGelse ifeq ($(SGX_PRERELEASE), 1)	Build_Mode = HW_PRERELEASEelse	Build_Mode = HW_RELEASEendifelseifeq ($(SGX_DEBUG), 1)	Build_Mode = SIM_DEBUGelse ifeq ($(SGX_PRERELEASE), 1)	Build_Mode = SIM_PRERELEASEelse	Build_Mode = SIM_RELEASEendifendififeq ($(Build_Mode), HW_RELEASE)all: .config_$(Build_Mode)_$(SGX_ARCH) $(Trust_Lib_Name)  $(UnTrustLib_Name) Decryptor.so $(App_Name)	@echo "The project has been built in release hardware mode."	@echo "Please sign the enclaves (PHP.so, Decryptor.so, Enclave3.so) first with your signing keys before you run the $(App_Name) to launch and access the enclave."	@echo "To sign the enclaves use the following commands:"	@echo "   $(SGX_ENCLAVE_SIGNER) sign -key <key1> -enclave PHP.so -out <$(Enclave_Name_1)> -config PHP/PHP.config.xml"	@echo "   $(SGX_ENCLAVE_SIGNER) sign -key <key2> -enclave Decryptor.so -out <$(Enclave_Name_2)> -config Decryptor/Decryptor.config.xml"#	@echo "   $(SGX_ENCLAVE_SIGNER) sign -key <key3> -enclave Enclave3.so -out <$(Enclave_Name_3)> -config Enclave3/Enclave3.config.xml"	@echo "You can also sign the enclaves 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."elseall: .config_$(Build_Mode)_$(SGX_ARCH) $(Trust_Lib_Name) $(UnTrustLib_Name) $(Enclave_Name_2) $(App_Name)ifeq ($(Build_Mode), HW_DEBUG)	@echo "The project has been built in debug hardware mode."else ifeq ($(Build_Mode), SIM_DEBUG)	@echo "The project has been built in debug simulation mode."else ifeq ($(Build_Mode), HW_PRERELEASE)	@echo "The project has been built in pre-release hardware mode."else ifeq ($(Build_Mode), SIM_PRERELEASE)	@echo "The project has been built in pre-release simulation mode."else	@echo "The project has been built in release simulation mode."endifendif.config_$(Build_Mode)_$(SGX_ARCH):	@rm -rf .config_* $(App_Name) *.so *.a App/*.o Decryptor/*.o Decryptor/*_t.* Decryptor/*_u.* LocalAttestationCode/*.o LocalAttestationCode/*_t.* #Enclave3/*.o Enclave3/*_t.* Enclave3/*_u.*	@touch .config_$(Build_Mode)_$(SGX_ARCH)######## Library Objects ########LocalAttestationCode/LocalAttestationCode_t.c LocalAttestationCode/LocalAttestationCode_t.h : $(SGX_EDGER8R) LocalAttestationCode/LocalAttestationCode.edl	@cd LocalAttestationCode && $(SGX_EDGER8R) --trusted ../LocalAttestationCode/LocalAttestationCode.edl --search-path $(SGX_SDK)/include	@echo "GEN  =>  $@"LocalAttestationCode/LocalAttestationCode_t.o: LocalAttestationCode/LocalAttestationCode_t.c	@$(CC) $(TrustLib_Compile_Flags) -c $< -o $@	@echo "CC   <=  $<"LocalAttestationCode/%.o: LocalAttestationCode/%.cpp LocalAttestationCode/LocalAttestationCode_t.h	@$(CXX) $(TrustLib_Compile_Flags) $(TrustLib_Compile_Cxx_Flags) -c $< -o $@	@echo "CC   <= $<"$(Trust_Lib_Name): LocalAttestationCode/LocalAttestationCode_t.o $(TrustLib_Cpp_Objects)	@$(AR) rcs $@ $^	@echo "GEN  =>  $@"#Untrusted_LocalAttestation/%.o: Untrusted_LocalAttestation/%.cpp#	@$(CXX) $(UnTrustLib_Compile_Flags) -c $< -o $@#	@echo "CC   <=  $<"#$(UnTrustLib_Name): $(UnTrustLib_Cpp_Objects)#	@$(AR) rcs $@ $^#	@echo "GEN  =>  $@"######## App Objects ########Decryptor/Decryptor_u.c Decryptor/Decryptor_u.h: $(SGX_EDGER8R) Decryptor/Decryptor.edl	@cd Decryptor && $(SGX_EDGER8R) --use-prefix --untrusted ../Decryptor/Decryptor.edl --search-path $(SGX_SDK)/include	@echo "GEN  =>  $@"App/Decryptor_u.o: Decryptor/Decryptor_u.c	@$(CC) $(App_Compile_Flags) -c $< -o $@	@echo "CC   <=  $<"App/%.o: App/%.cpp Decryptor/Decryptor_u.h #Enclave3/Enclave3_u.h	@$(CXX) $(App_Compile_Flags) -c $< -o $@	@echo "CXX  <=  $<"$(App_Name): $(App_Cpp_Objects) App/Decryptor_u.o #$(App_Cpp_Objects)# $(UnTrustLib_Name)	@$(CXX) -Wl,--no-undefined $^ -o $@ $(App_Link_Flags)	@echo "LINK =>  $@"######## Enclave Objects ########Decryptor/Decryptor_t.c: $(SGX_EDGER8R) Decryptor/Decryptor.edl	@cd Decryptor && $(SGX_EDGER8R)  --use-prefix --trusted ../Decryptor/Decryptor.edl --search-path $(SGX_SDK)/include	@echo "GEN  =>  $@"Decryptor/Decryptor_t.o: Decryptor/Decryptor_t.c	@$(CC) $(Enclave_Compile_Flags) -c $< -o $@	@echo "CC   <=  $<"Decryptor/%.o: Decryptor/%.cpp	@$(CXX) -std=c++11 -nostdinc++ $(Enclave_Compile_Flags) -c $< -o $@	@echo "CXX  <=  $<"Decryptor.so: Decryptor/Decryptor_t.o $(Enclave_Cpp_Objects_2) $(Trust_Lib_Name)	@$(CXX) -Wl,--no-undefined Decryptor/Decryptor_t.o $(Enclave_Cpp_Objects_2) -o $@ $(Decryptor_Link_Flags)	@echo "LINK =>  $@"$(Enclave_Name_2): Decryptor.so	@$(SGX_ENCLAVE_SIGNER) sign -key Decryptor/Decryptor_private.pem -enclave Decryptor.so -out $@ -config Decryptor/Decryptor.config.xml	@echo "SIGN =>  $@"######## Clean ########.PHONY: cleanclean:	@rm -rf .config_* $(App_Name) *.so *.a App/*.o Decryptor/*.o Decryptor/*_t.* Decryptor/*_u.* LocalAttestationCode/*.o LocalAttestationCode/*_t.* 
 |