129 lines
4.3 KiB
Docker
129 lines
4.3 KiB
Docker
# MAIN: https://yices.csl.sri.com/
|
|
# REPO: https://github.com/SRI-CSL/yices2/
|
|
FROM localhost/notwa-util AS downloader
|
|
ENV YICES_COMMIT=708e65e260125a6196fad71ed4ebf4a41f4effc4
|
|
ENV YICES_SHA256=1f8087d01ab5d63821ce5e0e3ef12195bdede112c2f859f4733e9909d2ce38c8
|
|
# MAIN: https://gmplib.org/
|
|
# REPO: https://gmplib.org/repo/
|
|
ENV GMP_VERSION=6.2.1
|
|
ENV GMP_SHA256=fd4829912cddd12f84181c3451cc752be224643e87fac497b69edddadc49b4f2
|
|
# MAIN: http://fmv.jku.at/kissat/
|
|
# REPO: https://github.com/arminbiere/kissat
|
|
# FORK: https://github.com/BrunoDutertre/kissat
|
|
ENV KISSAT_COMMIT=315cd3227fd2321d29d10f7d8572011bf00174a5
|
|
ENV KISSAT_SHA256=031fca7efcb17c6f1921dd056052bd373de724e445fc2ed37bfdd5954148119f
|
|
|
|
RUN --mount=type=cache,id=common,target=/media/common,sharing=locked \
|
|
--mount=type=tmpfs,target=/tmp : \
|
|
&& cd /media/common \
|
|
&& name=yices \
|
|
&& export remote_fn="$YICES_COMMIT.tar.gz" \
|
|
&& export local_fn="$name-$remote_fn" \
|
|
&& export remote_url="https://github.com/SRI-CSL/yices2/archive/$remote_fn" \
|
|
&& export dest=/$name \
|
|
&& export sha256="$YICES_SHA256" \
|
|
&& acquire \
|
|
\
|
|
&& name=gmp \
|
|
&& export remote_fn="$name-$GMP_VERSION.tar.xz" \
|
|
&& export local_fn="$remote_fn" \
|
|
&& export remote_url="https://gmplib.org/download/gmp/$remote_fn" \
|
|
&& export dest=/$name \
|
|
&& export sha256="$GMP_SHA256" \
|
|
&& acquire \
|
|
\
|
|
&& name=kissat \
|
|
&& export remote_fn="$KISSAT_COMMIT.tar.gz" \
|
|
&& export local_fn="$name-$remote_fn" \
|
|
&& export remote_url="https://github.com/arminbiere/kissat/archive/$remote_fn" \
|
|
&& export dest=/$name \
|
|
&& export sha256="$KISSAT_SHA256" \
|
|
&& acquire \
|
|
;
|
|
|
|
FROM localhost/cosmo AS builder
|
|
|
|
RUN apk add --no-cache autoconf gperf make
|
|
|
|
RUN : \
|
|
&& cd /cosmopolitan \
|
|
&& tar zxf dist/headers.tar.gz \
|
|
;
|
|
COPY --chmod=0755 --from=localhost/notwa-util /usr/local/bin/cosmocc /usr/local/bin/quickconf /usr/bin/
|
|
|
|
COPY --from=downloader /kissat /kissat
|
|
WORKDIR /kissat
|
|
RUN : \
|
|
# the alarm function is located here: \
|
|
&& sed -i '/#include <unistd.h>/i\\#include <time.h>' src/application.c \
|
|
# completely override CFLAGS: \
|
|
&& sed -i '/passtocompiler -fpic/i\\CFLAGS=" -O2 -g -Wall"' configure \
|
|
# we don't need -static here because it's already part of cosmocc: \
|
|
&& CC=cosmocc ./configure \
|
|
;
|
|
|
|
RUN : \
|
|
&& make -j2 \
|
|
&& install -m 0644 -D -t /usr/local/lib build/libkissat.a \
|
|
&& install -m 0644 -D -t /usr/local/include -m644 src/kissat.h \
|
|
;
|
|
|
|
COPY --from=downloader /gmp /gmp
|
|
WORKDIR /gmp
|
|
RUN : \
|
|
&& CC=cosmocc CFLAGS="-O2 -g" \
|
|
# specify some generic old CPU for best compatibility/reproduciblity: \
|
|
# core2 introduced SSSE3, which cosmopolitan depends on, so use that: \
|
|
ac_cv_build='core2-pc-linux-gnu' \
|
|
ac_cv_host='core2-pc-linux-gnu' \
|
|
# this check takes ages for some reason, so just hardcode it here: \
|
|
gmp_cv_c_double_format='IEEE little endian' \
|
|
quickconf --disable-shared \
|
|
;
|
|
|
|
RUN : \
|
|
&& make -j2 \
|
|
&& make install \
|
|
;
|
|
|
|
COPY --from=downloader /yices /yices
|
|
WORKDIR /yices
|
|
RUN : \
|
|
# patch up some trivial incompatibilities with cosmopolitan: \
|
|
&& sed -i 's/\bdonothing\b/&_/g' src/context/context.c \
|
|
&& sed -i 's/\bhextoint\b/&_/g' src/terms/bv_constants.c src/terms/bv64_constants.c \
|
|
&& sed -i '/#include <unistd.h>/i\\#include <time.h>' src/utils/timeout.c \
|
|
# the static-lib target attempts to build static_libyices_dynamic. don't do that. \
|
|
&& sed -i 's/ $(static_libyices_dynamic)//g' src/Makefile \
|
|
\
|
|
&& autoconf \
|
|
&& CC=cosmocc \
|
|
CFLAGS="-O2 -g" \
|
|
CPPFLAGS="-I/usr/local/include -DHAVE_KISSAT" \
|
|
LDFLAGS="-L/usr/local/lib" \
|
|
LIBS="-lkissat" \
|
|
quickconf --prefix= \
|
|
;
|
|
|
|
RUN make -j2 static-dist
|
|
|
|
RUN : \
|
|
&& mv build/x86_64-pc-linux-gnu-release/static_dist dist \
|
|
&& cd dist/bin \
|
|
&& for bin in yices yices-sat yices-smt yices-smt2 \
|
|
;do : \
|
|
&& mv "$bin" "$bin.com.dbg" \
|
|
&& objcopy -S -O binary "$bin.com.dbg" "$bin.com" \
|
|
;done \
|
|
&& cd /kissat/build \
|
|
&& mv "kissat" "kissat.com.dbg" \
|
|
&& objcopy -S -O binary "kissat.com.dbg" "kissat.com" \
|
|
;
|
|
|
|
FROM scratch AS runner
|
|
COPY --chmod=0755 --from=localhost/notwa-util /usr/local/bin/busybox /bin/busybox
|
|
COPY --chmod=0755 --from=builder /cosmopolitan/dist/def/ape.elf /bin/ape
|
|
COPY --from=builder /yices/config.cache /yices/config.log /yices/config.status /var/local/
|
|
COPY --from=builder /yices/dist/bin /bin
|
|
COPY --chmod=0755 --from=builder /kissat/build/kissat.com /kissat/build/kissat.com.dbg /bin/
|
|
ENTRYPOINT ["/bin/ape", "/bin/yices.com"]
|