diff --git a/docker/Dockerfile b/docker/Dockerfile index 65b06ec..6780595 100644 --- a/docker/Dockerfile +++ b/docker/Dockerfile @@ -1,14 +1,18 @@ -FROM debian:8-slim - -RUN apt-get update \ - && apt-get install autoconf libtool nasm libpng-dev automake pkg-config build-essential wget \ - -yq --no-install-suggests --no-install-recommends --force-yes - -WORKDIR /src -RUN wget --no-check-certificate https://github.com/mozilla/mozjpeg/archive/v3.3.1.tar.gz -O mozjpeg-3.3.1.tar.gz -RUN tar -xzvf mozjpeg-3.3.1.tar.gz -WORKDIR /src/mozjpeg-3.3.1 - -RUN autoreconf -fiv \ - && ./configure LDFLAGS=-static libpng_LIBS='/usr/lib/x86_64-linux-gnu/libpng12.a -lz' --enable-static --disable-shared \ - && make -j8 +FROM docker.io/library/alpine:latest +RUN apk --update --no-cache upgrade && apk add --no-cache \ + build-base \ + nasm \ + cmake \ + ninja \ + curl \ + libpng-dev libpng-static \ + zlib-dev zlib-static +RUN adduser -G wheel -D builder +WORKDIR /home/builder +USER builder +ENV mozjpeg_version 4.0.0 +# 2020-11-13 UTC +ENV SOURCE_DATE_EPOCH 1605225600 +RUN mkdir bin +COPY /build.sh build.sh +RUN ["/bin/sh", "build.sh"] diff --git a/docker/build.sh b/docker/build.sh new file mode 100644 index 0000000..5520aa0 --- /dev/null +++ b/docker/build.sh @@ -0,0 +1,22 @@ +#!/bin/sh +set -e + +curl -fLO "https://github.com/mozilla/mozjpeg/archive/v${mozjpeg_version}.tar.gz" +tar xf "v${mozjpeg_version}.tar.gz" + +export CFLAGS='-pipe -flto -no-pie' +export LDFLAGS='-flto -no-pie -static -static-libgcc' + +# This unsets CMAKE_SHARED_LIBRARY_LINK_C_FLAGS inside CMakeLists.txt, +# which is necessary to build a static binary. It can't be unset from the CLI. +sed -E -i.bk '/set\(LIBJPEG_TURBO_V/i\ +set(CMAKE_SHARED_LIBRARY_LINK_C_FLAGS)' "mozjpeg-$mozjpeg_version"/CMakeLists.txt + +cmake -S "mozjpeg-$mozjpeg_version" -B build -G Ninja \ + -D ENABLE_SHARED=OFF \ + -D CMAKE_INSTALL_PREFIX=/usr/local \ + -D CMAKE_FIND_LIBRARY_SUFFIXES=.a \ + -D CMAKE_LINK_SEARCH_END_STATIC=1 -D CMAKE_LINK_SEARCH_START_STATIC=1 + +cd build && ninja +strip cjpeg-static diff --git a/package.json b/package.json index 6d86413..00880ad 100644 --- a/package.json +++ b/package.json @@ -11,7 +11,7 @@ "scripts": { "postinstall": "node lib/install.js", "test": "xo && ava --timeout=120s", - "build-linux": "docker build --tag imagemin/mozjpeg docker && docker run --rm --volume $(pwd)/vendor/linux:/src/out imagemin/mozjpeg cp cjpeg /src/out" + "build-linux": "docker build --tag imagemin/mozjpeg docker/ && docker create --name mozjpeg_ctr imagemin/mozjpeg && docker cp mozjpeg_ctr:/home/builder/build/cjpeg-static ./vendor/linux/cjpeg && docker container rm mozjpeg_ctr" }, "files": [ "index.js", diff --git a/vendor/linux/cjpeg b/vendor/linux/cjpeg index 7477364..bb70e56 100755 Binary files a/vendor/linux/cjpeg and b/vendor/linux/cjpeg differ