5 Commits

Author SHA1 Message Date
mcphail cc6b9f03c5 New version with combined amd64/arm64 build 2026-05-03 18:49:11 +01:00
mcphail af01775e41 Try combined amd64/arm64 build
Split Dockerfile so z88dk doesn't have to be rebuilt every time it falls out od cache
2026-05-03 18:41:39 +01:00
mcphail 6b66f9ba30 concurrent build when cross compiling on m1 fails 2026-04-28 22:28:38 +01:00
mcphail 010477fa4a Fix taptools build for macos target 2026-04-26 22:50:57 +01:00
mcphail 04e355a2ee Update sjasmplus, pasta80 and skoolkit for v7.0 2026-04-24 18:20:58 +00:00
4 changed files with 78 additions and 58 deletions
+13 -48
View File
@@ -1,5 +1,8 @@
# syntax=docker/dockerfile:1 # syntax=docker/dockerfile:1
# My current workflow is to build this on an M1 MacBook for both amd64 and arm64 using:
# docker buildx build --platform linux/arm64/v8,linux/amd64 -t boarstone.mcphail.uk/mcphail/speccydev:tagname .
FROM ubuntu:24.04 AS build FROM ubuntu:24.04 AS build
RUN apt-get update \ RUN apt-get update \
&& apt-get install -y --no-install-recommends \ && apt-get install -y --no-install-recommends \
@@ -13,7 +16,7 @@ RUN apt-get update \
unzip \ unzip \
&& rm -rf /var/lib/apt/lists/* && rm -rf /var/lib/apt/lists/*
ADD https://github.com/z00m128/sjasmplus.git#v1.21.1 /sjasmplus ADD https://github.com/z00m128/sjasmplus.git#v1.23.0 /sjasmplus
RUN cd /sjasmplus && make -j8 && make install RUN cd /sjasmplus && make -j8 && make install
ADD https://boarstone.mcphail.uk/mcphail/spectrum_remload.git /ttttt ADD https://boarstone.mcphail.uk/mcphail/spectrum_remload.git /ttttt
RUN cd /ttttt && make ttttt RUN cd /ttttt && make ttttt
@@ -36,60 +39,16 @@ RUN cd /hdfmonkey/ \
&& ./configure \ && ./configure \
&& make -j16 \ && make -j16 \
&& make install && make install
ADD https://github.com/pleumann/pasta80.git#v0.96 /opt/pasta80 ADD https://github.com/pleumann/pasta80.git#v0.98 /opt/pasta80
RUN cd /opt/pasta80 \ RUN cd /opt/pasta80 \
&& fpc pasta && fpc pasta
ADD --unpack https://www.seasip.info/ZX/taptools-1.1.3.tar.gz taptools/ ADD --unpack https://www.seasip.info/ZX/taptools-1.1.3.tar.gz taptools/
RUN cd taptools/taptools* \ RUN cd taptools/taptools* \
&& cp /usr/share/automake-1.16/config.guess . \
&& ./configure \ && ./configure \
&& make -j8 \ && make -j8 \
&& make install && make install
FROM ubuntu:24.04 AS z88dk
RUN apt-get update \
&& apt-get install -y --no-install-recommends \
bison \
build-essential \
ca-certificates \
ccache \
cpanminus \
curl \
dos2unix \
flex \
gdb \
git \
libboost-all-dev \
libcapture-tiny-perl \
libclone-perl \
libdata-hexdump-perl \
libfile-slurp-perl \
libgmp3-dev \
liblocal-lib-perl \
libmodern-perl-perl \
libpath-tiny-perl \
libregexp-common-perl \
libtext-table-perl \
libxml2-dev \
libyaml-perl \
m4 \
make \
perl \
pkg-config \
ragel \
re2c \
texi2html \
texinfo \
zlib1g-dev \
&& rm -rf /var/lib/apt/lists/*
ENV Z88DK_PATH="/opt/z88dk"
RUN cpanm -l $HOME/perl5 --no-wget local::lib Template::Plugin::YAML \
&& git clone --depth 1 --branch v2.4 --recursive https://github.com/z88dk/z88dk.git ${Z88DK_PATH} \
&& cd ${Z88DK_PATH} \
&& eval "$(perl -I$HOME/perl5/lib/perl5 -Mlocal::lib)" \
&& chmod 777 build.sh \
&& BUILD_SDCC=1 BUILD_SDCC_HTTP=1 MAKE_CONCURRENCY=-j8 ./build.sh \
&& make install-clean bins-clean
FROM ubuntu:24.04 FROM ubuntu:24.04
RUN apt-get update \ RUN apt-get update \
&& apt-get install -y --no-install-recommends \ && apt-get install -y --no-install-recommends \
@@ -119,7 +78,13 @@ COPY --from=build /inpaws/inpaws /bin/inpaws
COPY --from=build /usr/local/bin/ /usr/local/bin/ COPY --from=build /usr/local/bin/ /usr/local/bin/
COPY --from=build /usr/local/lib/python3.12/dist-packages/skoolkit/ /usr/local/lib/python3.12/dist-packages/skoolkit/ COPY --from=build /usr/local/lib/python3.12/dist-packages/skoolkit/ /usr/local/lib/python3.12/dist-packages/skoolkit/
COPY --from=build /opt/pasta80 /opt/pasta80 COPY --from=build /opt/pasta80 /opt/pasta80
COPY --from=z88dk /opt/z88dk/ /opt/z88dk/
# z88dk takes a long time to cross compile so I'm keeping this in a separate container
# so it doesn't require building every time the cache expires. The Dockerfile for z88dk
# is in a subdirectory of this one. If you're building the container yourself you may
# want to alter the next line to your own tagged build of z88dk but you're welcome to
# use mine.
COPY --from=boarstone.mcphail.uk/mcphail/z88dk:v2.4 /opt/z88dk/ /opt/z88dk/
ENV PATH="${PATH}:/opt/z88dk/bin:/opt/zxbasic:/opt/zxbasic/tools:/opt/pasta80" ENV PATH="${PATH}:/opt/z88dk/bin:/opt/zxbasic:/opt/zxbasic/tools:/opt/pasta80"
ENV ZCCCFG="/opt/z88dk/lib/config" ENV ZCCCFG="/opt/z88dk/lib/config"
USER ubuntu USER ubuntu
+1 -1
View File
@@ -2,7 +2,7 @@
"name": "ZX Spectrum dev tools", "name": "ZX Spectrum dev tools",
//"build": { "dockerfile": "Dockerfile" }, //"build": { "dockerfile": "Dockerfile" },
// The Dockerfile takes an age to build due to z88dk, so pull from prebuilt: // The Dockerfile takes an age to build due to z88dk, so pull from prebuilt:
"image": "boarstone.mcphail.uk/mcphail/speccydev:v6.0", "image": "boarstone.mcphail.uk/mcphail/speccydev:v8.0",
"remoteUser": "ubuntu", "remoteUser": "ubuntu",
"runArgs": [ "runArgs": [
"--network=host" "--network=host"
+55
View File
@@ -0,0 +1,55 @@
# syntax=docker/dockerfile:1
# Similar to the speccydev container, I'm building this with:
# docker buildx build --platform linux/arm64/v8,linux/amd64 -t boarstone.mcphail.uk/mcphail/z88dk:tagname .
FROM ubuntu:24.04 AS build
RUN apt-get update \
&& apt-get install -y --no-install-recommends \
bison \
build-essential \
ca-certificates \
ccache \
cpanminus \
curl \
dos2unix \
flex \
gdb \
git \
libboost-all-dev \
libcapture-tiny-perl \
libclone-perl \
libdata-hexdump-perl \
libfile-slurp-perl \
libgmp3-dev \
liblocal-lib-perl \
libmodern-perl-perl \
libpath-tiny-perl \
libregexp-common-perl \
libtext-table-perl \
libxml2-dev \
libyaml-perl \
m4 \
make \
perl \
pkg-config \
ragel \
re2c \
texi2html \
texinfo \
zlib1g-dev \
&& rm -rf /var/lib/apt/lists/*
ENV Z88DK_PATH="/opt/z88dk"
RUN cpanm -l $HOME/perl5 --no-wget local::lib Template::Plugin::YAML \
&& git clone --depth 1 --branch v2.4 --recursive https://github.com/z88dk/z88dk.git ${Z88DK_PATH} \
&& cd ${Z88DK_PATH} \
&& eval "$(perl -I$HOME/perl5/lib/perl5 -Mlocal::lib)" \
&& chmod 777 build.sh \
&& BUILD_SDCC=1 BUILD_SDCC_HTTP=1 ./build.sh \
&& make install-clean bins-clean
FROM ubuntu:24.04
COPY --from=build /opt/z88dk/ /opt/z88dk/
ENV PATH="$(PATH):/opt/z88dk/bin"
ENV ZCCCFG="/opt/z88dk/lib/config"
USER ubuntu
+8 -8
View File
@@ -1,10 +1,10 @@
# Development tools for the ZX Spectrum v6.0 # Development tools for the ZX Spectrum v8.0
The Dockerfile is the basis of the devcontainer and can be changed to add or remove tools. It will take a long time to build locally, so by default the devcontainer will pull a prebuilt version. Edit `.devcontainer/devcontainer.json` if you would rather build your own. The Dockerfile is the basis of the devcontainer and can be changed to add or remove tools. It will take a long time to build locally, so by default the devcontainer will pull a prebuilt version. Edit `.devcontainer/devcontainer.json` if you would rather build your own.
The devcontainer contains: The devcontainer contains:
- pasmo version 0.5.3 (assembler) - pasmo version 0.5.3 (assembler)
- sjasmplus version 1.21.1 (assembler) - sjasmplus version 1.23.0 (assembler)
- z80asm version 1.8 (assembler) - z80asm version 1.8 (assembler)
- z80dasm version 1.1.6 (disassembler) - z80dasm version 1.1.6 (disassembler)
- zmakebas version 1.2b (creates BASIC programs) - zmakebas version 1.2b (creates BASIC programs)
@@ -36,7 +36,7 @@ The devcontainer contains:
- various tools including nextcreator.py to build .nex files - various tools including nextcreator.py to build .nex files
- ttttt (converts binaries into .tap blocks) - ttttt (converts binaries into .tap blocks)
- inpaws version 1.0.2 (interactive fiction compiler/extractor for Gilsoft's PAW) - inpaws version 1.0.2 (interactive fiction compiler/extractor for Gilsoft's PAW)
- skoolkit version 9.6 (tools for creating browseable disassemblies of Spectrum games) - skoolkit version 10.0 (tools for creating browseable disassemblies of Spectrum games)
- sna2ctl.py - sna2ctl.py
- sna2skool.py - sna2skool.py
- skool2html.py - skool2html.py
@@ -53,7 +53,7 @@ The devcontainer contains:
- bin2sna.py - bin2sna.py
- snapmod.py - snapmod.py
- sna2img.py - sna2img.py
- pasta80 version 0.96 (PASCAL compiler) - pasta80 version 0.98 (PASCAL compiler)
- hdfmonkey version 0.4 (for manipulating sdcard files for the Spectrum Next) - hdfmonkey version 0.4 (for manipulating sdcard files for the Spectrum Next)
- git (version control) - git (version control)
- make (build control) - make (build control)
@@ -75,13 +75,13 @@ Several useful VSCode extentsions will be installed, including a Z80 assembly la
Thanks to the many authors of these wonderful tools and extensions; to think what we could have made with these in 1985! Thanks to the many authors of these wonderful tools and extensions; to think what we could have made with these in 1985!
## Breaking changes from v5.x ## Breaking changes from v7.x
Some of the binaries, such as `sjasmplus`, are now found in a different $PATH, which may break some existing build scripts. No breaking changes, but this version brings full support for Apple silicon which was not present in previous releases.
## New additions from v5.2 ## New additions from v7.0
Addition of TAPTOOLS. Native arm64 build for Apple devices.
## Install ## Install