From 616d834838c8b258d357f2d0ac6f4eddae3dee4c Mon Sep 17 00:00:00 2001 From: Colin Yates Date: Mon, 6 Aug 2018 17:40:06 +0100 Subject: [PATCH] initial commit --- .gitignore | 1 + Dockerfile | 25 +++++++++++++++++++++++++ LICENSE => project/LICENSE | 0 project/docker_nim_dev_example.nimble | 13 +++++++++++++ project/src/docker_nim_dev_example.nim | 14 ++++++++++++++ project/tests/test1.nim | 1 + project/tests/test1.nims | 1 + scripts/build-linux.sh | 17 +++++++++++++++++ scripts/build-windows.sh | 18 ++++++++++++++++++ scripts/build.sh | 9 +++++++++ 10 files changed, 99 insertions(+) create mode 100644 Dockerfile rename LICENSE => project/LICENSE (100%) create mode 100644 project/docker_nim_dev_example.nimble create mode 100644 project/src/docker_nim_dev_example.nim create mode 100644 project/tests/test1.nim create mode 100644 project/tests/test1.nims create mode 100755 scripts/build-linux.sh create mode 100755 scripts/build-windows.sh create mode 100755 scripts/build.sh diff --git a/.gitignore b/.gitignore index 67d9b34..ca26be9 100644 --- a/.gitignore +++ b/.gitignore @@ -1 +1,2 @@ nimcache/ +nimcache diff --git a/Dockerfile b/Dockerfile new file mode 100644 index 0000000..80cb859 --- /dev/null +++ b/Dockerfile @@ -0,0 +1,25 @@ +FROM debian + +ENV PATH=$PATH:/opt/Nim/bin:/root/.nimble/bin + +RUN apt update && \ + apt -y install libc-dev gcc curl git perl mingw-w64 \ + && \ + rm -rf /var/cache/apt/; + +RUN mkdir -p /opt && cd /opt && \ + curl -LO https://github.com/nim-lang/Nim/archive/v0.18.0.tar.gz && \ + tar zxf v0.18.0.tar.gz && rm -f v0.18.0.tar.gz && \ + mv Nim-0.18.0 Nim && cd Nim && \ + git clone --depth 1 git://github.com/nim-lang/csources && \ + cd csources && sh build.sh && \ + cd .. && ./bin/nim c koch && ./koch boot -d:release && \ + nim e install_nimble.nims && \ + rm -rf /opt/Nim/tests; + +ADD scripts /scripts +ADD project /src + +WORKDIR /src + +CMD /scripts/build.sh diff --git a/LICENSE b/project/LICENSE similarity index 100% rename from LICENSE rename to project/LICENSE diff --git a/project/docker_nim_dev_example.nimble b/project/docker_nim_dev_example.nimble new file mode 100644 index 0000000..f7db67d --- /dev/null +++ b/project/docker_nim_dev_example.nimble @@ -0,0 +1,13 @@ +# Package + +version = "0.1.0" +author = "Colin Yates" +description = "A new awesome nimble package" +license = "MIT" +srcDir = "src" +bin = @["docker_nim_dev_example"] + +# Dependencies + +requires "nim >= 0.18.0" +requires "zip" diff --git a/project/src/docker_nim_dev_example.nim b/project/src/docker_nim_dev_example.nim new file mode 100644 index 0000000..cc1dfce --- /dev/null +++ b/project/src/docker_nim_dev_example.nim @@ -0,0 +1,14 @@ +import os, zip/zipfiles + +# Hello Nim! +echo "Hello, World!" + +proc createZip(rootDir: string) = + let filename = rootDir / "out.gz" + var z: ZipArchive + discard open(z, filename, fmWrite) + for x in walkDirRec(rootDir): + addFile(z, x, x) + close z + +createZip("../") diff --git a/project/tests/test1.nim b/project/tests/test1.nim new file mode 100644 index 0000000..ba13c99 --- /dev/null +++ b/project/tests/test1.nim @@ -0,0 +1 @@ +doAssert(1 + 1 == 2) diff --git a/project/tests/test1.nims b/project/tests/test1.nims new file mode 100644 index 0000000..3bb69f8 --- /dev/null +++ b/project/tests/test1.nims @@ -0,0 +1 @@ +switch("path", "$projectDir/../src") \ No newline at end of file diff --git a/scripts/build-linux.sh b/scripts/build-linux.sh new file mode 100755 index 0000000..4e3a180 --- /dev/null +++ b/scripts/build-linux.sh @@ -0,0 +1,17 @@ +#!/bin/bash +my_pwd=`pwd` +echo "Currently in $my_pwd" + +mkdir -p /workdir/linux +cp -Rp * /workdir/linux/ +rm -rf /workdir/linux/src/nimcache +cd /workdir/linux + +nimble c --cpu:amd64 --os:linux --opt:speed --embedsrc --threads:on --checks:on -c -d:release src/*.nim +cd src +cp /opt/Nim/lib/nimbase.h nimcache +gcc -o linux.exe nimcache/*.c +cp linux.exe $my_pwd/dist/ +echo "Copied linux.exe to $my_pwd/dist" + +cd $my_pwd diff --git a/scripts/build-windows.sh b/scripts/build-windows.sh new file mode 100755 index 0000000..d1c69a1 --- /dev/null +++ b/scripts/build-windows.sh @@ -0,0 +1,18 @@ +#!/bin/bash +my_pwd=`pwd` +echo "Currently in $my_pwd" + +mkdir -p /workdir/windows +cp -Rp * /workdir/windows/ +rm -rf /workdir/windows/src/nimcache +cd /workdir/windows + +nimble c --cpu:amd64 --os:windows --opt:speed --embedsrc --threads:on --checks:on -c -d:release src/*.nim +cd src +cp /opt/Nim/lib/nimbase.h nimcache/ +x86_64-w64-mingw32-gcc --save-temps nimcache/*.c -o windows.exe + +cp windows.exe $my_pwd/dist/ +echo "Copied windows.exe to $my_pwd/dist" + +cd $my_pwd diff --git a/scripts/build.sh b/scripts/build.sh new file mode 100755 index 0000000..dc20a15 --- /dev/null +++ b/scripts/build.sh @@ -0,0 +1,9 @@ +#!/bin/bash +mkdir /workdir +mkdir -p dist + +# download the various caches and dependencies +nimble install -d -y + +/scripts/build-linux.sh +/scripts/build-windows.sh