Upgrade Dockerfile for dynamic-linking support
This commit is contained in:
		
							parent
							
								
									e11c30c5c5
								
							
						
					
					
						commit
						a2169e63e8
					
				| @ -58,7 +58,7 @@ pub fn do_spawn<P: AsRef<Path>>( | |||||||
|     }; |     }; | ||||||
| 
 | 
 | ||||||
|     let mut ldso_elf_buf = { |     let mut ldso_elf_buf = { | ||||||
|         let ldso_path = "/ld.so"; |         let ldso_path = "/lib/ld-musl-x86_64.so.1"; | ||||||
|         let ldso_inode = ROOT_INODE.lookup(ldso_path)?; |         let ldso_inode = ROOT_INODE.lookup(ldso_path)?; | ||||||
|         ldso_inode.read_as_vec()? |         ldso_inode.read_as_vec()? | ||||||
|     }; |     }; | ||||||
|  | |||||||
| @ -26,8 +26,8 @@ macro_rules! impl_setter_for_process_vm_builder { | |||||||
| 
 | 
 | ||||||
| impl ProcessVMBuilder { | impl ProcessVMBuilder { | ||||||
|     pub const DEFAULT_STACK_SIZE: usize = 1 * 1024 * 1024; |     pub const DEFAULT_STACK_SIZE: usize = 1 * 1024 * 1024; | ||||||
|     pub const DEFAULT_HEAP_SIZE: usize = 8 * 1024 * 1024; |     pub const DEFAULT_HEAP_SIZE: usize = 16 * 1024 * 1024; | ||||||
|     pub const DEFAULT_MMAP_SIZE: usize = 8 * 1024 * 1024; |     pub const DEFAULT_MMAP_SIZE: usize = 16 * 1024 * 1024; | ||||||
| 
 | 
 | ||||||
|     pub fn new(code_size: usize, data_size: usize) -> ProcessVMBuilder { |     pub fn new(code_size: usize, data_size: usize) -> ProcessVMBuilder { | ||||||
|         ProcessVMBuilder { |         ProcessVMBuilder { | ||||||
|  | |||||||
| @ -242,17 +242,18 @@ int SGX_CDECL main(int argc, const char *argv[]) | |||||||
|         return -1; |         return -1; | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|     sgx_ret = libos_boot(global_eid, &status, executable_path, &argv[2]); |  | ||||||
|     if(sgx_ret != SGX_SUCCESS) { |  | ||||||
|         print_error_message(sgx_ret); |  | ||||||
|         return status; |  | ||||||
|     } |  | ||||||
|     // First ecall do a lot initializations.
 |     // First ecall do a lot initializations.
 | ||||||
|     // Count it as startup time.
 |     // Count it as startup time.
 | ||||||
|     dummy_ecall(global_eid, &status); |     dummy_ecall(global_eid, &status); | ||||||
| 
 | 
 | ||||||
|     gettimeofday(&libosready, NULL); |     gettimeofday(&libosready, NULL); | ||||||
| 
 | 
 | ||||||
|  |     sgx_ret = libos_boot(global_eid, &status, executable_path, &argv[2]); | ||||||
|  |     if(sgx_ret != SGX_SUCCESS) { | ||||||
|  |         print_error_message(sgx_ret); | ||||||
|  |         return status; | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|     status = wait_all_tasks(); |     status = wait_all_tasks(); | ||||||
| 
 | 
 | ||||||
|     gettimeofday(&appdie, NULL); |     gettimeofday(&appdie, NULL); | ||||||
|  | |||||||
| @ -45,7 +45,11 @@ $(BUILD_TARGETS): %: | |||||||
| 
 | 
 | ||||||
| sefs: | sefs: | ||||||
| 	@$(RM) -rf $(SEFS_PATH) | 	@$(RM) -rf $(SEFS_PATH) | ||||||
| 	@cp /lib/ld-musl-x86_64.so.1 $(FS_PATH)/ld.so | 	@mkdir -p $(FS_PATH)/lib/ | ||||||
|  | 	@cp /lib/ld-musl-x86_64.so.1 $(FS_PATH)/lib/ | ||||||
|  | 	@cp /usr/local/occlum/lib/libc++.so.1 $(FS_PATH)/lib/ | ||||||
|  | 	@cp /usr/local/occlum/lib/libc++abi.so.1 $(FS_PATH)/lib/ | ||||||
|  | 	@cp /usr/local/occlum/lib/libunwind.so.1 $(FS_PATH)/lib/ | ||||||
| 	@cd $(PROJECT_DIR)/deps/sefs/sefs-fuse/bin/ && \
 | 	@cd $(PROJECT_DIR)/deps/sefs/sefs-fuse/bin/ && \
 | ||||||
| 		./app \
 | 		./app \
 | ||||||
| 			$(CUR_DIR)/$(SEFS_PATH) \
 | 			$(CUR_DIR)/$(SEFS_PATH) \
 | ||||||
|  | |||||||
| @ -20,7 +20,6 @@ CLANG_BIN_PATH := $(shell clang -print-prog-name=clang) | |||||||
| LLVM_PATH := $(abspath $(dir $(CLANG_BIN_PATH))../) | LLVM_PATH := $(abspath $(dir $(CLANG_BIN_PATH))../) | ||||||
| 
 | 
 | ||||||
| C_FLAGS = -Wall -I../include -O2 -fPIC $(EXTRA_C_FLAGS) | C_FLAGS = -Wall -I../include -O2 -fPIC $(EXTRA_C_FLAGS) | ||||||
| C_FLAGS += -Xclang -load -Xclang $(LLVM_PATH)/lib/LLVMMDSFIIRInserter.so |  | ||||||
| LINK_FLAGS = $(C_FLAGS) -pie $(EXTRA_LINK_FLAGS) | LINK_FLAGS = $(C_FLAGS) -pie $(EXTRA_LINK_FLAGS) | ||||||
| 
 | 
 | ||||||
| .PHONY: all test debug clean | .PHONY: all test debug clean | ||||||
| @ -36,18 +35,17 @@ $(BIN_PATH): $(BIN_NAME) | |||||||
| 	@cp $^ $@ | 	@cp $^ $@ | ||||||
| 	@echo "COPY => $@" | 	@echo "COPY => $@" | ||||||
| 
 | 
 | ||||||
| debug: $(OBJDUMP_FILE) $(READELF_FILE) | # Compile C/C++ test program
 | ||||||
| 
 | #
 | ||||||
| $(OBJDUMP_FILE): $(BIN_NAME) | # When compiling programs, we do not use CXX if we're not compilng any C++ files.
 | ||||||
| 	@objdump -d $(BIN_NAME) > $(OBJDUMP_FILE) | # This ensures C++ libraries are only linked and loaded for C++ programs, not C 
 | ||||||
| 	@echo "OBJDUMP => $@" | # programs.
 | ||||||
| 
 |  | ||||||
| $(READELF_FILE): $(BIN_NAME) |  | ||||||
| 	@readelf -a -d $(BIN_NAME) > $(READELF_FILE) |  | ||||||
| 	@echo "READELF => $@" |  | ||||||
| 
 |  | ||||||
| $(BIN_NAME): $(C_OBJS) $(CXX_OBJS) | $(BIN_NAME): $(C_OBJS) $(CXX_OBJS) | ||||||
| 	@$(CXX) $^ $(LINK_FLAGS) -o $(BIN_NAME) | 	@if [ -z $(CXX_OBJS) ] ; then \
 | ||||||
|  | 		$(CC) $^ $(LINK_FLAGS) -o $(BIN_NAME); \
 | ||||||
|  | 	else \
 | ||||||
|  | 		$(CXX) $^ $(LINK_FLAGS) -o $(BIN_NAME); \
 | ||||||
|  | 	fi ; | ||||||
| 	@echo "LINK => $@" | 	@echo "LINK => $@" | ||||||
| 
 | 
 | ||||||
| $(C_OBJS): %.o: %.c | $(C_OBJS): %.o: %.c | ||||||
|  | |||||||
| @ -39,16 +39,13 @@ RUN apt-get update && apt-get install -y --no-install-recommends \ | |||||||
|     rm -rf /var/lib/apt/lists/* |     rm -rf /var/lib/apt/lists/* | ||||||
| 
 | 
 | ||||||
| # Install SGX SDK | # Install SGX SDK | ||||||
| WORKDIR /root/occlum/linux-sgx | WORKDIR /tmp | ||||||
| RUN git clone -b for_occlum https://github.com/occlum/linux-sgx . && \ | RUN git clone https://github.com/occlum/linux-sgx . && \ | ||||||
|     ./download_prebuilt.sh && \ |     ./download_prebuilt.sh && \ | ||||||
|     make && \ |     ./compile.sh && \ | ||||||
|     make sdk_install_pkg && \ |     ./install.sh && \ | ||||||
|     make deb_sgx_enclave_common_pkg && \ |  | ||||||
|     dpkg -i ./linux/installer/deb/libsgx-enclave-common/libsgx-enclave-common_*.deb && \ |  | ||||||
|     echo -e 'no\n/opt/intel' | ./linux/installer/bin/sgx_linux_x64_sdk_*.bin && \ |  | ||||||
|     echo 'source /opt/intel/sgxsdk/environment' >> /root/.bashrc && \ |     echo 'source /opt/intel/sgxsdk/environment' >> /root/.bashrc && \ | ||||||
|     rm -rf /root/occlum/linux-sgx |     rm -rf /tmp/linux-sgx | ||||||
| 
 | 
 | ||||||
| # Install Rust | # Install Rust | ||||||
| ENV OCCLUM_RUST_VERSION=nightly-2019-01-28 | ENV OCCLUM_RUST_VERSION=nightly-2019-01-28 | ||||||
| @ -58,7 +55,9 @@ RUN curl https://sh.rustup.rs -sSf | \ | |||||||
|     rm -rf /root/.cargo/registry && rm -rf /root/.cargo/git |     rm -rf /root/.cargo/registry && rm -rf /root/.cargo/git | ||||||
| 
 | 
 | ||||||
| # Install Occlum toolchain | # Install Occlum toolchain | ||||||
| WORKDIR /root/occlum/ | WORKDIR /tmp | ||||||
| COPY build_toolchain.sh /root/occlum/ | COPY build_toolchain.sh /tmp | ||||||
| RUN ./build_toolchain.sh | RUN ./build_toolchain.sh | ||||||
| ENV PATH="/usr/local/occlum/bin:$PATH" | ENV PATH="/usr/local/occlum/bin:$PATH" | ||||||
|  | 
 | ||||||
|  | WORKDIR /root | ||||||
|  | |||||||
| @ -1,5 +1,5 @@ | |||||||
| #!/bin/sh | #!/bin/sh | ||||||
| BUILD_DIR=/root/occlum/toolchain | BUILD_DIR=/tmp/occlum_toolchain | ||||||
| INSTALL_DIR=/usr/local/occlum | INSTALL_DIR=/usr/local/occlum | ||||||
| 
 | 
 | ||||||
| # Exit if any command fails | # Exit if any command fails | ||||||
| @ -14,14 +14,15 @@ mkdir -p ${BUILD_DIR} | |||||||
| cd ${BUILD_DIR} | cd ${BUILD_DIR} | ||||||
| 
 | 
 | ||||||
| # Download all source code | # Download all source code | ||||||
| git clone -b for_occlum https://github.com/occlum/llvm | # TODO: use Occlum's fork of LLVM for SFI | ||||||
| git clone -b for_occlum https://github.com/occlum/musl | git clone -b release_70 https://github.com/llvm-mirror/llvm | ||||||
| git clone -b for_occlum https://github.com/occlum/lld | git clone -b release_70 https://github.com/llvm-mirror/lld | ||||||
| git clone -b release_70 https://github.com/llvm-mirror/clang | git clone -b release_70 https://github.com/llvm-mirror/clang | ||||||
| git clone -b release_70 https://github.com/llvm-mirror/libcxx | git clone -b release_70 https://github.com/llvm-mirror/libcxx | ||||||
| git clone -b release_70 https://github.com/llvm-mirror/libcxxabi | git clone -b release_70 https://github.com/llvm-mirror/libcxxabi | ||||||
| git clone -b release_70 https://github.com/llvm-mirror/libunwind | git clone -b release_70 https://github.com/llvm-mirror/libunwind | ||||||
| git clone -b release_70 https://github.com/llvm-mirror/compiler-rt | git clone -b release_70 https://github.com/llvm-mirror/compiler-rt | ||||||
|  | git clone https://github.com/occlum/musl | ||||||
| 
 | 
 | ||||||
| # Build LLVM | # Build LLVM | ||||||
| mkdir llvm-build | mkdir llvm-build | ||||||
| @ -31,7 +32,8 @@ cmake -DCMAKE_BUILD_TYPE=Release \ | |||||||
|     -DLLVM_ENABLE_PROJECTS="clang;lld" \ |     -DLLVM_ENABLE_PROJECTS="clang;lld" \ | ||||||
|     -DLLVM_TARGETS_TO_BUILD="X86" \ |     -DLLVM_TARGETS_TO_BUILD="X86" \ | ||||||
|     ../llvm |     ../llvm | ||||||
| # Compile LLVM in a single thread (parallel compilation would consume too much memory) | # Compiling LLVM in many threads may consume too much memory | ||||||
|  | make -j2 | ||||||
| make install | make install | ||||||
| cd .. | cd .. | ||||||
| 
 | 
 | ||||||
| @ -46,7 +48,7 @@ cd .. | |||||||
| 
 | 
 | ||||||
| # Link Linux headers | # Link Linux headers | ||||||
| ln -s /usr/include/linux ${INSTALL_DIR}/include/linux | ln -s /usr/include/linux ${INSTALL_DIR}/include/linux | ||||||
| ln -s /usr/include/asm ${INSTALL_DIR}/include/asm | ln -s /usr/include/x86_64-linux-gnu/asm ${INSTALL_DIR}/include/asm | ||||||
| ln -s /usr/include/asm-generic ${INSTALL_DIR}/include/asm-generic | ln -s /usr/include/asm-generic ${INSTALL_DIR}/include/asm-generic | ||||||
| 
 | 
 | ||||||
| # Build libunwind | # Build libunwind | ||||||
| @ -54,11 +56,10 @@ mkdir libunwind-build | |||||||
| cd libunwind-build | cd libunwind-build | ||||||
| cmake -DCMAKE_BUILD_TYPE=Release \ | cmake -DCMAKE_BUILD_TYPE=Release \ | ||||||
|     -DCMAKE_C_COMPILER=musl-clang \ |     -DCMAKE_C_COMPILER=musl-clang \ | ||||||
|     -DCMAKE_C_FLAGS="-O2 -fPIC -locclum_stub" \ |     -DCMAKE_C_FLAGS="-O2 -fPIC" \ | ||||||
|     -DCMAKE_CXX_COMPILER=musl-clang \ |     -DCMAKE_CXX_COMPILER=musl-clang \ | ||||||
|     -DCMAKE_CXX_FLAGS="-O2 -fPIC -locclum_stub" \ |     -DCMAKE_CXX_FLAGS="-O2 -fPIC" \ | ||||||
|     -DCMAKE_INSTALL_PREFIX=${INSTALL_DIR} \ |     -DCMAKE_INSTALL_PREFIX=${INSTALL_DIR} \ | ||||||
|     -DLIBUNWIND_ENABLE_SHARED=OFF \ |  | ||||||
|     -DLLVM_ENABLE_LIBCXX=ON \ |     -DLLVM_ENABLE_LIBCXX=ON \ | ||||||
|     ../libunwind |     ../libunwind | ||||||
| make install -j | make install -j | ||||||
| @ -69,11 +70,10 @@ mkdir libcxx-prebuild | |||||||
| cd libcxx-prebuild | cd libcxx-prebuild | ||||||
| cmake -DCMAKE_BUILD_TYPE=Release \ | cmake -DCMAKE_BUILD_TYPE=Release \ | ||||||
|     -DCMAKE_C_COMPILER=musl-clang \ |     -DCMAKE_C_COMPILER=musl-clang \ | ||||||
|     -DCMAKE_C_FLAGS="-O2 -fPIC -locclum_stub" \ |     -DCMAKE_C_FLAGS="-O2 -fPIC" \ | ||||||
|     -DCMAKE_CXX_COMPILER=musl-clang \ |     -DCMAKE_CXX_COMPILER=musl-clang \ | ||||||
|     -DCMAKE_CXX_FLAGS="-O2 -fPIC -locclum_stub" \ |     -DCMAKE_CXX_FLAGS="-O2 -fPIC" \ | ||||||
|     -DCMAKE_INSTALL_PREFIX=${INSTALL_DIR} \ |     -DCMAKE_INSTALL_PREFIX=${INSTALL_DIR} \ | ||||||
|     -DLIBCXX_ENABLE_SHARED=OFF \ |  | ||||||
|     -DLIBCXX_HAS_MUSL_LIBC=ON \ |     -DLIBCXX_HAS_MUSL_LIBC=ON \ | ||||||
|     ../libcxx |     ../libcxx | ||||||
| make install -j | make install -j | ||||||
| @ -84,12 +84,11 @@ mkdir libcxxabi-build | |||||||
| cd libcxxabi-build | cd libcxxabi-build | ||||||
| cmake -DCMAKE_BUILD_TYPE=Release \ | cmake -DCMAKE_BUILD_TYPE=Release \ | ||||||
|     -DCMAKE_C_COMPILER=musl-clang \ |     -DCMAKE_C_COMPILER=musl-clang \ | ||||||
|     -DCMAKE_C_FLAGS="-O2 -fPIC -locclum_stub" \ |     -DCMAKE_C_FLAGS="-O2 -fPIC" \ | ||||||
|     -DCMAKE_CXX_COMPILER=musl-clang \ |     -DCMAKE_CXX_COMPILER=musl-clang \ | ||||||
|     -DCMAKE_CXX_FLAGS="-O2 -fPIC -locclum_stub" \ |     -DCMAKE_CXX_FLAGS="-O2 -fPIC" \ | ||||||
|     -DCMAKE_INSTALL_PREFIX=${INSTALL_DIR} \ |     -DCMAKE_INSTALL_PREFIX=${INSTALL_DIR} \ | ||||||
|     -DLIBCXXABI_ENABLE_PIC=ON \ |     -DLIBCXXABI_ENABLE_PIC=ON \ | ||||||
|     -DLIBCXXABI_ENABLE_SHARED=OFF \ |  | ||||||
|     -DLIBCXXABI_ENABLE_STATIC_UNWINDER=OFF \ |     -DLIBCXXABI_ENABLE_STATIC_UNWINDER=OFF \ | ||||||
|     -DLIBCXXABI_LIBCXX_PATH=${INSTALL_DIR} \ |     -DLIBCXXABI_LIBCXX_PATH=${INSTALL_DIR} \ | ||||||
|     -DLIBCXXABI_USE_LLVM_UNWINDER=ON \ |     -DLIBCXXABI_USE_LLVM_UNWINDER=ON \ | ||||||
| @ -103,11 +102,10 @@ mkdir libcxx-build | |||||||
| cd libcxx-build | cd libcxx-build | ||||||
| cmake -DCMAKE_BUILD_TYPE=Release \ | cmake -DCMAKE_BUILD_TYPE=Release \ | ||||||
|     -DCMAKE_C_COMPILER=musl-clang \ |     -DCMAKE_C_COMPILER=musl-clang \ | ||||||
|     -DCMAKE_C_FLAGS="-O2 -fPIC -locclum_stub" \ |     -DCMAKE_C_FLAGS="-O2 -fPIC" \ | ||||||
|     -DCMAKE_CXX_COMPILER=musl-clang \ |     -DCMAKE_CXX_COMPILER=musl-clang \ | ||||||
|     -DCMAKE_CXX_FLAGS="-O2 -fPIC -locclum_stub" \ |     -DCMAKE_CXX_FLAGS="-O2 -fPIC" \ | ||||||
|     -DCMAKE_INSTALL_PREFIX=${INSTALL_DIR} \ |     -DCMAKE_INSTALL_PREFIX=${INSTALL_DIR} \ | ||||||
|     -DLIBCXX_ENABLE_SHARED=OFF \ |  | ||||||
|     -DLIBCXX_HAS_MUSL_LIBC=ON \ |     -DLIBCXX_HAS_MUSL_LIBC=ON \ | ||||||
|     -DLIBCXX_CXX_ABI=libcxxabi \ |     -DLIBCXX_CXX_ABI=libcxxabi \ | ||||||
|     -DLIBCXX_CXX_ABI_INCLUDE_PATHS=../libcxxabi/include \ |     -DLIBCXX_CXX_ABI_INCLUDE_PATHS=../libcxxabi/include \ | ||||||
|  | |||||||
		Loading…
	
		Reference in New Issue
	
	Block a user