summaryrefslogtreecommitdiff
path: root/tiger-compiler/docker/Dockerfile-testing
blob: fb2d904cb2ccf78ac8c7ab5978854f2fe69c31d5 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
# This Dockerfile is currently a work in progress. Due to Criterion being a
# wretched pain in the ass to configure on non-supported distribution, it is
# currently not operational for typical usage. However, it still remains
# available for testing and custom experimentations

FROM alpine:3.21.3 AS build-havm
LABEL org.opencontainer.image.authors="Clément Metz <clement.metz@epita.fr>"

RUN apk add --no-cache \
    build-base \
    make \
    automake \
    autoconf \
    texinfo \
    ghc

RUN wget https://gitlab.lre.epita.fr/tiger/havm/-/archive/master/havm-master.tar.gz \
    && tar xvf havm-master.tar.gz \
    && cd havm-master \
    && ./bootstrap \
    && ./configure \
    && make -j install


FROM alpine:3.21.3 AS build-nolimips
LABEL org.opencontainer.image.authors="Clément Metz <clement.metz@epita.fr>"

RUN apk add --no-cache \
    build-base \
    make \
    automake \
    autoconf \
    autoconf-archive \
    texinfo \
    libtool \
    python3 \
    clang-extra-tools \
    flex \
    bison

RUN wget https://gitlab.lre.epita.fr/tiger/nolimips/-/archive/master/nolimips-master.tar.gz \
    && tar xvf nolimips-master.tar.gz \
    && cd nolimips-master \
    && ./bootstrap \
    && ./configure \
    && make -j install


FROM alpine:3.21.3 AS build-re-flex
LABEL org.opencontainer.image.authors="Clément Metz <clement.metz@epita.fr>"

RUN apk add --no-cache \
    build-base \
    make \
    automake \
    autoconf \
    && wget https://github.com/Genivia/RE-flex/archive/refs/tags/v3.2.12.zip \
    && unzip v3.2.12.zip \
    && cd RE-flex-3.2.12 \
    && autoreconf --install --force \
    && ./configure \
    && make -j install


FROM alpine:3.21.3 AS get-criterion
LABEL org.opencontainer.image.authors="Clément Metz <clement.metz@epita.fr>"

# TODO: Figure out a good way to fetch Criterion for the final repo

RUN wget https://github.com/Snaipe/Criterion/releases/download/v2.4.2/criterion-2.4.2-linux-x86_64.tar.xz \
    && tar -xf criterion-2.4.2-linux-x86_64.tar.xz \
    && rm criterion-2.4.2-linux-x86_64.tar.xz


FROM alpine:3.21.3 AS buildenv-slim
LABEL org.opencontainer.image.name="buildenv-slim" \
      org.opencontainer.image.authors="Clément Metz <clement.metz@epita.fr>" \
      org.opencontainer.image.version="1.1.0" \
      org.opencontainer.image.comment="il n'y avait pas à nous filer une image de 9Go aussi :c"

COPY --from=build-havm \
    /havm-master/src/havm \
    /usr/local/bin/

COPY --from=build-nolimips \
     --chmod=644 \
     /usr/local/lib/libnolimips.a \
     /usr/local/lib/
COPY --from=build-nolimips \
     /usr/local/lib/libnolimips.la /usr/local/lib/libnolimips.so.0.0.0 \
     /usr/local/lib/
COPY --from=build-nolimips \
     /nolimips-master/src/.libs/nolimips \
     /usr/local/bin/

COPY --from=build-re-flex \
     --chmod=644 \
     /usr/local/lib/libreflex.a \
     /usr/local/lib/libreflexmin.a \
     /usr/local/lib/
COPY --from=build-re-flex \
     /usr/local/include/reflex \
     /usr/local/include/reflex
COPY --from=build-re-flex \
     /usr/local/bin/reflex \
     /usr/local/bin/

COPY --from=get-criterion \
     /criterion-2.4.2/include/criterion \
     /usr/local/include/criterion
COPY --from=get-criterion \
     /criterion-2.4.2/lib/libcriterion.so.3.2.0 \
     /usr/local/lib/

RUN apk add --no-cache \
    build-base \
    make \
    autoconf \
    automake \
    libtool \
    flex \
    bison \
    boost-dev \
    llvm19-dev \
    clang19 \
    ghc

RUN ln -s /usr/local/lib/libnolimips.so.0.0.0 /usr/local/lib/libnolimips.so.0 \
    && ln -s /usr/local/lib/libnolimips.so.0 /usr/local/lib/libnolimips.so \
    && ln -s /usr/local/lib/libcriterion.so.3.2.0 /usr/local/lib/libcriterion.so.3 \
    && ln -s /usr/local/lib/libcriterion.so.3 /usr/local/lib/libcriterion.so \
    && ranlib /usr/local/lib/libnolimips.a \
    && ranlib /usr/local/lib/libreflex.a \
    && PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/sbin" ldconfig -n /usr/local/lib