Skip to content

Commit 93c4a74

Browse files
authored
Merge pull request #14 from MillerTechnologyPeru/feature/docker
Build the Swift compiler for the host architecture
2 parents 8ef38eb + 0fa90db commit 93c4a74

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

45 files changed

+332
-539
lines changed

.devcontainer/Dockerfile

Lines changed: 4 additions & 35 deletions
Original file line numberDiff line numberDiff line change
@@ -1,50 +1,19 @@
1-
# [Choice] Swift version: 5.6-focal, 5.5, 5.4, 5.3, 5.2, 5.1, 4.2
2-
ARG VARIANT=6.0.3-jammy
3-
FROM swift:${VARIANT}
1+
FROM swift:6.0.3-bookworm
42

53
# [Option] Install zsh
64
ARG INSTALL_ZSH="true"
75

8-
# [Option] Upgrade OS packages to their latest versions
9-
ARG UPGRADE_PACKAGES="false"
10-
11-
# Install needed packages and setup non-root user. Use a separate RUN statement to add your own dependencies.
6+
# Install needed packages and setup non-root user.
127
ARG USERNAME=vscode
138
ARG USER_UID=1000
149
ARG USER_GID=$USER_UID
1510
COPY library-scripts/common-debian.sh /tmp/library-scripts/
1611
RUN apt-get update && export DEBIAN_FRONTEND=noninteractive \
17-
&& /bin/bash /tmp/library-scripts/common-debian.sh "${INSTALL_ZSH}" "${USERNAME}" "${USER_UID}" "${USER_GID}" "${UPGRADE_PACKAGES}" "true" "true" \
12+
&& /bin/bash /tmp/library-scripts/common-debian.sh "${INSTALL_ZSH}" "${USERNAME}" "${USER_UID}" "${USER_GID}" "true" "true" "true" \
1813
&& apt-get autoremove -y && apt-get clean -y && rm -rf /var/lib/apt/lists/* && rm -rf /tmp/library-scripts
1914

20-
# [Choice] Node.js version: none, lts/*, 16, 14, 12, 10
21-
ARG NODE_VERSION="none"
22-
ENV NVM_DIR=/usr/local/share/nvm
23-
ENV NVM_SYMLINK_CURRENT=true \
24-
PATH=${NVM_DIR}/current/bin:${PATH}
25-
COPY library-scripts/node-debian.sh /tmp/library-scripts/
26-
RUN bash /tmp/library-scripts/node-debian.sh "${NVM_DIR}" "${NODE_VERSION}" "${USERNAME}" \
27-
&& rm -rf /var/lib/apt/lists/* /tmp/library-scripts
28-
29-
# Define paths
30-
ENV SWIFT_NATIVE_TOOLS=/workspaces/swift/usr/bin
31-
ENV SWIFT_LLVM_DIR=/workspaces/llvm
32-
ENV BUILDROOT_DIR=/workspaces/buildroot
33-
ENV BUILDROOT_RELEASE=2024.02.9
34-
35-
# Install Dependencies
15+
# Install Swift and Buildroot dependencies
3616
COPY library-scripts/install-dependencies.sh /tmp/library-scripts/
3717
RUN apt-get update && \
3818
/bin/bash /tmp/library-scripts/install-dependencies.sh \
3919
&& rm -rf /var/lib/apt/lists/* /tmp/library-scripts
40-
41-
# Install Swift compiler
42-
COPY library-scripts/install-swift.sh /tmp/library-scripts/
43-
RUN /bin/bash /tmp/library-scripts/install-swift.sh \
44-
&& rm -rf /var/lib/apt/lists/* /tmp/library-scripts
45-
46-
# Download Buildroot
47-
COPY build-scripts/download-buildroot.sh /tmp/build-scripts/
48-
RUN /bin/bash /tmp/build-scripts/download-buildroot.sh \
49-
&& rm -rf /var/lib/apt/lists/* /tmp/build-scripts
50-
Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,13 @@
11
#!/bin/bash
22
set -e
33

4-
# Paths
5-
BUILDROOT_DIR="${BUILDROOT_DIR:=/workspaces/buildroot}"
4+
# Configurable
5+
SWIFT_BUILDROOT="${SWIFT_BUILDROOT:=$(pwd)}"
6+
source $SWIFT_BUILDROOT/.devcontainer/build-scripts/swift-define
67

78
# Build
8-
cd $BUILDROOT_DIR
9-
make source
10-
make libbsd-build
11-
make libxml2-build
12-
make openssl-build
13-
make libcurl-build
9+
cd $WORKING_DIR
10+
make $BUILDROOT_OPTIONS libbsd-build
11+
make $BUILDROOT_OPTIONS libxml2-build
12+
make $BUILDROOT_OPTIONS openssl-build
13+
make $BUILDROOT_OPTIONS libcurl-build

.devcontainer/build-scripts/build-docker.sh

Lines changed: 16 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -3,30 +3,37 @@ set -e
33

44
# Configurable
55
SWIFT_BUILDROOT="${SWIFT_BUILDROOT:=$(pwd)}"
6-
DEFCONFIG="${DEFCONFIG:=swift_arm64_defconfig}"
6+
source $SWIFT_BUILDROOT/.devcontainer/build-scripts/swift-define
7+
8+
# Build and push base docker image
9+
cd $SWIFT_BUILDROOT
10+
docker build -t colemancda/buildroot-swift --file $DOCKER_FILE .devcontainer
11+
docker push colemancda/buildroot-swift
712

813
# Create Dockerfile
9-
DOCKER_FILE_ARCH=$SWIFT_BUILDROOT/.devcontainer/Dockerfile-$DEFCONFIG
14+
cd $SWIFT_BUILDROOT
15+
DOCKER_FILE_ARCH=$SWIFT_BUILDROOT/.devcontainer/Dockerfile-$BUILDROOT_DEFCONFIG
1016
rm -rf $DOCKER_FILE_ARCH
1117
echo "FROM colemancda/buildroot-swift" >> $DOCKER_FILE_ARCH
12-
echo "ENV DEFCONFIG=${DEFCONFIG}" >> $DOCKER_FILE_ARCH
13-
echo "ENV SWIFT_NATIVE_TOOLS=/workspaces/swift/usr/bin" >> $DOCKER_FILE_ARCH
14-
echo "ENV SWIFT_LLVM_DIR=/workspaces/llvm" >> $DOCKER_FILE_ARCH
18+
echo "ENV SWIFT_TARGET_ARCH=${SWIFT_TARGET_ARCH}" >> $DOCKER_FILE_ARCH
1519
echo "ENV SWIFT_BUILDROOT=/workspaces/buildroot-swift" >> $DOCKER_FILE_ARCH
16-
echo "ENV BUILDROOT_RELEASE=2024.02.9" >> $DOCKER_FILE_ARCH
17-
echo "ENV BUILDROOT_DIR=/workspaces/buildroot" >> $DOCKER_FILE_ARCH
20+
echo "ENV WORKING_DIR=/workspaces/buildroot-swift" >> $DOCKER_FILE_ARCH
1821
echo "COPY . /workspaces/buildroot-swift/" >> $DOCKER_FILE_ARCH
22+
echo "COPY .devcontainer/build-scripts/download-buildroot.sh /tmp/build-scripts/" >> $DOCKER_FILE_ARCH
23+
echo "RUN /bin/bash /tmp/build-scripts/download-buildroot.sh" >> $DOCKER_FILE_ARCH
1924
echo "COPY .devcontainer/build-scripts/configure.sh /tmp/build-scripts/" >> $DOCKER_FILE_ARCH
2025
echo "RUN /bin/bash /tmp/build-scripts/configure.sh" >> $DOCKER_FILE_ARCH
2126
echo "COPY .devcontainer/build-scripts/fetch-sources.sh /tmp/build-scripts/" >> $DOCKER_FILE_ARCH
2227
echo "RUN /bin/bash /tmp/build-scripts/fetch-sources.sh" >> $DOCKER_FILE_ARCH
2328
echo "COPY .devcontainer/build-scripts/build-host-tools.sh /tmp/build-scripts/" >> $DOCKER_FILE_ARCH
2429
echo "RUN /bin/bash /tmp/build-scripts/build-host-tools.sh" >> $DOCKER_FILE_ARCH
30+
echo "COPY .devcontainer/library-scripts/install-swift.sh /tmp/library-scripts/" >> $DOCKER_FILE_ARCH
31+
echo "RUN /bin/bash /tmp/library-scripts/install-swift.sh" >> $DOCKER_FILE_ARCH
2532
echo "COPY .devcontainer/build-scripts/build-toolchain.sh /tmp/build-scripts/" >> $DOCKER_FILE_ARCH
2633
echo "RUN /bin/bash /tmp/build-scripts/build-toolchain.sh" >> $DOCKER_FILE_ARCH
2734
echo "COPY .devcontainer/build-scripts/build-base.sh /tmp/build-scripts/" >> $DOCKER_FILE_ARCH
2835
echo "RUN /bin/bash /tmp/build-scripts/build-base.sh" >> $DOCKER_FILE_ARCH
2936

3037
# Build Docker image
31-
docker build -t colemancda/buildroot-swift:$DEFCONFIG --file $DOCKER_FILE_ARCH .
32-
docker push colemancda/buildroot-swift:$DEFCONFIG
38+
docker build -t colemancda/buildroot-swift:$BUILDROOT_DEFCONFIG --file $DOCKER_FILE_ARCH .
39+
docker push colemancda/buildroot-swift:$BUILDROOT_DEFCONFIG
Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
#!/bin/bash
2+
set -e
3+
4+
# Configurable
5+
SWIFT_BUILDROOT="${SWIFT_BUILDROOT:=$(pwd)}"
6+
source $SWIFT_BUILDROOT/.devcontainer/build-scripts/swift-define
7+
8+
# Build
9+
cd $WORKING_DIR
10+
make $BUILDROOT_OPTIONS host-swift-build
11+
12+
# Create symlinks for multiarch
13+
declare -a arr=("arm64" "armv7" "armv6" "armv5" "x86_64" "i386" "ppc64le" "ppc" "riscv64" "mips64" "mips")
14+
for i in "${arr[@]}"
15+
do
16+
if [[ "$i" != "$SWIFT_TARGET_ARCH" ]]; then
17+
BUILDROOT_OUTPUT_ARCH=$WORKING_DIR/output/$i
18+
mkdir -p $BUILDROOT_OUTPUT_ARCH
19+
mkdir -p $BUILDROOT_OUTPUT_ARCH/build/
20+
cd $BUILDROOT_OUTPUT_ARCH/build
21+
if [ ! -d "$BUILDROOT_OUTPUT_ARCH/build/host-swift-6.0.3" ]; then
22+
echo "Generating host tools symlink for $i"
23+
ln -s ../../$SWIFT_TARGET_ARCH/build/host-swift-6.0.3 ./host-swift-6.0.3
24+
fi
25+
fi
26+
done
Lines changed: 16 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -1,20 +1,21 @@
11
#!/bin/bash
22
set -e
33

4-
# Paths
5-
BUILDROOT_DIR="${BUILDROOT_DIR:=/workspaces/buildroot}"
4+
# Configurable
5+
SWIFT_BUILDROOT="${SWIFT_BUILDROOT:=$(pwd)}"
6+
source $SWIFT_BUILDROOT/.devcontainer/build-scripts/swift-define
67

78
# Build
8-
cd $BUILDROOT_DIR
9-
make host-swift-build
10-
make host-cmake-build
11-
make host-util-linux-build
12-
make host-libtool-build
13-
make host-autoconf-build
14-
make host-automake-build
15-
make host-libzlib-build
16-
make host-zlib-build
17-
make host-attr-build
18-
make host-acl-build
19-
make host-fakeroot-build
20-
make host-dosfstools-build
9+
cd $WORKING_DIR
10+
make $BUILDROOT_OPTIONS host-cmake-build
11+
make $BUILDROOT_OPTIONS host-ninja-build
12+
make $BUILDROOT_OPTIONS host-util-linux-build
13+
make $BUILDROOT_OPTIONS host-libtool-build
14+
make $BUILDROOT_OPTIONS host-autoconf-build
15+
make $BUILDROOT_OPTIONS host-automake-build
16+
make $BUILDROOT_OPTIONS host-libzlib-build
17+
make $BUILDROOT_OPTIONS host-zlib-build
18+
make $BUILDROOT_OPTIONS host-attr-build
19+
make $BUILDROOT_OPTIONS host-acl-build
20+
make $BUILDROOT_OPTIONS host-fakeroot-build
21+
make $BUILDROOT_OPTIONS host-dosfstools-build
Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,10 @@
11
#!/bin/bash
22
set -e
33

4-
# Paths
5-
BUILDROOT_DIR="${BUILDROOT_DIR:=/workspaces/buildroot}"
4+
# Configurable
5+
SWIFT_BUILDROOT="${SWIFT_BUILDROOT:=$(pwd)}"
6+
source $SWIFT_BUILDROOT/.devcontainer/build-scripts/swift-define
67

78
# Build
8-
cd $BUILDROOT_DIR
9-
make toolchain
9+
cd $WORKING_DIR
10+
make $BUILDROOT_OPTIONS toolchain

.devcontainer/build-scripts/build.sh

Lines changed: 3 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -3,10 +3,7 @@ set -e
33

44
# Configurable
55
SWIFT_BUILDROOT="${SWIFT_BUILDROOT:=$(pwd)}"
6-
DEFCONFIG="${DEFCONFIG:=swift_arm64_defconfig}"
7-
BUILDROOT_DIR="${BUILDROOT_DIR:=/workspaces/buildroot}"
8-
SWIFT_NATIVE_TOOLS="${SWIFT_NATIVE_TOOLS:=/workspaces/swift/usr/bin}"
9-
SWIFT_LLVM_DIR="${SWIFT_LLVM_DIR:=/workspaces/llvm}"
6+
source $SWIFT_BUILDROOT/.devcontainer/build-scripts/swift-define
107

118
# Prepare environment
129
$SWIFT_BUILDROOT/.devcontainer/build-scripts/configure.sh
@@ -16,5 +13,5 @@ $SWIFT_BUILDROOT/.devcontainer/build-scripts/build-toolchain.sh
1613
$SWIFT_BUILDROOT/.devcontainer/build-scripts/build-base.sh
1714

1815
# Build Swift
19-
cd $BUILDROOT_DIR
20-
make
16+
cd $WORKING_DIR
17+
make $BUILDROOT_OPTIONS

.devcontainer/build-scripts/configure.sh

Lines changed: 4 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -3,19 +3,9 @@ set -e
33

44
# Configurable
55
SWIFT_BUILDROOT="${SWIFT_BUILDROOT:=$(pwd)}"
6-
DEFCONFIG="${DEFCONFIG:=swift_arm64_defconfig}"
7-
BUILDROOT_DIR="${BUILDROOT_DIR:=/workspaces/buildroot}"
8-
SWIFT_NATIVE_TOOLS="${SWIFT_NATIVE_TOOLS:=/workspaces/swift/usr/bin}"
9-
SWIFT_LLVM_DIR="${SWIFT_LLVM_DIR:=/workspaces/llvm}"
10-
11-
# Modify defconfig
12-
DEFCONFIG_FILE=$SWIFT_BUILDROOT/configs/$DEFCONFIG
13-
DEFCONFIG_FILE_COPY=$SWIFT_BUILDROOT/configs/tmp_$DEFCONFIG
14-
cp -rf $DEFCONFIG_FILE $DEFCONFIG_FILE_COPY
15-
echo "BR2_PACKAGE_SWIFT_NATIVE_TOOLS=\"${SWIFT_NATIVE_TOOLS}\"" >> $DEFCONFIG_FILE_COPY
16-
echo "BR2_PACKAGE_SWIFT_LLVM_DIR=\"${SWIFT_LLVM_DIR}\"" >> $DEFCONFIG_FILE_COPY
6+
source $SWIFT_BUILDROOT/.devcontainer/build-scripts/swift-define
177

188
# Build
19-
cd $BUILDROOT_DIR
20-
make BR2_EXTERNAL=$SWIFT_BUILDROOT tmp_$DEFCONFIG
21-
rm -rf $DEFCONFIG_FILE_COPY
9+
cd $WORKING_DIR
10+
echo "make $BUILDROOT_OPTIONS $BUILDROOT_DEFCONFIG"
11+
make $BUILDROOT_OPTIONS $BUILDROOT_DEFCONFIG

.devcontainer/build-scripts/download-buildroot.sh

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,9 @@
11
#!/bin/bash
22
set -e
33

4-
BUILDROOT_RELEASE="${BUILDROOT_RELEASE:=2024.02.9}"
5-
BUILDROOT_DIR="${BUILDROOT_DIR:=/workspaces/buildroot}"
4+
# Configurable
5+
SWIFT_BUILDROOT="${SWIFT_BUILDROOT:=$(pwd)}"
6+
source $SWIFT_BUILDROOT/.devcontainer/build-scripts/swift-define
67

78
cd /tmp/
89
wget "https://buildroot.org/downloads/buildroot-$BUILDROOT_RELEASE.tar.gz"
Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,10 @@
11
#!/bin/bash
22
set -e
33

4-
# Paths
5-
BUILDROOT_DIR="${BUILDROOT_DIR:=/workspaces/buildroot}"
4+
# Configurable
5+
SWIFT_BUILDROOT="${SWIFT_BUILDROOT:=$(pwd)}"
6+
source $SWIFT_BUILDROOT/.devcontainer/build-scripts/swift-define
67

78
# Build
8-
cd $BUILDROOT_DIR
9-
make source
9+
cd $WORKING_DIR
10+
make $BUILDROOT_OPTIONS source

0 commit comments

Comments
 (0)