diff --git a/Dockerfile b/Dockerfile new file mode 100644 index 00000000..7de0c4ef --- /dev/null +++ b/Dockerfile @@ -0,0 +1,26 @@ +FROM buildpack-deps:stretch + +RUN \ + set -e; \ + apt update && apt install -y \ + clang \ + ninja-build \ + cmake; \ + cd /root; \ + curl -fL http://releases.llvm.org/7.0.1/llvm-7.0.1.src.tar.xz \ + | tar xJf -; \ + mv /root/llvm-7.0.1.src /root/llvm; \ + mkdir -p /root/llvm/build; + +COPY . /root/llvm/projects/llvm-cbe/ + +RUN \ + set -e; \ + mkdir -p /root/llvm/build; \ + cd /root/llvm/build; \ + cmake -G Ninja -DCMAKE_EXPORT_COMPILE_COMMANDS=ON ..; \ + ninja llvm-cbe; \ + ninja lli; \ + ninja CBEUnitTests; \ + /root/llvm/build/projects/llvm-cbe/unittests/CWriterTest; \ + ln -s /root/llvm/build/bin/llvm-cbe /bin/llvm-cbe; diff --git a/docker-compose.yml b/docker-compose.yml new file mode 100644 index 00000000..2157ae4f --- /dev/null +++ b/docker-compose.yml @@ -0,0 +1,27 @@ +version: "3" + +services: + llvm-cbe: + build: . + working_dir: /root + volumes: + - ./test:/test + command: | + bash -c " + set -e; + + # Navigate to test folder + cd /test/hello_world; + + # Compile main.c to llvm IR + clang -S -emit-llvm main.c; + + # Compile llvm IR back to C + llvm-cbe main.ll; + + # Compile llvm-cbe generated C code + gcc -g -o main.cbe main.cbe.c; + + # Run it + ./main.cbe; + " diff --git a/test/hello_world/.gitignore b/test/hello_world/.gitignore new file mode 100644 index 00000000..473ec066 --- /dev/null +++ b/test/hello_world/.gitignore @@ -0,0 +1,3 @@ +* +!.gitignore +!main.c diff --git a/test/hello_world/main.c b/test/hello_world/main.c new file mode 100644 index 00000000..b453418d --- /dev/null +++ b/test/hello_world/main.c @@ -0,0 +1,6 @@ +#include + +int main() { + printf("Hello, World!\n"); + return 0; +}