Add C/C++ Hello World with Makefile, CMake, and Bazel
This commit is contained in:
		
							parent
							
								
									ba7db98e49
								
							
						
					
					
						commit
						5f26bfc1fb
					
				
							
								
								
									
										2
									
								
								demo/hello_bazel/.gitignore
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
								
								
								
								
								
									
									
								
							
						
						
									
										2
									
								
								demo/hello_bazel/.gitignore
									
									
									
									
										vendored
									
									
										Normal file
									
								
							@ -0,0 +1,2 @@
 | 
				
			|||||||
 | 
					examples
 | 
				
			||||||
 | 
					occlum_workspace
 | 
				
			||||||
							
								
								
									
										23
									
								
								demo/hello_bazel/README.md
									
									
									
									
									
										Normal file
									
								
							
							
								
								
								
								
								
									
									
								
							
						
						
									
										23
									
								
								demo/hello_bazel/README.md
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,23 @@
 | 
				
			|||||||
 | 
					# C++ Sample Project with Bazel
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					This project demonstrates how to use Bazel to build C++ projects for Occlum. To install Bazel on Ubuntu, follow the instructions [here](https://docs.bazel.build/versions/master/install-ubuntu.html).
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					1. Download a Bazel sample project in C++ and build it with Occlum toolchain
 | 
				
			||||||
 | 
					```
 | 
				
			||||||
 | 
					./build_bazel_sample.sh
 | 
				
			||||||
 | 
					```
 | 
				
			||||||
 | 
					When completed, the resulting `hello-world` can be found in `examples/cpp-tutorial/stage3/bazel-bin/main` directory.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					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
 | 
				
			||||||
 | 
					```
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					3. Run `hello-world` on Occlum
 | 
				
			||||||
 | 
					```
 | 
				
			||||||
 | 
					mkdir occlum_workspace && cd occlum_workspace
 | 
				
			||||||
 | 
					occlum init
 | 
				
			||||||
 | 
					cp ../examples/cpp-tutorial/stage3/bazel-bin/main/hello-world image/bin
 | 
				
			||||||
 | 
					occlum build
 | 
				
			||||||
 | 
					occlum run /bin/hello-world
 | 
				
			||||||
 | 
					```
 | 
				
			||||||
							
								
								
									
										10
									
								
								demo/hello_bazel/build_bazel_sample.sh
									
									
									
									
									
										Executable file
									
								
							
							
								
								
								
								
								
									
									
								
							
						
						
									
										10
									
								
								demo/hello_bazel/build_bazel_sample.sh
									
									
									
									
									
										Executable file
									
								
							@ -0,0 +1,10 @@
 | 
				
			|||||||
 | 
					#!/bin/bash
 | 
				
			||||||
 | 
					set -e
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					mkdir examples
 | 
				
			||||||
 | 
					cd examples
 | 
				
			||||||
 | 
					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
 | 
				
			||||||
@ -1,2 +1,3 @@
 | 
				
			|||||||
hello_world
 | 
					hello_world
 | 
				
			||||||
 | 
					build
 | 
				
			||||||
occlum_workspace
 | 
					occlum_workspace
 | 
				
			||||||
							
								
								
									
										6
									
								
								demo/hello_c/CMakeLists.txt
									
									
									
									
									
										Normal file
									
								
							
							
								
								
								
								
								
									
									
								
							
						
						
									
										6
									
								
								demo/hello_c/CMakeLists.txt
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,6 @@
 | 
				
			|||||||
 | 
					CMAKE_MINIMUM_REQUIRED(VERSION 3.5)
 | 
				
			||||||
 | 
					PROJECT(HELLO_WORLD LANGUAGES C VERSION 0.0.1)
 | 
				
			||||||
 | 
					SET(SRC_LIST "hello_world.c")
 | 
				
			||||||
 | 
					MESSAGE(STATUS "This is BINARY dir " ${HELLO_WORLD_BINARY_DIR})
 | 
				
			||||||
 | 
					MESSAGE(STATUS "This is SOURCE dir " ${HELLO_WORLD_SOURCE_DIR})
 | 
				
			||||||
 | 
					ADD_EXECUTABLE(hello_world ${SRC_LIST})
 | 
				
			||||||
							
								
								
									
										12
									
								
								demo/hello_c/Makefile
									
									
									
									
									
										Normal file
									
								
							
							
								
								
								
								
								
									
									
								
							
						
						
									
										12
									
								
								demo/hello_c/Makefile
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,12 @@
 | 
				
			|||||||
 | 
					CC := occlum-gcc
 | 
				
			||||||
 | 
					CFLAGS := -fPIC -pie
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					.PHONY: all clean
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					all: hello_world
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					hello_world: hello_world.c
 | 
				
			||||||
 | 
						$(CC) $(CFLAGS) $^ -o $@
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					clean:
 | 
				
			||||||
 | 
						rm -rf hello_world
 | 
				
			||||||
							
								
								
									
										31
									
								
								demo/hello_c/README.md
									
									
									
									
									
										Normal file
									
								
							
							
								
								
								
								
								
									
									
								
							
						
						
									
										31
									
								
								demo/hello_c/README.md
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,31 @@
 | 
				
			|||||||
 | 
					# C Sample Project with Makefile and CMake
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					This project demonstrates how to use Makefile/CMake to build C projects for Occlum.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					1. Build `hello_world` with Makefile
 | 
				
			||||||
 | 
					```
 | 
				
			||||||
 | 
					make
 | 
				
			||||||
 | 
					```
 | 
				
			||||||
 | 
					Or you can build `hello_world` with CMake
 | 
				
			||||||
 | 
					```
 | 
				
			||||||
 | 
					mkdir build && cd build
 | 
				
			||||||
 | 
					cmake ../ -DCMAKE_C_COMPILER=occlum-gcc -DCMAKE_C_FLAGS="-fPIC -pie"
 | 
				
			||||||
 | 
					make
 | 
				
			||||||
 | 
					cd ..
 | 
				
			||||||
 | 
					cp build/hello_world .
 | 
				
			||||||
 | 
					```
 | 
				
			||||||
 | 
					Either way, the resulting `hello_world` can be found in the current directory.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					2. (Optional) Run `hello_world` on Linux
 | 
				
			||||||
 | 
					```
 | 
				
			||||||
 | 
					./hello_world
 | 
				
			||||||
 | 
					```
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					3. Run `hello_world` on Occlum
 | 
				
			||||||
 | 
					```
 | 
				
			||||||
 | 
					mkdir occlum_workspace && cd occlum_workspace
 | 
				
			||||||
 | 
					occlum init
 | 
				
			||||||
 | 
					cp ../hello_world image/bin
 | 
				
			||||||
 | 
					occlum build
 | 
				
			||||||
 | 
					occlum run /bin/hello_world
 | 
				
			||||||
 | 
					```
 | 
				
			||||||
							
								
								
									
										3
									
								
								demo/hello_cc/.gitignore
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
								
								
								
								
								
									
									
								
							
						
						
									
										3
									
								
								demo/hello_cc/.gitignore
									
									
									
									
										vendored
									
									
										Normal file
									
								
							@ -0,0 +1,3 @@
 | 
				
			|||||||
 | 
					hello_world
 | 
				
			||||||
 | 
					build
 | 
				
			||||||
 | 
					occlum_workspace
 | 
				
			||||||
							
								
								
									
										7
									
								
								demo/hello_cc/CMakeLists.txt
									
									
									
									
									
										Normal file
									
								
							
							
								
								
								
								
								
									
									
								
							
						
						
									
										7
									
								
								demo/hello_cc/CMakeLists.txt
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,7 @@
 | 
				
			|||||||
 | 
					CMAKE_MINIMUM_REQUIRED(VERSION 3.5)
 | 
				
			||||||
 | 
					SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11")
 | 
				
			||||||
 | 
					PROJECT(HELLO_WORLD LANGUAGES CXX VERSION 0.0.1)
 | 
				
			||||||
 | 
					SET(SRC_LIST "hello_world.cc")
 | 
				
			||||||
 | 
					MESSAGE(STATUS "This is BINARY dir " ${HELLO_WORLD_BINARY_DIR})
 | 
				
			||||||
 | 
					MESSAGE(STATUS "This is SOURCE dir " ${HELLO_WORLD_SOURCE_DIR})
 | 
				
			||||||
 | 
					ADD_EXECUTABLE(hello_world ${SRC_LIST})
 | 
				
			||||||
							
								
								
									
										12
									
								
								demo/hello_cc/Makefile
									
									
									
									
									
										Normal file
									
								
							
							
								
								
								
								
								
									
									
								
							
						
						
									
										12
									
								
								demo/hello_cc/Makefile
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,12 @@
 | 
				
			|||||||
 | 
					CXX := occlum-g++
 | 
				
			||||||
 | 
					CXXFLAGS := -std=c++11 -fPIC -pie
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					.PHONY: all clean
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					all: hello_world
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					hello_world: hello_world.cc
 | 
				
			||||||
 | 
						$(CXX) $(CXXFLAGS) $^ -o $@
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					clean:
 | 
				
			||||||
 | 
						rm -rf hello_world
 | 
				
			||||||
							
								
								
									
										31
									
								
								demo/hello_cc/README.md
									
									
									
									
									
										Normal file
									
								
							
							
								
								
								
								
								
									
									
								
							
						
						
									
										31
									
								
								demo/hello_cc/README.md
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,31 @@
 | 
				
			|||||||
 | 
					# C++ Sample Project with Makefile and CMake
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					This project demonstrates how to use Makefile/CMake to build C++ projects for Occlum.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					1. Build `hello_world` with Makefile
 | 
				
			||||||
 | 
					```
 | 
				
			||||||
 | 
					make
 | 
				
			||||||
 | 
					```
 | 
				
			||||||
 | 
					Or you can build `hello_world` with CMake
 | 
				
			||||||
 | 
					```
 | 
				
			||||||
 | 
					mkdir build && cd build
 | 
				
			||||||
 | 
					cmake ../ -DCMAKE_CXX_COMPILER=occlum-g++ -DCMAKE_CXX_FLAGS="-fPIC -pie"
 | 
				
			||||||
 | 
					make
 | 
				
			||||||
 | 
					cd ..
 | 
				
			||||||
 | 
					cp build/hello_world .
 | 
				
			||||||
 | 
					```
 | 
				
			||||||
 | 
					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
 | 
				
			||||||
 | 
					```
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					3. Run `hello_world` on Occlum
 | 
				
			||||||
 | 
					```
 | 
				
			||||||
 | 
					mkdir occlum_workspace && cd occlum_workspace
 | 
				
			||||||
 | 
					occlum init
 | 
				
			||||||
 | 
					cp ../hello_world image/bin
 | 
				
			||||||
 | 
					occlum build
 | 
				
			||||||
 | 
					occlum run /bin/hello_world
 | 
				
			||||||
 | 
					```
 | 
				
			||||||
							
								
								
									
										6
									
								
								demo/hello_cc/hello_world.cc
									
									
									
									
									
										Normal file
									
								
							
							
								
								
								
								
								
									
									
								
							
						
						
									
										6
									
								
								demo/hello_cc/hello_world.cc
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,6 @@
 | 
				
			|||||||
 | 
					#include <iostream>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					int main() {
 | 
				
			||||||
 | 
					    std::cout << "Hello World" << std::endl;
 | 
				
			||||||
 | 
					    return 0;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
@ -1,26 +0,0 @@
 | 
				
			|||||||
CC := occlum-gcc
 | 
					 | 
				
			||||||
CFLAGS := -fPIC -pie
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
.PHONY: all test test-native clean
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
all: hello_world
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
hello_world: hello_world.c
 | 
					 | 
				
			||||||
	$(CC) $(CFLAGS) $^ -o $@
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
# Run hello_world on Occlum inside an SGX enclave
 | 
					 | 
				
			||||||
test: hello_world
 | 
					 | 
				
			||||||
	rm -rf occlum_workspace
 | 
					 | 
				
			||||||
	mkdir occlum_workspace
 | 
					 | 
				
			||||||
	cd occlum_workspace && \
 | 
					 | 
				
			||||||
		occlum init && \
 | 
					 | 
				
			||||||
		cp ../hello_world image/bin && \
 | 
					 | 
				
			||||||
		occlum build && \
 | 
					 | 
				
			||||||
		occlum run /bin/hello_world
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
# Run hello_world on the native OS (e.g., Linux)
 | 
					 | 
				
			||||||
test-native:
 | 
					 | 
				
			||||||
	./hello_world
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
clean:
 | 
					 | 
				
			||||||
	rm -rf hello_world occlum_workspace
 | 
					 | 
				
			||||||
@ -12,6 +12,7 @@ RUN apt-get update && apt-get install -y --no-install-recommends \
 | 
				
			|||||||
        curl \
 | 
					        curl \
 | 
				
			||||||
        debhelper \
 | 
					        debhelper \
 | 
				
			||||||
        expect \
 | 
					        expect \
 | 
				
			||||||
 | 
					        g++ \
 | 
				
			||||||
        gdb \
 | 
					        gdb \
 | 
				
			||||||
        git-core \
 | 
					        git-core \
 | 
				
			||||||
        jq \
 | 
					        jq \
 | 
				
			||||||
@ -31,10 +32,13 @@ RUN apt-get update && apt-get install -y --no-install-recommends \
 | 
				
			|||||||
        pkg-config \
 | 
					        pkg-config \
 | 
				
			||||||
        protobuf-compiler \
 | 
					        protobuf-compiler \
 | 
				
			||||||
        python \
 | 
					        python \
 | 
				
			||||||
 | 
					        python-pip \
 | 
				
			||||||
        sudo \
 | 
					        sudo \
 | 
				
			||||||
 | 
					        unzip \
 | 
				
			||||||
        uuid-dev \
 | 
					        uuid-dev \
 | 
				
			||||||
        vim \
 | 
					        vim \
 | 
				
			||||||
        wget \
 | 
					        wget \
 | 
				
			||||||
 | 
					        zip \
 | 
				
			||||||
        && \
 | 
					        && \
 | 
				
			||||||
    apt-get clean && \
 | 
					    apt-get clean && \
 | 
				
			||||||
    rm -rf /var/lib/apt/lists/*
 | 
					    rm -rf /var/lib/apt/lists/*
 | 
				
			||||||
 | 
				
			|||||||
		Loading…
	
		Reference in New Issue
	
	Block a user