Commit d529b3b0 authored by Eric Timmons's avatar Eric Timmons
Browse files

Start using lake to manage useful build tasks

parent 4415f9f8
Loading
Loading
Loading
Loading
+15 −0
Original line number Diff line number Diff line
@@ -91,3 +91,18 @@
[submodule "ext/unix-opts"]
	path = ext/unix-opts
	url = https://github.com/libre-man/unix-opts.git
[submodule "ext/lake"]
	path = ext/lake
	url = https://github.com/takagi/lake.git
[submodule "ext/cl-syntax"]
	path = ext/cl-syntax
	url = https://github.com/m2ym/cl-syntax.git
[submodule "ext/cl-interpol"]
	path = ext/cl-interpol
	url = https://github.com/edicl/cl-interpol.git
[submodule "ext/cl-unicode"]
	path = ext/cl-unicode
	url = https://github.com/edicl/cl-unicode.git
[submodule "ext/lparallel"]
	path = ext/lparallel
	url = https://github.com/lmj/lparallel.git

Lakefile

0 → 100644
+73 −0
Original line number Diff line number Diff line
;;;; -*- mode: common-lisp; -*-
;;;; CLPM Lakefile (like make, but in Lisp!)
;;;;
;;;; This software is part of CLPM. See README.org for more information. See
;;;; LICENSE for license information.

(in-package :cl-user)
(defpackage :clpm/lake
  (:use :cl :lake :cl-syntax)
  (:shadowing-import-from :lake
                          :directory))
(in-package :clpm/lake)

(defvar *lakefile-truename* *load-truename*)

(use-syntax :interpol)

(defun clpm-version ()
  (asdf:component-version (asdf:find-system :clpm)))

(namespace "docker-build"
  (task "all" ("glibc" "musl"))

  (task "glibc-builder" ()
    (sh "docker build -f docker/Dockerfile.build-debian -t clpm/clpm-build:debian docker"))

  (task "musl-builder" ()
    (sh "docker build -f docker/Dockerfile.build-alpine -t clpm/clpm-build:alpine docker"))

  (task "glibc" ("glibc-builder")
    (sh #?"docker run -i -t --rm -v ${(uiop:pathname-directory-pathname *lakefile-truename*)}:/clpm:ro -v ${(uiop:pathname-directory-pathname *lakefile-truename*)}/build/docker/debian:/clpm/build clpm/clpm-build:debian")
    (sh "cp build/docker/debian/bin/dynamic/clpm build/bin/clpm-x86_64-linux-gnu-dynamic")
    (sh "cp build/docker/debian/bin/static/clpm build/bin/clpm-x86_64-linux-gnu-static"))

  (task "musl" ("musl-builder")
    (sh #?"docker run -i -t --rm -v ${(uiop:pathname-directory-pathname *lakefile-truename*)}:/clpm:ro -v ${(uiop:pathname-directory-pathname *lakefile-truename*)}/build/docker/alpine:/clpm/build clpm/clpm-build:alpine")
    (sh "cp build/docker/alpine/bin/dynamic/clpm build/bin/clpm-x86_64-linux-musl-dynamic")
    (sh "cp build/docker/alpine/bin/static/clpm build/bin/clpm-x86_64-linux-musl-static")))

(namespace "release"
  (task "all" ("files")
    (echo (clpm-version)))

  (task "dir" ()
    (ensure-directories-exist (merge-pathnames #?"build/releases/${(clpm-version)}/"
                                               (uiop:getcwd))))

  (task "files" (":docker-build" "dir")
    (uiop:delete-file-if-exists #?"build/releases/${(clpm-version)}/clpm-${(clpm-version)}.DIGESTS")
    (with-open-file (s #?"build/releases/${(clpm-version)}/clpm-${(clpm-version)}.DIGESTS"
                       :direction :output)
      (write-line "The SHA512 checksums of the following files are:" s)
      (terpri s))
    (flet ((insert-version (s)
             (concatenate 'string "clpm-" (clpm-version) (subseq s 4))))
      (dolist (f '("clpm-x86_64-linux-gnu-dynamic" "clpm-x86_64-linux-gnu-static"
                   "clpm-x86_64-linux-musl-dynamic" "clpm-x86_64-linux-musl-static"))
        (sh #?"cp build/bin/${f} build/releases/${(clpm-version)}/${(insert-version f)}")
        (uiop:with-current-directory (#?"build/releases/${(clpm-version)}/")
          (sh #?"sha512sum ${(insert-version f)} >> clpm-${(clpm-version)}.DIGESTS"))))))

(task ("release" version) ("release:all"))

(task "docker-build" ("docker-build:all"))

(task "build" ()
  (sh "scripts/clpm-build")
  (sh "cp build/bin/dynamic/clpm build/bin/clpm-dynamic")
  (sh "cp build/bin/static/clpm build/bin/clpm-static"))

(task "all" ("build" "docker-build"))

(task "default" ("all"))
+22 −0
Original line number Diff line number Diff line
# Builds a Docker image to build CLPM with Alpine
#
# This software is part of CLPM. See README.org for more information. See
# LICENSE for license information.
FROM daewok/sbcl:1.4.16-alpine-build as sbcl-builder

COPY customize-target-features.lisp /usr/local/src/sbcl-${SBCL_VERSION}/

RUN rebuild-sbcl

FROM alpine:3.8
RUN apk add --no-cache openssl-dev gcc zlib-dev musl-dev

COPY --from=sbcl-builder /usr/local/bin/sbcl /usr/local/bin/sbcl
COPY --from=sbcl-builder /usr/local/lib/ /usr/local/lib/

VOLUME /clpm
WORKDIR /clpm

ENV ASDF_OUTPUT_TRANSLATIONS="(:output-translations :ignore-inherited-configuration (:root (\"/clpm/build/docker-cl-cache/\" :implementation :**/ :*.*.*)))" CLPM_BUILD_CACHE_DIR=/clpm/build/cl-cache

ENTRYPOINT ["sbcl", "--script", "/clpm/scripts/clpm-build"]
+24 −0
Original line number Diff line number Diff line
# Builds a Docker image to build CLPM with Debian
#
# This software is part of CLPM. See README.org for more information. See
# LICENSE for license information.
FROM daewok/sbcl:1.4.16-debian-build as sbcl-builder

COPY customize-target-features.lisp /usr/local/src/sbcl-${SBCL_VERSION}/

RUN rebuild-sbcl

FROM debian:stretch
RUN apt-get update \
    && apt-get install -y --no-install-recommends build-essential libssl1.0-dev libz-dev \
    && rm -rf /var/lists/apt

COPY --from=sbcl-builder /usr/local/bin/sbcl /usr/local/bin/sbcl
COPY --from=sbcl-builder /usr/local/lib/ /usr/local/lib/

VOLUME /clpm
WORKDIR /clpm

ENV ASDF_OUTPUT_TRANSLATIONS="(:output-translations :ignore-inherited-configuration (:root (\"/clpm/build/docker-cl-cache/\" :implementation :**/ :*.*.*)))" CLPM_BUILD_CACHE_DIR=/clpm/build/cl-cache

ENTRYPOINT ["sbcl", "--script", "/clpm/scripts/clpm-build"]
+11 −0
Original line number Diff line number Diff line
;;;; File to customize SBCL's features while building it in Docker

(lambda (list)
  (flet ((enable (x)
           (pushnew x list))
         (disable (x)
           (setf list (remove x list))))
    (enable :sb-core-compression)
    (enable :sb-dynamic-core)
    (enable :sb-linkable-runtime))
  list)
Loading