25
25
FROM ubuntu:22.04 AS build
26
26
27
27
# Versions
28
- ARG GCC_MAJOR_VERSION=12
29
- ARG NASM_VERSION=2.16.01
30
- ARG CSPELL_VERSION=5.20.0
31
- ARG MARKDOWNLINT_VERSION=0.32.2
32
-
33
28
# Visit this NuGet package version page to see the latest version available
34
29
# https://dev.azure.com/projectmu/acpica/_artifacts/feed/mu_iasl/NuGet/edk2-acpica-iasl/versions
35
- ARG IASL_VERSION=20210105.0.6
36
-
37
- # Set environment variable to avoid interaction.
38
- ENV DEBIAN_FRONTEND=noninteractive
39
- ENV TZ=UTC
30
+ ARG GCC_MAJOR_VERSION=12 \
31
+ NASM_VERSION=2.16.01 \
32
+ CSPELL_VERSION=5.20.0 \
33
+ MARKDOWNLINT_VERSION=0.32.2 \
34
+ IASL_VERSION=20210105.0.6
40
35
41
36
# Work-around for azure pipelines adding the vsts_azpcontainer user, but not adding
42
37
# the .local/bin directory to the path which will be used by pip.
43
- ENV PATH $PATH:/home/vsts_azpcontainer/.local/bin
38
+ # Set environment variable to avoid interaction.
39
+ ENV DEBIAN_FRONTEND=noninteractive \
40
+ TZ=UTC \
41
+ PATH=$PATH:/home/vsts_azpcontainer/.local/bin
44
42
45
- RUN apt-get update && \
46
- apt-get install --yes --no-install-recommends \
43
+ RUN echo "Installing needed system packages" \
44
+ && apt-get update \
45
+ && apt-get install --yes --no-install-recommends \
47
46
bison \
48
47
ca-certificates \
49
48
curl \
@@ -62,13 +61,15 @@ RUN apt-get update && \
62
61
sudo \
63
62
unzip \
64
63
uuid-dev \
65
- wget \
66
- && \
67
- apt-get update && \
68
- apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv-keys F23C5A6CF475977595C89F51BA6932366A755776 && \
69
- add-apt-repository ppa:deadsnakes/ppa -y && \
70
- apt-get update && \
71
- apt-get install --yes --no-install-recommends \
64
+ wget && \
65
+ echo "\n\n Adding keys, repos" \
66
+ && apt-get update \
67
+ && apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv-keys F23C5A6CF475977595C89F51BA6932366A755776 \
68
+ && add-apt-repository ppa:deadsnakes/ppa -y && \
69
+
70
+ echo "\n\n Installing python/gcc" \
71
+ && apt-get update \
72
+ && apt-get install --yes --no-install-recommends \
72
73
{% endraw %}python{{ sync_version.python_version }}{% raw %} \
73
74
{% endraw %}python{{ sync_version.python_version }}{% raw %}-distutils \
74
75
{% endraw %}python{{ sync_version.python_version }}{% raw %}-venv \
@@ -77,113 +78,141 @@ RUN apt-get update && \
77
78
gcc-${GCC_MAJOR_VERSION}-aarch64-linux-gnu \
78
79
gcc-${GCC_MAJOR_VERSION}-riscv64-linux-gnu \
79
80
gcc-${GCC_MAJOR_VERSION}-arm-linux-gnueabi \
80
- gcc-${GCC_MAJOR_VERSION}-arm-linux-gnueabihf \
81
- && \
82
- curl -O https://bootstrap.pypa.io/get-pip.py && \
83
- {% endraw %}python{{ sync_version.python_version }}{% raw %} get-pip.py && \
84
- {% endraw %}python{{ sync_version.python_version }}{% raw %} -m pip install --upgrade setuptools && \
85
- rm get-pip.py && \
86
- apt-get upgrade -y && \
87
- apt-get clean && \
88
- rm -rf /var/lib/apt/lists/*
89
-
90
- ENV GCC5_AARCH64_PREFIX /usr/bin/aarch64-linux-gnu-
91
- ENV GCC5_ARM_PREFIX /usr/bin/arm-linux-gnueabi-
92
- ENV GCC5_RISCV64_PREFIX /usr/bin/riscv64-linux-gnu-
93
-
94
- RUN pip install pip lcov_cobertura --upgrade
95
-
96
- # RUN npm install -g npm
97
- RUN npm install -g \
81
+ gcc-${GCC_MAJOR_VERSION}-arm-linux-gnueabihf && \
82
+ && curl -O https://bootstrap.pypa.io/get-pip.py \
83
+ && {% endraw %}python{{ sync_version.python_version }}{% raw %} get-pip.py \
84
+ && {% endraw %}python{{ sync_version.python_version }}{% raw %} -m pip install --upgrade setuptools \
85
+ && rm get-pip.py \
86
+ && apt-get upgrade -y && \
87
+
88
+ echo "\n\n Cleaning cache" \
89
+ && apt-get autoremove \
90
+ && apt-get clean \
91
+ && rm -rf /var/lib/apt/lists/*
92
+
93
+ ENV GCC5_AARCH64_PREFIX /usr/bin/aarch64-linux-gnu- \
94
+ GCC5_ARM_PREFIX /usr/bin/arm-linux-gnueabi- \
95
+ GCC5_RISCV64_PREFIX /usr/bin/riscv64-linux-gnu-
96
+
97
+ RUN echo "Upgrading pip/lcov_cobertura" \
98
+ && pip install pip lcov_cobertura --upgrade && \
99
+
100
+ echo "\n\n npm packages" \
101
+ && npm install -g \
98
102
cspell@${CSPELL_VERSION} \
99
- markdownlint-cli@${MARKDOWNLINT_VERSION}
103
+ markdownlint-cli@${MARKDOWNLINT_VERSION} && \
100
104
101
- RUN wget -O - https://www.nasm.us/pub/nasm/releasebuilds/${NASM_VERSION}/nasm-${NASM_VERSION}.tar.gz | \
102
- tar xz && cd nasm-${NASM_VERSION} && \
103
- ./autogen.sh && ./configure && make -j $(nproc) && make install && \
104
- cd .. && rm -rf nasm-${NASM_VERSION}
105
+ echo "\n\n Building nasm" \
106
+ && wget -O - https://www.nasm.us/pub/nasm/releasebuilds/${NASM_VERSION}/nasm-${NASM_VERSION}.tar.gz | tar xz \
107
+ && cd nasm-${NASM_VERSION} \
108
+ && ./autogen.sh \
109
+ && ./configure \
110
+ && make -j $(nproc) \
111
+ && make install \
112
+ && cd .. \
113
+ && rm -rf nasm-${NASM_VERSION} && \
105
114
106
- RUN mkdir -p iasl_temp && cd iasl_temp && \
107
- wget -O iasl_${IASL_VERSION}.nupkg "https://pkgs.dev.azure.com/projectmu/acpica/_apis/packaging/feeds/mu_iasl/nuget/packages/edk2-acpica-iasl/versions/${IASL_VERSION}/content?api-version=6.0-preview.1" && \
108
- unzip iasl_${IASL_VERSION}.nupkg -d /iasl_pkg_contents && \
109
- find /iasl_pkg_contents -type f -name "iasl" -exec cp {} /usr/bin \; && chmod +x /usr/bin/iasl && \
110
- cd .. && rm -rf iasl_temp
115
+ echo "\n\n Iasl_temp" \
116
+ && mkdir -p iasl_temp \
117
+ && cd iasl_temp \
118
+ && wget -O iasl_${IASL_VERSION}.nupkg "https://pkgs.dev.azure.com/projectmu/acpica/_apis/packaging/feeds/mu_iasl/nuget/packages/edk2-acpica-iasl/versions/${IASL_VERSION}/content?api-version=6.0-preview.1" \
119
+ && unzip iasl_${IASL_VERSION}.nupkg -d /iasl_pkg_contents \
120
+ && find /iasl_pkg_contents -type f -name "iasl" -exec cp {} /usr/bin \; \
121
+ && chmod +x /usr/bin/iasl \
122
+ && cd .. \
123
+ && rm -rf iasl_temp && \
111
124
112
- RUN wget -q "https://packages.microsoft.com/config/ubuntu/$(lsb_release -rs)/packages-microsoft-prod.deb" && \
113
- dpkg -i packages-microsoft-prod.deb && rm packages-microsoft-prod.deb && \
114
- apt-get update && apt-get install -y powershell && apt-get clean
125
+ echo "\n\n Installing microsoft-prod packages" \
126
+ && wget -q "https://packages.microsoft.com/config/ubuntu/$(lsb_release -rs)/packages-microsoft-prod.deb" \
127
+ && dpkg -i packages-microsoft-prod.deb \
128
+ && rm packages-microsoft-prod.deb \
129
+ && apt-get update \
130
+ && apt-get install -y powershell && \
115
131
132
+ echo "\n\n Cleaning cache" \
133
+ && apt-get autoremove \
134
+ && apt-get clean \
135
+ && rm -rf /var/lib/apt/lists/*
136
+
116
137
#
117
138
# Rust support
118
139
#
119
140
120
- ENV CARGO_HOME="$HOME/.cargo"
121
- ENV RUSTUP_HOME="$HOME/.rustup"
122
- ENV PATH="$CARGO_HOME/bin:$PATH"
141
+ ENV CARGO_HOME="$HOME/.cargo" \
142
+ RUSTUP_HOME="$HOME/.rustup" \
143
+ PATH="$CARGO_HOME/bin:$PATH"
123
144
124
145
# Install Rust/Cargo and extras (rust-src, rust fmt, cargo-make, cargo-tarpaulin)
125
- RUN VERSION_URL="https://raw.githubusercontent.com/microsoft/mu_devops/main/.sync/Version.njk" && \
126
- RUST_VERSION=$(curl -s ${VERSION_URL} | grep -oP '(?<=rust_toolchain = ").*(?=")' ) && \
127
- curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh -s -- -y --default-toolchain ${RUST_VERSION} --profile minimal && \
128
- rustup component add rustfmt rust-src --toolchain ${RUST_VERSION}-x86_64-unknown-linux-gnu
129
-
130
- RUN mkdir cargo_downloads && \
131
- cd cargo_downloads && \
132
- TAG_NAME=$(curl -s https://api.github.com/repos/sagiegurari/cargo-make/releases/latest | jq -r '.tag_name' ) && \
133
- DOWNLOAD_URL="https://github.com/sagiegurari/cargo-make/releases/download/$TAG_NAME/cargo-make-v$TAG_NAME-x86_64-unknown-linux-gnu.zip" && \
134
- curl -L -o cargo-make.zip "$DOWNLOAD_URL" && \
135
- unzip cargo-make.zip && \
136
- mv cargo-make-v$TAG_NAME-x86_64-unknown-linux-gnu/cargo-make $CARGO_HOME/bin/ && \
137
- TAG_NAME=$(curl -s https://api.github.com/repos/xd009642/tarpaulin/releases/latest | jq -r '.tag_name' ) && \
138
- DOWNLOAD_URL="https://github.com/xd009642/tarpaulin/releases/download/$TAG_NAME/cargo-tarpaulin-x86_64-unknown-linux-gnu.tar.gz" && \
139
- curl -L -o cargo-tarpaulin.tar.gz "$DOWNLOAD_URL" && \
140
- tar -xzvf cargo-tarpaulin.tar.gz && \
141
- mv cargo-tarpaulin $CARGO_HOME/bin/ && \
142
- cd .. && \
143
- rm -r cargo_downloads
146
+ RUN echo "Installing Rust/Cargo and extras (rust-src, rust fmt)" \
147
+ && VERSION_URL="https://raw.githubusercontent.com/microsoft/mu_devops/main/.sync/Version.njk" \
148
+ && RUST_VERSION=$(curl -s ${VERSION_URL} | grep -oP '(?<=rust_toolchain = ").*(?=")' ) \
149
+ && curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh -s -- -y --default-toolchain ${RUST_VERSION} --profile minimal \
150
+ && . /.cargo/env \
151
+ && rustup component add rustfmt rust-src --toolchain ${RUST_VERSION}-x86_64-unknown-linux-gnu && \
152
+
153
+ echo "\n\n Installing cargo-make, cargo-tarpaulin" \
154
+ && mkdir cargo_downloads \
155
+ && cd cargo_downloads \
156
+ && TAG_NAME=$(curl -s https://api.github.com/repos/sagiegurari/cargo-make/releases/latest | jq -r '.tag_name' ) \
157
+ && DOWNLOAD_URL="https://github.com/sagiegurari/cargo-make/releases/download/$TAG_NAME/cargo-make-v$TAG_NAME-x86_64-unknown-linux-gnu.zip" \
158
+ && curl -L -o cargo-make.zip "$DOWNLOAD_URL" \
159
+ && unzip cargo-make.zip \
160
+ && mv cargo-make-v$TAG_NAME-x86_64-unknown-linux-gnu/cargo-make $CARGO_HOME/bin/ \
161
+ && TAG_NAME=$(curl -s https://api.github.com/repos/xd009642/tarpaulin/releases/latest | jq -r '.tag_name' ) \
162
+ && DOWNLOAD_URL="https://github.com/xd009642/tarpaulin/releases/download/$TAG_NAME/cargo-tarpaulin-x86_64-unknown-linux-gnu.tar.gz" \
163
+ && curl -L -o cargo-tarpaulin.tar.gz "$DOWNLOAD_URL" \
164
+ && tar -xzvf cargo-tarpaulin.tar.gz \
165
+ && mv cargo-tarpaulin $CARGO_HOME/bin/ \
166
+ && cd .. \
167
+ && rm -r cargo_downloads
144
168
145
169
#
146
170
# Alternatives
147
171
#
148
172
{% endraw %}
149
173
150
174
RUN update-alternatives \
151
- --install /usr/bin/python python /usr/bin/python{{ sync_version.python_version }} 1 && \
152
- update-alternatives \
153
- --install /usr/bin/python3 python3 /usr/bin/python{{ sync_version.python_version }} 1 && \
154
- update-alternatives \
175
+ --install /usr/bin/python python /usr/bin/python{{ sync_version.python_version }} 1 \
176
+ && update-alternatives \
177
+ --install /usr/bin/python3 python3 /usr/bin/python{{ sync_version.python_version }} 1 \
178
+ && update-alternatives \
155
179
--install /usr/bin/gcc gcc /usr/bin/gcc-${GCC_MAJOR_VERSION} 100 \
156
180
--slave /usr/bin/g++ g++ /usr/bin/g++-${GCC_MAJOR_VERSION} \
157
181
--slave /usr/bin/gcc-ar gcc-ar /usr/bin/gcc-ar-${GCC_MAJOR_VERSION} \
158
182
--slave /usr/bin/gcc-nm gcc-nm /usr/bin/gcc-nm-${GCC_MAJOR_VERSION} \
159
183
--slave /usr/bin/gcc-ranlib gcc-ranlib /usr/bin/gcc-ranlib-${GCC_MAJOR_VERSION} \
160
- --slave /usr/bin/gcov gcov /usr/bin/gcov-${GCC_MAJOR_VERSION} && \
161
- update-alternatives \
162
- --install /usr/bin/cpp cpp /usr/bin/cpp-${GCC_MAJOR_VERSION} 100 && \
163
- update-alternatives \
184
+ --slave /usr/bin/gcov gcov /usr/bin/gcov-${GCC_MAJOR_VERSION} \
185
+ && update-alternatives \
186
+ --install /usr/bin/cpp cpp /usr/bin/cpp-${GCC_MAJOR_VERSION} 100 \
187
+ && update-alternatives \
164
188
--install /usr/bin/aarch64-linux-gnu-gcc aarch64-linux-gnu-gcc /usr/bin/aarch64-linux-gnu-gcc-${GCC_MAJOR_VERSION} 100 \
165
189
--slave /usr/bin/aarch64-linux-gnu-cpp aarch64-linux-gnu-cpp /usr/bin/aarch64-linux-gnu-cpp-${GCC_MAJOR_VERSION} \
166
190
--slave /usr/bin/aarch64-linux-gnu-g++ aarch64-linux-gnu-g++ /usr/bin/aarch64-linux-gnu-g++-${GCC_MAJOR_VERSION} \
167
191
--slave /usr/bin/aarch64-linux-gnu-gcc-ar aarch64-linux-gnu-gcc-ar /usr/bin/aarch64-linux-gnu-gcc-ar-${GCC_MAJOR_VERSION} \
168
192
--slave /usr/bin/aarch64-linux-gnu-gcc-nm aarch64-linux-gnu-gcc-nm /usr/bin/aarch64-linux-gnu-gcc-nm-${GCC_MAJOR_VERSION} \
169
193
--slave /usr/bin/aarch64-linux-gnu-gcc-ranlib aarch64-linux-gnu-gcc-ranlib /usr/bin/aarch64-linux-gnu-gcc-ranlib-${GCC_MAJOR_VERSION} \
170
- --slave /usr/bin/aarch64-linux-gnu-gcov aarch64-linux-gnu-gcov /usr/bin/aarch64-linux-gnu-gcov-${GCC_MAJOR_VERSION} && \
171
- update-alternatives \
194
+ --slave /usr/bin/aarch64-linux-gnu-gcov aarch64-linux-gnu-gcov /usr/bin/aarch64-linux-gnu-gcov-${GCC_MAJOR_VERSION} \
195
+ && update-alternatives \
172
196
--install /usr/bin/arm-linux-gnueabi-gcc arm-linux-gnueabi-gcc /usr/bin/arm-linux-gnueabi-gcc-${GCC_MAJOR_VERSION} 100 \
173
197
--slave /usr/bin/arm-linux-gnueabi-cpp arm-linux-gnueabi-cpp /usr/bin/arm-linux-gnueabi-cpp-${GCC_MAJOR_VERSION} \
174
198
--slave /usr/bin/arm-linux-gnueabi-g++ arm-linux-gnueabi-g++ /usr/bin/arm-linux-gnueabi-g++-${GCC_MAJOR_VERSION} \
175
199
--slave /usr/bin/arm-linux-gnueabi-gcc-ar arm-linux-gnueabi-gcc-ar /usr/bin/arm-linux-gnueabi-gcc-ar-${GCC_MAJOR_VERSION} \
176
200
--slave /usr/bin/arm-linux-gnueabi-gcc-nm arm-linux-gnueabi-gcc-nm /usr/bin/arm-linux-gnueabi-gcc-nm-${GCC_MAJOR_VERSION} \
177
201
--slave /usr/bin/arm-linux-gnueabi-gcc-ranlib arm-linux-gnueabi-gcc-ranlib /usr/bin/arm-linux-gnueabi-gcc-ranlib-${GCC_MAJOR_VERSION} \
178
- --slave /usr/bin/arm-linux-gnueabi-gcov arm-linux-gnueabi-gcov /usr/bin/arm-linux-gnueabi-gcov-${GCC_MAJOR_VERSION} && \
179
- update-alternatives \
202
+ --slave /usr/bin/arm-linux-gnueabi-gcov arm-linux-gnueabi-gcov /usr/bin/arm-linux-gnueabi-gcov-${GCC_MAJOR_VERSION} \
203
+ && update-alternatives \
180
204
--install /usr/bin/riscv64-linux-gnu-gcc riscv64-linux-gnu-gcc /usr/bin/riscv64-linux-gnu-gcc-${GCC_MAJOR_VERSION} 100 \
181
205
--slave /usr/bin/riscv64-linux-gnu-cpp riscv64-linux-gnu-cpp /usr/bin/riscv64-linux-gnu-cpp-${GCC_MAJOR_VERSION} \
182
206
--slave /usr/bin/riscv64-linux-gnu-g++ riscv64-linux-gnu-g++ /usr/bin/riscv64-linux-gnu-g++-${GCC_MAJOR_VERSION} \
183
207
--slave /usr/bin/riscv64-linux-gnu-gcc-ar riscv64-linux-gnu-gcc-ar /usr/bin/riscv64-linux-gnu-gcc-ar-${GCC_MAJOR_VERSION} \
184
208
--slave /usr/bin/riscv64-linux-gnu-gcc-nm riscv64-linux-gnu-gcc-nm /usr/bin/riscv64-linux-gnu-gcc-nm-${GCC_MAJOR_VERSION} \
185
209
--slave /usr/bin/riscv64-linux-gnu-gcc-ranlib riscv64-linux-gnu-gcc-ranlib /usr/bin/riscv64-linux-gnu-gcc-ranlib-${GCC_MAJOR_VERSION} \
186
- --slave /usr/bin/riscv64-linux-gnu-gcov riscv64-linux-gnu-gcov /usr/bin/riscv64-linux-gnu-gcov-${GCC_MAJOR_VERSION}
210
+ --slave /usr/bin/riscv64-linux-gnu-gcov riscv64-linux-gnu-gcov /usr/bin/riscv64-linux-gnu-gcov-${GCC_MAJOR_VERSION} && \
211
+
212
+ echo "\n\n\n Cleaning cache" \
213
+ && apt-get autoremove \
214
+ && apt-get clean \
215
+ && rm -rf /var/lib/apt/lists/*
187
216
188
217
{% raw %}
189
218
#
@@ -192,10 +221,12 @@ RUN update-alternatives \
192
221
#
193
222
FROM build AS test
194
223
195
- ARG QEMU_URL="https://gitlab.com/qemu-project/qemu.git"
196
- ARG QEMU_BRANCH="v9.0.0"
224
+ ARG QEMU_URL="https://gitlab.com/qemu-project/qemu.git" \
225
+ QEMU_BRANCH="v9.0.0"
197
226
198
- RUN apt-get update && apt-get install --yes --no-install-recommends \
227
+ RUN echo "Installing needed software" \
228
+ && apt-get update \
229
+ && apt-get install --yes --no-install-recommends \
199
230
autoconf \
200
231
automake \
201
232
autotools-dev \
@@ -211,25 +242,37 @@ RUN apt-get update && apt-get install --yes --no-install-recommends \
211
242
ninja-build \
212
243
tar \
213
244
&& \
214
- git clone "${QEMU_URL}" --branch "${QEMU_BRANCH}" --depth 1 qemu && \
215
- cd qemu && \
216
- ./configure --target-list=x86_64-softmmu,aarch64-softmmu --enable-gtk && \
217
- make install -j $(nproc) && \
218
- cd .. && \
219
- rm -rf qemu && \
220
- apt remove --yes ninja-build && \
221
- apt-get clean
245
+
246
+ echo "\n\n Installing/Building qemu" \
247
+ && git clone "${QEMU_URL}" --branch "${QEMU_BRANCH}" --depth 1 qemu \
248
+ && cd qemu \
249
+ && ./configure --target-list=x86_64-softmmu,aarch64-softmmu --enable-gtk \
250
+ && make install -j $(nproc) \
251
+ && cd .. \
252
+ && rm -rf qemu \
253
+ && apt-get remove --yes ninja-build && \
254
+
255
+ echo "\n\n Cleaning cache" \
256
+ && apt-get autoremove \
257
+ && apt-get clean \
258
+ && rm -rf /var/lib/apt/lists/*
222
259
223
260
#
224
261
# The dev container layer is intended for local use and has more robust tooling
225
262
# and environment configurations for developers.
226
263
#
227
264
FROM test AS dev
228
265
229
- RUN apt-get update && \
230
- apt-get install --yes --no-install-recommends \
266
+ RUN echo "Installing nano/less" \
267
+ && apt-get update \
268
+ && apt-get install --yes --no-install-recommends \
231
269
nano \
232
270
less \
233
271
&& \
234
- apt-get clean
272
+
273
+ echo "\n\n Cleaning cache" \
274
+ && apt-get autoremove \
275
+ && apt-get clean \
276
+ && rm -rf /var/lib/apt/lists/*
277
+
235
278
{% endraw %}
0 commit comments