From 5fa91becfa3163b1a8f0acf33c13fbb2d8f4100e Mon Sep 17 00:00:00 2001 From: "Tate, Hongliang Tian" Date: Tue, 12 Nov 2019 16:16:35 +0000 Subject: [PATCH] Build C++ source files under libos/ and pal/ --- src/libos/Makefile | 20 ++++++++++++++------ src/pal/Makefile | 23 +++++++++++++++-------- src/sgxenv.mk | 12 ++++++------ 3 files changed, 35 insertions(+), 20 deletions(-) diff --git a/src/libos/Makefile b/src/libos/Makefile index fccc71e2..5e196bb7 100644 --- a/src/libos/Makefile +++ b/src/libos/Makefile @@ -39,12 +39,16 @@ BUILTIN_C_SRCS := $(sort $(wildcard src/builtin/*.c)) BUILTIN_C_OBJS := $(addprefix $(BUILD_DIR)/src/libos/,$(BUILTIN_C_SRCS:.c=.o)) C_SRCS := $(filter-out $(BUILTIN_C_SRCS),$(sort $(wildcard 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)) S_OBJS := $(addprefix $(BUILD_DIR)/src/libos/,$(S_SRCS:.S=.o)) -ALL_BUILD_SUBDIRS := $(sort $(patsubst %/,%,$(dir $(LIBOS_SO) $(EDL_C_OBJS) $(BUILTIN_C_OBJS) $(C_OBJS) $(S_OBJS)) $(RUST_TARGET_DIR) $(RUST_OUT_DIR))) +ALL_BUILD_SUBDIRS := $(sort $(patsubst %/,%,$(dir $(LIBOS_SO) $(EDL_C_OBJS) $(BUILTIN_C_OBJS) $(C_OBJS) $(CXX_OBJS) $(S_OBJS)) $(RUST_TARGET_DIR) $(RUST_OUT_DIR))) -C_FLAGS := $(SGX_CFLAGS_T) -fno-stack-protector -I./include/ +C_COMMON_FLAGS := -fno-stack-protector -I./include/ +C_FLAGS := $(SGX_CFLAGS_T) $(C_COMMON_FLAGS) +CXX_FLAGS := $(SGX_CXXFLAGS_T) $(C_COMMON_FLAGS) # Pass builtin values by defining macros # @@ -79,9 +83,9 @@ $(LIBOS_SO): $(BUILTIN_C_OBJS) @echo "LINK => $@" endif -$(LIBOS_CORE_A): $(LIBOS_RS_A) $(C_OBJS) $(S_OBJS) $(EDL_C_OBJS) +$(LIBOS_CORE_A): $(LIBOS_RS_A) $(C_OBJS) $(CXX_OBJS) $(S_OBJS) $(EDL_C_OBJS) @cp $(LIBOS_RS_A) $(LIBOS_CORE_A) - @ar r $@ $(C_OBJS) $(S_OBJS) $(EDL_C_OBJS) + @ar r $@ $(C_OBJS) $(CXX_OBJS) $(S_OBJS) $(EDL_C_OBJS) @echo "GEN => $@" ifeq ($(LIBOS_RELEASE), 0) @@ -106,9 +110,13 @@ $(BUILD_DIR)/src/libos/%.o: %.c @$(CC) $(C_FLAGS) -c $< -o $@ @echo "CC <= $@" +$(BUILD_DIR)/src/libos/%.o: %.cpp + @$(CXX) $(CXX_FLAGS) -c $< -o $@ + @echo "CXX <= $@" + $(BUILD_DIR)/src/libos/%.o: %.S @$(CC) $(C_FLAGS) -c $< -o $@ - @echo "CC <= $@" + @echo "AS <= $@" $(LIBCOMPILER_RT_PATCH_A): @$(MAKE) --no-print-directory -C $(RUST_SGX_SDK_DIR)/compiler-rt/ > /dev/null @@ -120,5 +128,5 @@ clean-builtin: clean: clean-builtin @-$(RM) -f $(LIBOS_SO) $(LIBOS_CORE_A) $(LIBOS_RS_A) \ - $(LIBCOMPILER_RT_PATCH_A) $(EDL_C_OBJS) $(EDL_C_SRCS) $(C_OBJS) $(S_OBJS) + $(LIBCOMPILER_RT_PATCH_A) $(EDL_C_OBJS) $(EDL_C_SRCS) $(C_OBJS) $(CXX_OBJS) $(S_OBJS) @-$(RM) -rf $(RUST_TARGET_DIR) diff --git a/src/pal/Makefile b/src/pal/Makefile index e4579882..77119979 100644 --- a/src/pal/Makefile +++ b/src/pal/Makefile @@ -7,14 +7,17 @@ LIBSGX_USTDC_A := $(BUILD_DIR)/lib/libsgx_ustdc.a EDL_C_SRCS := $(addprefix $(BUILD_DIR)/src/pal/,Enclave_u.c Enclave_u.h) EDL_C_OBJS := $(addprefix $(BUILD_DIR)/src/pal/,Enclave_u.o) -C_SRCS := $(sort $(wildcard *.c)) +C_SRCS := $(sort $(wildcard *.c */*.c)) C_OBJS := $(addprefix $(BUILD_DIR)/src/pal/,$(C_SRCS:.c=.o)) +CXX_SRCS := $(sort $(wildcard *.cpp */*.cpp)) +CXX_OBJS := $(addprefix $(BUILD_DIR)/src/pal/,$(CXX_SRCS:.cpp=.o)) -C_FLAGS := $(SGX_CFLAGS_U) -I$(BUILD_DIR)/src/pal -Wno-unused-result -LINK_FLAGS := $(SGX_LFLAGS_U) -LINK_FLAGS += -L$(RUST_SGX_SDK_DIR)/sgx_ustdc/ -lsgx_ustdc -lsgx_uprotected_fs +C_COMMON_FLAGS := -I$(BUILD_DIR)/src/pal -Wno-unused-result +C_FLAGS := $(C_COMMON_FLAGS) $(SGX_CFLAGS_U) +CXX_FLAGS := $(C_COMMON_FLAGS) $(SGX_CXXFLAGS_U) +LINK_FLAGS := $(SGX_LFLAGS_U) -L$(RUST_SGX_SDK_DIR)/sgx_ustdc/ -lsgx_ustdc -lsgx_uprotected_fs -ALL_BUILD_SUBDIRS := $(sort $(patsubst %/,%,$(dir $(BIN) $(EDL_C_OBJS) $(C_OBJS)))) +ALL_BUILD_SUBDIRS := $(sort $(patsubst %/,%,$(dir $(BIN) $(EDL_C_OBJS) $(C_OBJS) $(CXX_OBJS)))) .PHONY: all clean @@ -23,8 +26,8 @@ all: $(ALL_BUILD_SUBDIRS) $(BIN) $(ALL_BUILD_SUBDIRS): @mkdir -p $@ -$(BIN): $(LIBSGX_USTDC_A) $(EDL_C_OBJS) $(C_OBJS) - @$(CC) $^ -o $@ $(LINK_FLAGS) +$(BIN): $(LIBSGX_USTDC_A) $(EDL_C_OBJS) $(C_OBJS) $(CXX_OBJS) + @$(CXX) $^ -o $@ $(LINK_FLAGS) @echo "LINK => $@" $(BUILD_DIR)/src/pal/Enclave_u.o: $(BUILD_DIR)/src/pal/Enclave_u.c @@ -39,10 +42,14 @@ $(BUILD_DIR)/src/pal/%.o: %.c @$(CC) $(C_FLAGS) -c $< -o $@ @echo "CC <= $@" +$(BUILD_DIR)/src/pal/%.o: %.cpp + @$(CXX) $(CXX_FLAGS) -c $< -o $@ + @echo "CXX <= $@" + $(LIBSGX_USTDC_A): @$(MAKE) --no-print-directory -C $(RUST_SGX_SDK_DIR)/sgx_ustdc/ > /dev/null @cp $(RUST_SGX_SDK_DIR)/sgx_ustdc/libsgx_ustdc.a $(LIBSGX_USTDC_A) @echo "GEN <= $@" clean: - @-$(RM) -f $(BIN) $(LIBSGX_USTDC_A) $(C_OBJS) $(EDL_C_OBJS) $(EDL_C_SRCS) + @-$(RM) -f $(BIN) $(LIBSGX_USTDC_A) $(C_OBJS) $(CXX_OBJS) $(EDL_C_OBJS) $(EDL_C_SRCS) diff --git a/src/sgxenv.mk b/src/sgxenv.mk index b531cd32..43081f2e 100644 --- a/src/sgxenv.mk +++ b/src/sgxenv.mk @@ -64,11 +64,10 @@ ProtectedFs_Library_Name := sgx_tprotected_fs # # Export flags used to compile or link untrusted modules # -SGX_CFLAGS_U := $(SGX_COMMON_CFLAGS) -fPIC -Wno-attributes -SGX_CFLAGS_U += -I$(SGX_SDK)/include +SGX_CFLAGS_U := $(SGX_COMMON_CFLAGS) -fPIC -Wno-attributes -I$(SGX_SDK)/include +SGX_CXXFLAGS_U := $(SGX_CFLAGS_U) -std=c++11 -SGX_LFLAGS_U := $(SGX_COMMON_CFLAGS) -lpthread -SGX_LFLAGS_U += -L$(SGX_LIBRARY_PATH) -l$(Urts_Library_Name) +SGX_LFLAGS_U := $(SGX_COMMON_CFLAGS) -lpthread -L$(SGX_LIBRARY_PATH) -l$(Urts_Library_Name) ifneq ($(SGX_MODE), HW) SGX_LFLAGS_U += -lsgx_uae_service_sim else @@ -78,8 +77,9 @@ endif # # Export flags used to compile or link untrusted modules # -SGX_CFLAGS_T := $(SGX_COMMON_CFLAGS) -nostdinc -fvisibility=hidden -fpie -fstack-protector -SGX_CFLAGS_T += -I$(RUST_SGX_SDK_DIR)/common/inc/ -I$(SGX_SDK)/include -I$(SGX_SDK)/include/tlibc -I$(SGX_SDK)/include/stlport -I$(SGX_SDK)/include/epid +SGX_CFLAGS_T := $(SGX_COMMON_CFLAGS) -nostdinc -fvisibility=hidden -fpie -fstack-protector \ + -I$(RUST_SGX_SDK_DIR)/common/inc/ -I$(SGX_SDK)/include -I$(SGX_SDK)/include/tlibc +SGX_CXXFLAGS_T := $(SGX_CFLAGS_T) -std=c++11 -nostdinc++ -I$(SGX_SDK)/include/libcxx # Before use this linker flag, the user should define $(_Other_Enclave_Libs), # and $(_Other_Link_Flags)