Improve Occlum GCC toolchain with new wrappers for binaries
This commit makes the toolchain easier to use in two folds: 1. When compiling C/C++ source files, no need to add "-fPIC -pie" flags manually; 2. When running executables generated by the Occlum toolchain on Linux, no need to set the `LD_LIBRARY_PATH` manually.
This commit is contained in:
parent
2357f8ed1c
commit
1304f5388d
@ -10,7 +10,7 @@ When completed, the resulting `hello-world` can be found in `examples/cpp-tutori
|
||||
|
||||
2. (Optional) Run `hello-world` on Linux
|
||||
```
|
||||
LD_LIBRARY_PATH=/usr/local/occlum/x86_64-linux-musl/lib ./examples/cpp-tutorial/stage3/bazel-bin/main/hello-world
|
||||
./examples/cpp-tutorial/stage3/bazel-bin/main/hello-world
|
||||
```
|
||||
|
||||
3. Run `hello-world` on Occlum
|
||||
|
@ -7,4 +7,4 @@ git clone https://github.com/bazelbuild/examples/ .
|
||||
cd cpp-tutorial/stage3
|
||||
export CC=/opt/occlum/toolchains/gcc/bin/occlum-gcc
|
||||
export CXX=/opt/occlum/toolchains/gcc/bin/occlum-g++
|
||||
bazel build --cxxopt=-std=c++11 --copt=-fPIC --linkopt=-pie //main:hello-world
|
||||
bazel build --cxxopt=-std=c++11 //main:hello-world
|
||||
|
@ -1,12 +1,11 @@
|
||||
CC := occlum-gcc
|
||||
CFLAGS := -fPIC -pie
|
||||
|
||||
.PHONY: all clean
|
||||
|
||||
all: hello_world
|
||||
|
||||
hello_world: hello_world.c
|
||||
$(CC) $(CFLAGS) $^ -o $@
|
||||
$(CC) $^ -o $@
|
||||
|
||||
clean:
|
||||
rm -rf hello_world
|
||||
|
@ -9,7 +9,7 @@ make
|
||||
Or you can build `hello_world` with CMake
|
||||
```
|
||||
mkdir build && cd build
|
||||
cmake ../ -DCMAKE_C_COMPILER=occlum-gcc -DCMAKE_C_FLAGS="-fPIC -pie"
|
||||
cmake ../ -DCMAKE_C_COMPILER=occlum-gcc
|
||||
make
|
||||
cd ..
|
||||
cp build/hello_world .
|
||||
|
@ -1,5 +1,5 @@
|
||||
CXX := occlum-g++
|
||||
CXXFLAGS := -std=c++11 -fPIC -pie
|
||||
CXXFLAGS := -std=c++11
|
||||
|
||||
.PHONY: all clean
|
||||
|
||||
|
@ -9,7 +9,7 @@ make
|
||||
Or you can build `hello_world` with CMake
|
||||
```
|
||||
mkdir build && cd build
|
||||
cmake ../ -DCMAKE_CXX_COMPILER=occlum-g++ -DCMAKE_CXX_FLAGS="-fPIC -pie"
|
||||
cmake ../ -DCMAKE_CXX_COMPILER=occlum-g++
|
||||
make
|
||||
cd ..
|
||||
cp build/hello_world .
|
||||
@ -18,7 +18,7 @@ Either way, the resulting `hello_world` can be found in the current directory.
|
||||
|
||||
2. (Optional) Run `hello_world` on Linux
|
||||
```
|
||||
LD_LIBRARY_PATH=/usr/local/occlum/x86_64-linux-musl/lib ./hello_world
|
||||
./hello_world
|
||||
```
|
||||
|
||||
3. Run `hello_world` on Occlum
|
||||
|
@ -10,8 +10,7 @@ CC=occlum-gcc ./config \
|
||||
--prefix=/usr/local/occlum/x86_64-linux-musl \
|
||||
--openssldir=/usr/local/occlum/ssl \
|
||||
--with-rand-seed=rdcpu \
|
||||
no-zlib no-async no-tests \
|
||||
-fPIC -pie
|
||||
no-zlib no-async no-tests
|
||||
make -j
|
||||
sudo make install
|
||||
popd
|
||||
@ -25,5 +24,5 @@ popd
|
||||
|
||||
# 3. Build the https server example in mongoose
|
||||
pushd mongoose_src/examples/simplest_web_server_ssl
|
||||
CC=occlum-gcc CFLAGS_EXTRA="-Wno-format-truncation -fPIC -pie" make
|
||||
CC=occlum-gcc CFLAGS_EXTRA="-Wno-format-truncation" make
|
||||
popd
|
||||
|
@ -1,5 +1,4 @@
|
||||
#!/bin/bash
|
||||
export LD_LIBRARY_PATH=/usr/local/occlum/x86_64-linux-musl/lib:$LD_LIBRARY_PATH
|
||||
https_server=simplest_web_server_ssl
|
||||
set -e
|
||||
|
||||
|
@ -1,27 +1,8 @@
|
||||
diff --git a/tensorflow/lite/tools/make/Makefile b/tensorflow/lite/tools/make/Makefile
|
||||
index 73c50d3..3cef7fa 100644
|
||||
index 73c50d3..4a6445a 100644
|
||||
--- a/tensorflow/lite/tools/make/Makefile
|
||||
+++ b/tensorflow/lite/tools/make/Makefile
|
||||
@@ -42,7 +42,7 @@ INCLUDES := \
|
||||
-I$(OBJDIR)
|
||||
# This is at the end so any globally-installed frameworks like protobuf don't
|
||||
# override local versions in the source tree.
|
||||
-INCLUDES += -I/usr/local/include
|
||||
+INCLUDES += -I/usr/local/occlum/x86_64-linux-musl/include
|
||||
|
||||
# These are the default libraries needed, but they can be added to or
|
||||
# overridden by the platform-specific settings in target makefiles.
|
||||
@@ -59,7 +59,8 @@ CXXFLAGS := -O3 -DNDEBUG -fPIC
|
||||
CXXFLAGS += $(EXTRA_CXXFLAGS)
|
||||
CFLAGS := ${CXXFLAGS}
|
||||
CXXFLAGS += --std=c++11
|
||||
-LDOPTS := -L/usr/local/lib
|
||||
+LDOPTS := -L/usr/local/occlum/x86_64-linux-musl/lib
|
||||
+LDFLAGS := -pie $(LDOPTS)
|
||||
ARFLAGS := -r
|
||||
TARGET_TOOLCHAIN_PREFIX :=
|
||||
CC_PREFIX :=
|
||||
@@ -80,6 +81,12 @@ BENCHMARK_BINARY_NAME := benchmark_model
|
||||
@@ -80,6 +80,12 @@ BENCHMARK_BINARY_NAME := benchmark_model
|
||||
MINIMAL_SRCS := \
|
||||
tensorflow/lite/examples/minimal/minimal.cc
|
||||
|
||||
@ -34,7 +15,7 @@ index 73c50d3..3cef7fa 100644
|
||||
# What sources we want to compile, must be kept in sync with the main Bazel
|
||||
# build files.
|
||||
|
||||
@@ -133,7 +140,8 @@ $(wildcard tensorflow/lite/*/*/*test.cc) \
|
||||
@@ -133,7 +139,8 @@ $(wildcard tensorflow/lite/*/*/*test.cc) \
|
||||
$(wildcard tensorflow/lite/*/*/*/*test.cc) \
|
||||
$(wildcard tensorflow/lite/kernels/*test_main.cc) \
|
||||
$(wildcard tensorflow/lite/kernels/*test_util.cc) \
|
||||
@ -44,7 +25,7 @@ index 73c50d3..3cef7fa 100644
|
||||
|
||||
BUILD_WITH_MMAP ?= true
|
||||
ifeq ($(BUILD_TYPE),micro)
|
||||
@@ -209,6 +217,7 @@ include $(wildcard $(MAKEFILE_DIR)/targets/*_makefile.inc)
|
||||
@@ -209,6 +216,7 @@ include $(wildcard $(MAKEFILE_DIR)/targets/*_makefile.inc)
|
||||
|
||||
ALL_SRCS := \
|
||||
$(MINIMAL_SRCS) \
|
||||
@ -52,7 +33,7 @@ index 73c50d3..3cef7fa 100644
|
||||
$(PROFILER_SRCS) \
|
||||
$(PROFILER_SUMMARIZER_SRCS) \
|
||||
$(TF_LITE_CC_SRCS) \
|
||||
@@ -225,14 +234,18 @@ LIB_PATH := $(LIBDIR)$(LIB_NAME)
|
||||
@@ -225,14 +233,18 @@ LIB_PATH := $(LIBDIR)$(LIB_NAME)
|
||||
BENCHMARK_LIB := $(LIBDIR)$(BENCHMARK_LIB_NAME)
|
||||
BENCHMARK_BINARY := $(BINDIR)$(BENCHMARK_BINARY_NAME)
|
||||
MINIMAL_BINARY := $(BINDIR)minimal
|
||||
@ -73,7 +54,7 @@ index 73c50d3..3cef7fa 100644
|
||||
LIB_OBJS := $(addprefix $(OBJDIR), \
|
||||
$(patsubst %.cc,%.o,$(patsubst %.c,%.o,$(patsubst %.cpp,%.o,$(TF_LITE_CC_SRCS)))))
|
||||
|
||||
@@ -252,7 +265,7 @@ $(OBJDIR)%.o: %.cpp
|
||||
@@ -252,7 +264,7 @@ $(OBJDIR)%.o: %.cpp
|
||||
$(CXX) $(CXXFLAGS) $(INCLUDES) -c $< -o $@
|
||||
|
||||
# The target that's compiled if there's no command-line arguments.
|
||||
@ -82,7 +63,7 @@ index 73c50d3..3cef7fa 100644
|
||||
|
||||
# The target that's compiled for micro-controllers
|
||||
micro: $(LIB_PATH)
|
||||
@@ -276,6 +289,14 @@ $(MINIMAL_BINARY): $(MINIMAL_OBJS) $(LIB_PATH)
|
||||
@@ -276,6 +288,14 @@ $(MINIMAL_BINARY): $(MINIMAL_OBJS) $(LIB_PATH)
|
||||
|
||||
minimal: $(MINIMAL_BINARY)
|
||||
|
||||
|
@ -1,5 +1,4 @@
|
||||
#!/bin/bash
|
||||
export LD_LIBRARY_PATH=/usr/local/occlum/x86_64-linux-musl/lib:$LD_LIBRARY_PATH
|
||||
set -e
|
||||
|
||||
show_usage() {
|
||||
|
@ -47,9 +47,26 @@ make install
|
||||
# Remove all source code and build files
|
||||
rm -rf ${BUILD_DIR}
|
||||
|
||||
# Link the toolchain directory
|
||||
ln -sf ${INSTALL_DIR}/bin/${TARGET}-gcc ${INSTALL_DIR}/bin/occlum-gcc
|
||||
ln -sf ${INSTALL_DIR}/bin/${TARGET}-g++ ${INSTALL_DIR}/bin/occlum-g++
|
||||
ln -sf ${INSTALL_DIR}/bin/${TARGET}-ld ${INSTALL_DIR}/bin/occlum-ld
|
||||
ln -sf ${INSTALL_DIR}/x86_64-linux-musl/lib/libc.so /lib/ld-musl-x86_64.so.1
|
||||
# Generate the wrappers for executables
|
||||
cat > ${INSTALL_DIR}/bin/occlum-gcc <<EOF
|
||||
#!/bin/bash
|
||||
${INSTALL_DIR}/bin/${TARGET}-gcc -fPIC -pie -Wl,-rpath,${INSTALL_DIR}/${TARGET}/lib "\$@"
|
||||
EOF
|
||||
|
||||
cat > ${INSTALL_DIR}/bin/occlum-g++ <<EOF
|
||||
#!/bin/bash
|
||||
${INSTALL_DIR}/bin/${TARGET}-g++ -fPIC -pie -Wl,-rpath,${INSTALL_DIR}/${TARGET}/lib "\$@"
|
||||
EOF
|
||||
|
||||
cat > ${INSTALL_DIR}/bin/occlum-ld <<EOF
|
||||
#!/bin/bash
|
||||
${INSTALL_DIR}/bin/${TARGET}-ld -pie -rpath ${INSTALL_DIR}/${TARGET}/lib "\$@"
|
||||
EOF
|
||||
|
||||
chmod +x ${INSTALL_DIR}/bin/occlum-gcc
|
||||
chmod +x ${INSTALL_DIR}/bin/occlum-g++
|
||||
chmod +x ${INSTALL_DIR}/bin/occlum-ld
|
||||
|
||||
# Make symbolic links
|
||||
ln -sf ${INSTALL_DIR}/${TARGET}/lib/libc.so /lib/ld-musl-x86_64.so.1
|
||||
ln -sf ${INSTALL_DIR} /usr/local/occlum
|
||||
|
Loading…
Reference in New Issue
Block a user