diff options
author | Mark Hudnall <me@markhudnall.com> | 2020-11-15 06:11:56 -0800 |
---|---|---|
committer | GitHub <noreply@github.com> | 2020-11-15 09:11:56 -0500 |
commit | 79b78663e52de262f662e8a2ee472209e07f0b63 (patch) | |
tree | 157486766721f0007f87e5c085004fae4abe4876 | |
parent | 069f183f16c3ea5d4b6e7625433b92eba77534f7 (diff) | |
download | nixpkgs-79b78663e52de262f662e8a2ee472209e07f0b63.tar nixpkgs-79b78663e52de262f662e8a2ee472209e07f0b63.tar.gz nixpkgs-79b78663e52de262f662e8a2ee472209e07f0b63.tar.bz2 nixpkgs-79b78663e52de262f662e8a2ee472209e07f0b63.tar.lz nixpkgs-79b78663e52de262f662e8a2ee472209e07f0b63.tar.xz nixpkgs-79b78663e52de262f662e8a2ee472209e07f0b63.tar.zst nixpkgs-79b78663e52de262f662e8a2ee472209e07f0b63.zip |
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.
-rw-r--r-- | pkgs/development/compilers/chicken/4/chicken.nix | 26 | ||||
-rw-r--r-- | pkgs/development/compilers/chicken/5/chicken.nix | 19 |
2 files changed, 30 insertions, 15 deletions
diff --git a/pkgs/development/compilers/chicken/4/chicken.nix b/pkgs/development/compilers/chicken/4/chicken.nix index 11f4eaada60..50126fdac92 100644 --- a/pkgs/development/compilers/chicken/4/chicken.nix +++ b/pkgs/development/compilers/chicken/4/chicken.nix @@ -1,4 +1,4 @@ -{ stdenv, fetchurl, makeWrapper, bootstrap-chicken ? null }: +{ stdenv, fetchurl, makeWrapper, darwin, bootstrap-chicken ? null }: let version = "4.13.0"; @@ -21,31 +21,39 @@ stdenv.mkDerivation { 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" ]; - installFlags = [ "PLATFORM=${platform}" "PREFIX=$(out)" "VARDIR=$(out)/var/lib" ]; + # -fno-strict-overflow is not a supported argument in clang on darwin + 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 # 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 ]; buildInputs = [ makeWrapper - ] ++ (lib.ifEnable (bootstrap-chicken != null) [ + ] ++ (lib.optionals (bootstrap-chicken != null) [ bootstrap-chicken ]); - preBuild = lib.ifEnable (bootstrap-chicken != null) '' + preBuild = lib.optionalString (bootstrap-chicken != null) '' # Backup the build* files - those are generated from hostname, # git-tag, etc. and we don't need/want that mkdir -p build-backup mv buildid buildbranch buildtag.h build-backup # Regenerate eval.c after the patch - make spotless $buildFlags + make spotless $makeFlags mv build-backup/* . ''; @@ -64,7 +72,7 @@ stdenv.mkDerivation { homepage = "http://www.call-cc.org/"; license = stdenv.lib.licenses.bsd3; 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"; longDescription = '' CHICKEN is a compiler for the Scheme programming language. diff --git a/pkgs/development/compilers/chicken/5/chicken.nix b/pkgs/development/compilers/chicken/5/chicken.nix index f07b63ea26f..712012643f3 100644 --- a/pkgs/development/compilers/chicken/5/chicken.nix +++ b/pkgs/development/compilers/chicken/5/chicken.nix @@ -1,4 +1,4 @@ -{ stdenv, fetchurl, makeWrapper, bootstrap-chicken ? null }: +{ stdenv, fetchurl, makeWrapper, darwin, bootstrap-chicken ? null }: let version = "5.2.0"; @@ -21,14 +21,21 @@ stdenv.mkDerivation { 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)" ]; - installFlags = [ "PLATFORM=${platform}" "PREFIX=$(out)" ]; + # -fno-strict-overflow is not a supported argument in clang on darwin + 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 = [ makeWrapper - ] ++ (lib.ifEnable (bootstrap-chicken != null) [ + ] ++ (lib.optionals (bootstrap-chicken != null) [ bootstrap-chicken ]); @@ -46,7 +53,7 @@ stdenv.mkDerivation { homepage = "http://www.call-cc.org/"; license = stdenv.lib.licenses.bsd3; 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"; longDescription = '' CHICKEN is a compiler for the Scheme programming language. |