forked from ChipFlow/Xyce-build
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathDockerfile
More file actions
146 lines (107 loc) · 4.47 KB
/
Copy pathDockerfile
File metadata and controls
146 lines (107 loc) · 4.47 KB
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
135
136
137
138
139
140
141
142
143
144
145
146
#--------------------------
# Base image for building
#--------------------------
FROM ubuntu:24.04 AS base
# Install packages
COPY data/ubuntu-packages.txt data/ubuntu-packages.txt
# Prevent interactive prompts during package installation
ENV DEBIAN_FRONTEND=noninteractive
# signal its docker build
ENV DOCKER_BUILD=1
# Install system dependencies
RUN apt-get update && apt-get install -y \
$(cat data/ubuntu-packages.txt) \
sudo \
&& rm -rf /var/lib/apt/lists/*
# Create a non-root user for building
RUN useradd -m -u 1001 -s /bin/bash builder && \
echo 'builder ALL=(ALL) NOPASSWD:ALL' >> /etc/sudoers
RUN mkdir -p /home/builder/scripts
COPY --chown=builder:builder scripts/*ubuntu* /home/builder/scripts
COPY --chown=builder:builder data /home/builder/data/
ENV NO_UBUNTU_INSTALL=1
#--------------------------
# Assemble Sources
#--------------------------
FROM base AS source
COPY --chown=builder:builder scripts/fetch-source.sh /home/builder/scripts/fetch-source.sh
COPY --chown=builder:builder _source* /home/builder/_source
COPY --chown=builder:builder build.sh /home/builder/build.sh
USER builder
WORKDIR /home/builder
ENV CCACHE_DIR=/ccache
RUN --mount=type=cache,target=/ccache,uid=1001 ./build.sh -s
#--------------------------
# Build Trilinos
#--------------------------
FROM source AS trilinos
COPY --chown=builder:builder scripts/*trilinos* /home/builder/scripts/
COPY --chown=builder:builder _build_Linux*/trilinos* /home/builder/trilinos
USER builder
WORKDIR /home/builder
ENV NO_UBUNTU_INSTALL=1
RUN --mount=type=cache,target=/ccache,uid=1001 ./build.sh -t
#--------------------------
# Build XDM
#--------------------------
FROM source AS xdm
COPY --chown=builder:builder scripts/build-xdm.sh /home/builder/scripts/build-xdm.sh
COPY --chown=builder:builder _build_Linux*/XDM* /home/builder/XDM
COPY --from=trilinos --chown=builder:builder /home/builder/_build_Linux/libs* _build_Linux/libs
USER builder
WORKDIR /home/builder
RUN --mount=type=cache,target=/ccache,uid=1001 ./build.sh -m
#--------------------------
# Build Xyce
#--------------------------
FROM source AS xyce
COPY --chown=builder:builder scripts/build-xyce.sh /home/builder/scripts/build-xyce.sh
COPY --chown=builder:builder scripts/install-xyce.sh /home/builder/scripts/install-xyce.sh
COPY --chown=builder:builder scripts/install-xdm.sh /home/builder/scripts/install-xdm.sh
COPY --chown=builder:builder _build_Linux*/Xyce* /home/builder/Xyce
COPY --from=trilinos --chown=builder:builder /home/builder/_build_Linux/libs* _build_Linux/libs
COPY --from=xdm --chown=builder:builder /home/builder/_build_Linux/XDM* _build_Linux/XDM
USER builder
WORKDIR /home/builder
RUN --mount=type=cache,target=/ccache,uid=1001 ./build.sh -x
#--------------------------
# Install Xyce and XDM
#--------------------------
RUN --mount=type=cache,target=/ccache,uid=1001 ./build.sh -i
#--------------------------
# Run regression tests
#--------------------------
FROM xyce AS regression
COPY --from=xdm --chown=builder:builder /home/builder/_build_Linux/XDM* _build_Linux/XDM
COPY --chown=builder:builder scripts/*regression* /home/builder/scripts/
COPY --chown=builder:builder scripts/*install* /home/builder/scripts/
USER builder
WORKDIR /home/builder
RUN --mount=type=cache,target=/ccache,uid=1001 ./build.sh -r
# Verify the installation
RUN ls -la _install_Linux/bin/ && \
_install_Linux/bin/Xyce --version || echo "Xyce build completed"
RUN ls -laR . > file.list
#--------------------------
# Build AppImage
#--------------------------
FROM xyce AS appimage
COPY --chown=builder:builder scripts/build-appimage.sh /home/builder/scripts/build-appimage.sh
COPY --chown=builder:builder data/AppImageBuilder.yml /home/builder/data/AppImageBuilder.yml
COPY --chown=builder:builder data/Xyce.desktop /home/builder/data/Xyce.desktop
COPY --chown=builder:builder data/xyce.png /home/builder/data/xyce.png
USER builder
WORKDIR /home/builder
# Install appimage-builder and dependencies
USER root
RUN apt-get update && apt-get install -y wget gtk-update-icon-cache squashfs-tools && rm -rf /var/lib/apt/lists/*
USER builder
RUN --mount=type=cache,target=/ccache,uid=1001 ./build.sh -a
# Verify the AppImage was created
RUN ls -lh _build_Linux/Xyce-*.AppImage || echo "AppImage build completed"
#--------------------------
# Export stage for easy artifact extraction
#--------------------------
FROM scratch AS export
COPY --from=appimage /home/builder/_build_Linux/Xyce-*.AppImage /
COPY --from=appimage /home/builder/_install_Linux /install/