Pass toolchain paths to Tup directly as configuration

This commit is contained in:
Ehmry - 2020-01-01 14:12:28 +01:00
parent c6968d30ad
commit cb2bc510bf
2 changed files with 94 additions and 36 deletions

View File

@ -16,13 +16,18 @@ let
sourceForgeToolchain = nixpkgs'.buildPackages.callPackage ./toolchain.nix { };
stdenvGenodeLabs =
nixpkgs'.stdenvAdapters.overrideCC nixpkgs'.stdenv sourceForgeToolchain;
stdenvLlvm = let inherit (nixpkgs') stdenv;
in assert stdenv.cc.isClang; stdenv;
stdenvGcc = let
stdenv =
nixpkgs'.stdenvAdapters.overrideCC nixpkgs'.stdenv sourceForgeToolchain;
in assert stdenv.cc.isGNU; stdenv;
src = self.outPath or (builtins.fetchGit ./.);
version = self.lastModified or "unstable";
inherit (stdenvGenodeLabs) lib targetPlatform;
inherit (stdenvLlvm) lib targetPlatform;
specs = with targetPlatform;
[ ]
@ -42,9 +47,9 @@ let
++ lib.optional isx86_64 "x86_64";
buildRepo = { repo, repoInputs }:
toTupConfig = stdenv: attrs:
let
tupArch = with stdenvGenodeLabs.targetPlatform;
tupArch = with stdenv.targetPlatform;
if isAarch32 then
"arm"
@ -64,18 +69,70 @@ let
abort "unhandled targetPlatform";
toTupConfig = attrs:
nixpkgs'.writeTextFile {
name = "tup.config";
text = with builtins;
let
op = config: name: ''
${config}CONFIG_${name}=${getAttr name attrs}
'';
in foldl' op "" (attrNames attrs);
};
attrs' = with stdenv; { TUP_ARCH = tupArch; } // attrs;
in nixpkgs'.writeTextFile {
name = "tup.config";
text = with builtins;
let
op = config: name: ''
${config}CONFIG_${name}=${getAttr name attrs}
'';
in foldl' op "" (attrNames attrs);
};
in stdenvGenodeLabs.mkDerivation {
tupConfigGcc = let
f = stdenv:
let prefix = bin: "${stdenv.cc}/bin/${stdenv.cc.targetPrefix}${bin}";
in {
AR = prefix "ar";
CC = prefix "gcc";
CXX = prefix "g++";
LD = prefix "ld";
NM = prefix "nm";
OBJCOPY = prefix "objcopy";
OBJDUMP = prefix "objdump";
RANLIB = prefix "ranlib";
READELF = prefix "readelf";
STRIP = prefix "strip";
PKGCONFIG = "${nixpkgs'.buildPackages.pkgconfig}/bin/pkg-config";
IS_GCC = "";
LINUX_HEADERS = buildPackages.glibc.dev;
VERSION = version;
};
in toTupConfig stdenvGcc (f stdenvGcc);
tupConfigLlvm = let
f = stdenv:
let prefix = bin: "${stdenv.cc}/bin/${stdenv.cc.targetPrefix}${bin}";
in {
AR = prefix "ar";
CC = prefix "cc";
CXX = prefix "c++";
LD = prefix "ld";
NM = prefix "nm";
OBJCOPY = prefix "objcopy";
OBJDUMP = prefix "objdump";
RANLIB = prefix "ranlib";
READELF = prefix "readelf";
STRIP = prefix "strip";
PKGCONFIG = "${nixpkgs'.buildPackages.pkgconfig}/bin/pkg-config";
IS_LLVM = "";
LIBCXXABI = llvmPackages.libcxxabi;
LIBCXX = llvmPackages.libcxx;
LIBUNWIND_BAREMETAL =
llvmPackages.libunwind.override { isBaremetal = true; };
LIBUNWIND = llvmPackages.libunwind;
LINUX_HEADERS = buildPackages.glibc.dev;
VERSION = version;
};
in toTupConfig stdenvLlvm (f stdenvLlvm);
buildRepo = { stdenv, repo, repoInputs }:
let
in stdenv.mkDerivation {
pname = "genode-" + repo;
inherit src repo specs version;
@ -88,21 +145,17 @@ let
depsBuildBuild = with buildPackages; [ llvm pkgconfig tup ];
tupConfig = toTupConfig {
LIBCXX = llvmPackages.libcxx;
LIBCXXABI = llvmPackages.libcxxabi;
LIBUNWIND = llvmPackages.libunwind;
LIBUNWIND_BAREMETAL =
llvmPackages.libunwind.override { isBaremetal = true; };
LINUX_HEADERS = buildPackages.glibc.dev;
OLEVEL = "-O2";
TUP_ARCH = tupArch;
VERSION = version;
};
tupConfig = if stdenv.cc.isGNU then
tupConfigGcc
else if stdenv.cc.isClang then
tupConfigLlvm
else
throw "no Tup config for this stdenv";
configurePhase = ''
# Configure Tup
cp $tupConfig tup.config
set -v
install -m666 $tupConfig tup.config
echo CONFIG_NIX_OUTPUTS_OUT=$out >> tup.config
echo CONFIG_NIX_OUTPUTS_DEV=$out >> tup.config
@ -161,32 +214,33 @@ let
};
buildRepo' = { ... } @ args: buildRepo ({ stdenv = stdenvGcc; } // args);
in rec {
base = buildRepo {
base = buildRepo' {
repo = "base";
repoInputs = [ ];
};
base-linux = buildRepo {
base-linux = buildRepo' {
repo = "base-linux";
repoInputs = [ base ];
};
base-nova = buildRepo {
base-nova = buildRepo' {
repo = "base-nova";
repoInputs = [ base ];
};
os = buildRepo {
os = buildRepo' {
repo = "os";
repoInputs = [ base ];
};
gems = buildRepo {
gems = buildRepo' {
repo = "gems";
repoInputs = [ os ];
};
inherit (nixpkgs') stdenv;
inherit stdenvGenodeLabs;
inherit stdenvGcc stdenvLlvm tupConfigGcc tupConfigLlvm;
}

View File

@ -63,4 +63,8 @@ let
'';
};
in wrapCC (cc // { isGNU = true; })
wrapped = wrapCC (cc // { isGNU = true; });
in wrapped.overrideAttrs (attrs: {
targetPrefix = "genode-x86-64-";
})