Compare commits

...

6 Commits

Author SHA1 Message Date
Jonathan Schleifer 72ea21b9b8
Merge ad0dce421b into 4ff2d7d902 2024-01-31 18:47:34 -07:00
Wolfgang Thaller 4ff2d7d902
Merge pull request #227 from mcayland/fix/update-ubuntu-version
Dockerfile: update Ubuntu base image from 20.04 to 22.04
2024-01-24 03:08:39 +01:00
Mark Cave-Ayland 9facdaf3c1 Dockerfile: update Ubuntu base image from 20.04 to 22.04
The current CI build for Linux fails with the following error:

2791.4 Scanning dependencies of target ResourceFiles
2791.4 [ 68%] Building CXX object ResourceFiles/CMakeFiles/ResourceFiles.dir/ResourceFork.cc.o
2791.4 [ 69%] Building CXX object ResourceFiles/CMakeFiles/ResourceFiles.dir/BinaryIO.cc.o
2791.4 [ 69%] Building CXX object ResourceFiles/CMakeFiles/ResourceFiles.dir/ResType.cc.o
2791.4 [ 70%] Building CXX object ResourceFiles/CMakeFiles/ResourceFiles.dir/ResourceFile.cc.o
------
Dockerfile:21
--------------------
  20 |
  21 | >>> RUN mkdir /Retro68-build && \
  22 | >>>     mkdir /Retro68-build/bin && \
  23 | >>>     bash -c "cd /Retro68-build && bash /Retro68/build-toolchain.bash"

Looking back through the logs there is no sign of any specific error, however
the CI history indicates that the problem was introduced via commit e187bd21c2
("honor SOURCE_DATE_EPOCH variable when timestamping MacBinary files").

A bit of searching suggests a couple of possible reasons as to why commit e187bd21c2
could introduce a build failure: 1) the version of gcc being used may have a
buggy/incomplete implementation of std::chrono or 2) a bug in the version of cmake.

On this basis updating the Ubuntu base image from 20.04 (old LTS) to 22.04 (current
LTS) should resolve these issues, and indeed with this change applied I can
successfully build the container image from current Retro68 git as well as one of
the sample applications.
2024-01-23 20:55:56 +00:00
Wolfgang Thaller e187bd21c2 honor SOURCE_DATE_EPOCH variable when timestamping MacBinary files 2024-01-21 11:52:12 +01:00
Wolfgang Thaller e43fee2701 move `standalone` nix build experiments to separate module 2024-01-21 11:12:34 +01:00
Jonathan Schleifer ad0dce421b
Build cc1obj
This does not build libobjc, as it is broken in several ways. However,
it doesn't matter, since libobjc is basically not used by anyone anyway
and everybody uses a different runtime such as the ObjFW runtime.
2022-11-24 23:36:04 +01:00
6 changed files with 56 additions and 42 deletions

View File

@ -1,12 +1,12 @@
# vim:ft=dockerfile
# Base image
FROM ubuntu:20.04 AS base
FROM ubuntu:22.04 AS base
RUN apt-get update && \
DEBIAN_FRONTEND=noninteractive apt-get install -y \
cmake libgmp-dev libmpfr-dev libmpc-dev \
libboost-all-dev bison texinfo \
libboost-all-dev bison texinfo bzip2 \
ruby flex curl g++ git macutils
# Add toolchain to default PATH

View File

@ -75,6 +75,19 @@ static void writeMacBinary(std::ostream& out, std::string filename,
const std::string& rsrcBytes = resstream.str();
// MacBinary files contain mandatory timestamps (creation date and modification date)
// We set both of them, but to make reproducible builds possible, this optionally
// takes the time from the $SOURCE_DATE_EPOCH environment variable instead of the system clock.
// When building under `nix`, this is automatically set to the modification date of the newest source
// file.
auto timestamp = std::invoke([&] -> std::chrono::system_clock::time_point {
const char *sourceDateEpochEnvVar = getenv("SOURCE_DATE_EPOCH");
if (sourceDateEpochEnvVar && *sourceDateEpochEnvVar)
return std::chrono::system_clock::from_time_t((time_t)std::atoll(sourceDateEpochEnvVar));
else
return std::chrono::system_clock::now();
});
// Calculate Mac-style timestamp (seconds since 1 January 1904 00:00:00)
std::tm mac_epoch_tm = {
0, 0, 0, // 00:00:00

View File

@ -237,7 +237,7 @@ if [ $SKIP_THIRDPARTY != true ]; then
cd gcc-build
export target_configargs="--disable-nls --enable-libstdcxx-dual-abi=no --disable-libstdcxx-verbose"
$SRC/gcc/configure --target=m68k-apple-macos --prefix=$PREFIX \
--enable-languages=c,c++ --with-arch=m68k --with-cpu=m68000 \
--enable-languages=c,c++,objc,obj-c++ --with-arch=m68k --with-cpu=m68000 \
--disable-libssp MAKEINFO=missing
# There seems to be a build failure in parallel builds; ignore any errors and try again without -j8.
make -j8 || make
@ -280,7 +280,7 @@ if [ $SKIP_THIRDPARTY != true ]; then
cd gcc-build-ppc
export target_configargs="--disable-nls --enable-libstdcxx-dual-abi=no --disable-libstdcxx-verbose"
$SRC/gcc/configure --target=powerpc-apple-macos --prefix=$PREFIX \
--enable-languages=c,c++ --disable-libssp --disable-lto MAKEINFO=missing
--enable-languages=c,c++,objc,obj-c++ --disable-libssp --disable-lto MAKEINFO=missing
make -j8
make install
unset target_configargs

View File

@ -10,6 +10,9 @@
outputs = inputs@{ flake-parts, nixpkgs, multiversal, ... }:
flake-parts.lib.mkFlake { inherit inputs; } ({ self, lib, retroPlatforms, ... }: {
imports = [
./nix/standalone.nix
];
_module.args.lib = import (nixpkgs + "/lib");
_module.args.retroPlatforms = import ./nix/platforms.nix;
@ -55,26 +58,6 @@
tools = pkgs.retro68.tools;
hfsutils = pkgs.retro68.hfsutils;
default = pkgs.runCommand "Retro68" { } ''
mkdir $out
mkdir $out/m68k-apple-macos
mkdir $out/powerpc-apple-macos
${pkgs.xorg.lndir}/bin/lndir -silent ${self'.legacyPackages.pkgsCross.m68k.retro68.libretro}/. $out/m68k-apple-macos
${pkgs.xorg.lndir}/bin/lndir -silent ${self'.legacyPackages.pkgsCross.m68k.retro68.multiversal}/. $out/m68k-apple-macos
${pkgs.xorg.lndir}/bin/lndir -silent ${self'.legacyPackages.pkgsCross.powerpc.retro68.libretro}/. $out/powerpc-apple-macos
${pkgs.xorg.lndir}/bin/lndir -silent ${self'.legacyPackages.pkgsCross.powerpc.retro68.multiversal}/. $out/powerpc-apple-macos
${pkgs.xorg.lndir}/bin/lndir -silent ${self'.legacyPackages.pkgsCross.carbon.retro68.libretro}/. $out/powerpc-apple-macos
${pkgs.xorg.lndir}/bin/lndir -silent ${self'.legacyPackages.pkgsCross.carbon.retro68.multiversal}/. $out/powerpc-apple-macos
${pkgs.xorg.lndir}/bin/lndir -silent ${pkgs.retro68.tools}/. $out
${pkgs.xorg.lndir}/bin/lndir -silent ${pkgs.retro68.hfsutils}/. $out
${pkgs.xorg.lndir}/bin/lndir -silent ${pkgs.cmake}/. $out
${pkgs.xorg.lndir}/bin/lndir -silent ${pkgs.gnumake}/. $out
${pkgs.xorg.lndir}/bin/lndir -silent ${pkgs.ninja}/. $out
${pkgs.rsync}/bin/rsync -a ${self'.legacyPackages.pkgsCross.m68k.buildPackages.retro68.gcc_unwrapped}/. $out
${pkgs.rsync}/bin/rsync -a ${self'.legacyPackages.pkgsCross.powerpc.buildPackages.retro68.gcc_unwrapped}/. $out
${pkgs.rsync}/bin/rsync -a ${self'.legacyPackages.pkgsCross.carbon.buildPackages.retro68.gcc_unwrapped}/. $out
'';
samples = pkgs.linkFarm "Retro68-Samples" [
{ name = "m68k"; path = self'.legacyPackages.pkgsCross.m68k.retro68.samples; }

View File

@ -1126,7 +1126,6 @@ configure-target: \
maybe-configure-target-libbacktrace \
maybe-configure-target-libquadmath \
maybe-configure-target-libgfortran \
maybe-configure-target-libobjc \
maybe-configure-target-libgo \
maybe-configure-target-libphobos \
maybe-configure-target-libtermcap \
@ -1316,7 +1315,6 @@ all-target: maybe-all-target-libbacktrace
@endif target-libbacktrace-no-bootstrap
all-target: maybe-all-target-libquadmath
all-target: maybe-all-target-libgfortran
all-target: maybe-all-target-libobjc
all-target: maybe-all-target-libgo
@if target-libphobos-no-bootstrap
all-target: maybe-all-target-libphobos
@ -1419,7 +1417,6 @@ info-target: maybe-info-target-libgcc
info-target: maybe-info-target-libbacktrace
info-target: maybe-info-target-libquadmath
info-target: maybe-info-target-libgfortran
info-target: maybe-info-target-libobjc
info-target: maybe-info-target-libgo
info-target: maybe-info-target-libphobos
info-target: maybe-info-target-libtermcap
@ -1509,7 +1506,6 @@ dvi-target: maybe-dvi-target-libgcc
dvi-target: maybe-dvi-target-libbacktrace
dvi-target: maybe-dvi-target-libquadmath
dvi-target: maybe-dvi-target-libgfortran
dvi-target: maybe-dvi-target-libobjc
dvi-target: maybe-dvi-target-libgo
dvi-target: maybe-dvi-target-libphobos
dvi-target: maybe-dvi-target-libtermcap
@ -1599,7 +1595,6 @@ pdf-target: maybe-pdf-target-libgcc
pdf-target: maybe-pdf-target-libbacktrace
pdf-target: maybe-pdf-target-libquadmath
pdf-target: maybe-pdf-target-libgfortran
pdf-target: maybe-pdf-target-libobjc
pdf-target: maybe-pdf-target-libgo
pdf-target: maybe-pdf-target-libphobos
pdf-target: maybe-pdf-target-libtermcap
@ -1689,7 +1684,6 @@ html-target: maybe-html-target-libgcc
html-target: maybe-html-target-libbacktrace
html-target: maybe-html-target-libquadmath
html-target: maybe-html-target-libgfortran
html-target: maybe-html-target-libobjc
html-target: maybe-html-target-libgo
html-target: maybe-html-target-libphobos
html-target: maybe-html-target-libtermcap
@ -1779,7 +1773,6 @@ TAGS-target: maybe-TAGS-target-libgcc
TAGS-target: maybe-TAGS-target-libbacktrace
TAGS-target: maybe-TAGS-target-libquadmath
TAGS-target: maybe-TAGS-target-libgfortran
TAGS-target: maybe-TAGS-target-libobjc
TAGS-target: maybe-TAGS-target-libgo
TAGS-target: maybe-TAGS-target-libphobos
TAGS-target: maybe-TAGS-target-libtermcap
@ -1869,7 +1862,6 @@ install-info-target: maybe-install-info-target-libgcc
install-info-target: maybe-install-info-target-libbacktrace
install-info-target: maybe-install-info-target-libquadmath
install-info-target: maybe-install-info-target-libgfortran
install-info-target: maybe-install-info-target-libobjc
install-info-target: maybe-install-info-target-libgo
install-info-target: maybe-install-info-target-libphobos
install-info-target: maybe-install-info-target-libtermcap
@ -2049,7 +2041,6 @@ install-pdf-target: maybe-install-pdf-target-libgcc
install-pdf-target: maybe-install-pdf-target-libbacktrace
install-pdf-target: maybe-install-pdf-target-libquadmath
install-pdf-target: maybe-install-pdf-target-libgfortran
install-pdf-target: maybe-install-pdf-target-libobjc
install-pdf-target: maybe-install-pdf-target-libgo
install-pdf-target: maybe-install-pdf-target-libphobos
install-pdf-target: maybe-install-pdf-target-libtermcap
@ -2139,7 +2130,6 @@ install-html-target: maybe-install-html-target-libgcc
install-html-target: maybe-install-html-target-libbacktrace
install-html-target: maybe-install-html-target-libquadmath
install-html-target: maybe-install-html-target-libgfortran
install-html-target: maybe-install-html-target-libobjc
install-html-target: maybe-install-html-target-libgo
install-html-target: maybe-install-html-target-libphobos
install-html-target: maybe-install-html-target-libtermcap
@ -2229,7 +2219,6 @@ installcheck-target: maybe-installcheck-target-libgcc
installcheck-target: maybe-installcheck-target-libbacktrace
installcheck-target: maybe-installcheck-target-libquadmath
installcheck-target: maybe-installcheck-target-libgfortran
installcheck-target: maybe-installcheck-target-libobjc
installcheck-target: maybe-installcheck-target-libgo
installcheck-target: maybe-installcheck-target-libphobos
installcheck-target: maybe-installcheck-target-libtermcap
@ -2319,7 +2308,6 @@ mostlyclean-target: maybe-mostlyclean-target-libgcc
mostlyclean-target: maybe-mostlyclean-target-libbacktrace
mostlyclean-target: maybe-mostlyclean-target-libquadmath
mostlyclean-target: maybe-mostlyclean-target-libgfortran
mostlyclean-target: maybe-mostlyclean-target-libobjc
mostlyclean-target: maybe-mostlyclean-target-libgo
mostlyclean-target: maybe-mostlyclean-target-libphobos
mostlyclean-target: maybe-mostlyclean-target-libtermcap
@ -2409,7 +2397,6 @@ clean-target: maybe-clean-target-libgcc
clean-target: maybe-clean-target-libbacktrace
clean-target: maybe-clean-target-libquadmath
clean-target: maybe-clean-target-libgfortran
clean-target: maybe-clean-target-libobjc
clean-target: maybe-clean-target-libgo
clean-target: maybe-clean-target-libphobos
clean-target: maybe-clean-target-libtermcap
@ -2499,7 +2486,6 @@ distclean-target: maybe-distclean-target-libgcc
distclean-target: maybe-distclean-target-libbacktrace
distclean-target: maybe-distclean-target-libquadmath
distclean-target: maybe-distclean-target-libgfortran
distclean-target: maybe-distclean-target-libobjc
distclean-target: maybe-distclean-target-libgo
distclean-target: maybe-distclean-target-libphobos
distclean-target: maybe-distclean-target-libtermcap
@ -2589,7 +2575,6 @@ maintainer-clean-target: maybe-maintainer-clean-target-libgcc
maintainer-clean-target: maybe-maintainer-clean-target-libbacktrace
maintainer-clean-target: maybe-maintainer-clean-target-libquadmath
maintainer-clean-target: maybe-maintainer-clean-target-libgfortran
maintainer-clean-target: maybe-maintainer-clean-target-libobjc
maintainer-clean-target: maybe-maintainer-clean-target-libgo
maintainer-clean-target: maybe-maintainer-clean-target-libphobos
maintainer-clean-target: maybe-maintainer-clean-target-libtermcap
@ -2737,7 +2722,6 @@ check-target: \
maybe-check-target-libbacktrace \
maybe-check-target-libquadmath \
maybe-check-target-libgfortran \
maybe-check-target-libobjc \
maybe-check-target-libgo \
maybe-check-target-libphobos \
maybe-check-target-libtermcap \
@ -2929,7 +2913,6 @@ install-target: \
maybe-install-target-libbacktrace \
maybe-install-target-libquadmath \
maybe-install-target-libgfortran \
maybe-install-target-libobjc \
maybe-install-target-libgo \
maybe-install-target-libphobos \
maybe-install-target-libtermcap \
@ -3039,7 +3022,6 @@ install-strip-target: \
maybe-install-strip-target-libbacktrace \
maybe-install-strip-target-libquadmath \
maybe-install-strip-target-libgfortran \
maybe-install-strip-target-libobjc \
maybe-install-strip-target-libgo \
maybe-install-strip-target-libphobos \
maybe-install-strip-target-libtermcap \

36
nix/standalone.nix Normal file
View File

@ -0,0 +1,36 @@
# flake part to add a 'standalone' build of retro68 for all archs,
# i.e. a build that does not rely on nixpkgs's wrapper setup.
# this might be what should be put into a docker image.
# Warning: does not yet work.
{ ... }: {
perSystem = { self', pkgs, ... }: {
packages.standalone = pkgs.runCommand "Retro68" { } ''
mkdir -p $out/m68k-apple-macos/cmake
mkdir -p $out/powerpc-apple-macos/cmake
${pkgs.xorg.lndir}/bin/lndir -silent ${self'.legacyPackages.pkgsCross.m68k.retro68.libretro}/. $out/m68k-apple-macos
${pkgs.xorg.lndir}/bin/lndir -silent ${self'.legacyPackages.pkgsCross.m68k.retro68.multiversal}/. $out/m68k-apple-macos
${pkgs.xorg.lndir}/bin/lndir -silent ${self'.legacyPackages.pkgsCross.powerpc.retro68.libretro}/. $out/powerpc-apple-macos
${pkgs.xorg.lndir}/bin/lndir -silent ${self'.legacyPackages.pkgsCross.powerpc.retro68.multiversal}/. $out/powerpc-apple-macos
${pkgs.xorg.lndir}/bin/lndir -silent ${self'.legacyPackages.pkgsCross.carbon.retro68.libretro}/. $out/powerpc-apple-macos
${pkgs.xorg.lndir}/bin/lndir -silent ${self'.legacyPackages.pkgsCross.carbon.retro68.multiversal}/. $out/powerpc-apple-macos
${pkgs.xorg.lndir}/bin/lndir -silent ${pkgs.retro68.tools}/. $out
${pkgs.xorg.lndir}/bin/lndir -silent ${pkgs.retro68.hfsutils}/. $out
${pkgs.xorg.lndir}/bin/lndir -silent ${pkgs.cmake}/. $out
${pkgs.xorg.lndir}/bin/lndir -silent ${pkgs.gnumake}/. $out
${pkgs.xorg.lndir}/bin/lndir -silent ${pkgs.ninja}/. $out
${pkgs.rsync}/bin/rsync -a ${self'.legacyPackages.pkgsCross.m68k.buildPackages.retro68.gcc_unwrapped}/. $out
${pkgs.rsync}/bin/rsync -a ${self'.legacyPackages.pkgsCross.powerpc.buildPackages.retro68.gcc_unwrapped}/. $out
${pkgs.rsync}/bin/rsync -a ${self'.legacyPackages.pkgsCross.carbon.buildPackages.retro68.gcc_unwrapped}/. $out
substitute ${../cmake/retro68.toolchain.cmake.in} $out/m68k-apple-macos/cmake/retro68.toolchain.cmake --subst-var-by RETRO68_ROOT $out
substitute ${../cmake/retroppc.toolchain.cmake.in} $out/powerpc-apple-macos/cmake/retroppc.toolchain.cmake --subst-var-by RETRO68_ROOT $out
substitute ${../cmake/retrocarbon.toolchain.cmake.in} $out/powerpc-apple-macos/cmake/retrocarbon.toolchain.cmake --subst-var-by RETRO68_ROOT $out
cp ${../cmake/add_application.cmake} $out/m68k-apple-macos/cmake/add_application.cmake
cp -r ${../cmake/Platform} $out/m68k-apple-macos/cmake/Platform
cp -r ${../cmake/Platform} $out/powerpc-apple-macos/cmake/Platform
'';
};
}