chicken: support darwin platform (#103748)

Darwin was not included as a supported platform for chicken. However, it compiled and
worked fine after bypassing unsupported platforms.

We make two changes to chicken's derivation. First, we add darwin as a supported
platform.

Second, we set some envvars that force the build to use nix-supplied build
tools. Chicken's Makefile for macOS hardcodes paths to gcc and other build tools
(see
https://code.call-cc.org/cgi-bin/gitweb.cgi?p=chicken-core.git;a=blob;f=Makefile.macosx;h=5d4d9b0aa1bb4c95e1ba7a55f9586fa86ee5034f;hb=317468e4994e6245d787400359726a9fb97d5d60#l31). We
override these envvars to use the wrapped $CC and bintools provided by nix to make
the build pure.
This commit is contained in:
Mark Hudnall 2020-11-15 06:11:56 -08:00 committed by GitHub
parent 069f183f16
commit 79b78663e5
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 30 additions and 15 deletions

View File

@ -1,4 +1,4 @@
{ stdenv, fetchurl, makeWrapper, bootstrap-chicken ? null }: { stdenv, fetchurl, makeWrapper, darwin, bootstrap-chicken ? null }:
let let
version = "4.13.0"; version = "4.13.0";
@ -21,31 +21,39 @@ stdenv.mkDerivation {
sha256 = "0hvckhi5gfny3mlva6d7y9pmx7cbwvq0r7mk11k3sdiik9hlkmdd"; sha256 = "0hvckhi5gfny3mlva6d7y9pmx7cbwvq0r7mk11k3sdiik9hlkmdd";
}; };
setupHook = lib.ifEnable (bootstrap-chicken != null) ./setup-hook.sh; setupHook = lib.optional (bootstrap-chicken != null) ./setup-hook.sh;
buildFlags = [ "PLATFORM=${platform}" "PREFIX=$(out)" "VARDIR=$(out)/var/lib" ]; # -fno-strict-overflow is not a supported argument in clang on darwin
installFlags = [ "PLATFORM=${platform}" "PREFIX=$(out)" "VARDIR=$(out)/var/lib" ]; hardeningDisable = lib.optionals stdenv.isDarwin ["strictoverflow"];
makeFlags = [
"PLATFORM=${platform}" "PREFIX=$(out)"
"VARDIR=$(out)/var/lib"
] ++ (lib.optionals stdenv.isDarwin [
"XCODE_TOOL_PATH=${darwin.binutils.bintools}/bin"
"C_COMPILER=$(CC)"
]);
# We need a bootstrap-chicken to regenerate the c-files after # We need a bootstrap-chicken to regenerate the c-files after
# applying a patch to add support for CHICKEN_REPOSITORY_EXTRA # applying a patch to add support for CHICKEN_REPOSITORY_EXTRA
patches = lib.ifEnable (bootstrap-chicken != null) [ patches = lib.optionals (bootstrap-chicken != null) [
./0001-Introduce-CHICKEN_REPOSITORY_EXTRA.patch ./0001-Introduce-CHICKEN_REPOSITORY_EXTRA.patch
]; ];
buildInputs = [ buildInputs = [
makeWrapper makeWrapper
] ++ (lib.ifEnable (bootstrap-chicken != null) [ ] ++ (lib.optionals (bootstrap-chicken != null) [
bootstrap-chicken bootstrap-chicken
]); ]);
preBuild = lib.ifEnable (bootstrap-chicken != null) '' preBuild = lib.optionalString (bootstrap-chicken != null) ''
# Backup the build* files - those are generated from hostname, # Backup the build* files - those are generated from hostname,
# git-tag, etc. and we don't need/want that # git-tag, etc. and we don't need/want that
mkdir -p build-backup mkdir -p build-backup
mv buildid buildbranch buildtag.h build-backup mv buildid buildbranch buildtag.h build-backup
# Regenerate eval.c after the patch # Regenerate eval.c after the patch
make spotless $buildFlags make spotless $makeFlags
mv build-backup/* . mv build-backup/* .
''; '';
@ -64,7 +72,7 @@ stdenv.mkDerivation {
homepage = "http://www.call-cc.org/"; homepage = "http://www.call-cc.org/";
license = stdenv.lib.licenses.bsd3; license = stdenv.lib.licenses.bsd3;
maintainers = with stdenv.lib.maintainers; [ corngood ]; maintainers = with stdenv.lib.maintainers; [ corngood ];
platforms = stdenv.lib.platforms.linux; # Maybe other non-darwin Unix platforms = stdenv.lib.platforms.linux ++ stdenv.lib.platforms.darwin; # Maybe other Unix
description = "A portable compiler for the Scheme programming language"; description = "A portable compiler for the Scheme programming language";
longDescription = '' longDescription = ''
CHICKEN is a compiler for the Scheme programming language. CHICKEN is a compiler for the Scheme programming language.

View File

@ -1,4 +1,4 @@
{ stdenv, fetchurl, makeWrapper, bootstrap-chicken ? null }: { stdenv, fetchurl, makeWrapper, darwin, bootstrap-chicken ? null }:
let let
version = "5.2.0"; version = "5.2.0";
@ -21,14 +21,21 @@ stdenv.mkDerivation {
sha256 = "1yl0hxm9cirgcp8jgxp6vv29lpswfvaw3zfkh6rsj0vkrv44k4c1"; sha256 = "1yl0hxm9cirgcp8jgxp6vv29lpswfvaw3zfkh6rsj0vkrv44k4c1";
}; };
setupHook = lib.ifEnable (bootstrap-chicken != null) ./setup-hook.sh; setupHook = lib.optional (bootstrap-chicken != null) ./setup-hook.sh;
buildFlags = [ "PLATFORM=${platform}" "PREFIX=$(out)" ]; # -fno-strict-overflow is not a supported argument in clang on darwin
installFlags = [ "PLATFORM=${platform}" "PREFIX=$(out)" ]; hardeningDisable = lib.optionals stdenv.isDarwin ["strictoverflow"];
makeFlags = [
"PLATFORM=${platform}" "PREFIX=$(out)"
] ++ (lib.optionals stdenv.isDarwin [
"XCODE_TOOL_PATH=${darwin.binutils.bintools}/bin"
"C_COMPILER=$(CC)"
]);
buildInputs = [ buildInputs = [
makeWrapper makeWrapper
] ++ (lib.ifEnable (bootstrap-chicken != null) [ ] ++ (lib.optionals (bootstrap-chicken != null) [
bootstrap-chicken bootstrap-chicken
]); ]);
@ -46,7 +53,7 @@ stdenv.mkDerivation {
homepage = "http://www.call-cc.org/"; homepage = "http://www.call-cc.org/";
license = stdenv.lib.licenses.bsd3; license = stdenv.lib.licenses.bsd3;
maintainers = with stdenv.lib.maintainers; [ corngood ]; maintainers = with stdenv.lib.maintainers; [ corngood ];
platforms = stdenv.lib.platforms.linux; # Maybe other non-darwin Unix platforms = stdenv.lib.platforms.linux ++ stdenv.lib.platforms.darwin; # Maybe other Unix
description = "A portable compiler for the Scheme programming language"; description = "A portable compiler for the Scheme programming language";
longDescription = '' longDescription = ''
CHICKEN is a compiler for the Scheme programming language. CHICKEN is a compiler for the Scheme programming language.