fix: Nix: precompilation against stdlib, once more
This commit is contained in:
parent
180cc59d64
commit
cf1654df1f
2 changed files with 15 additions and 11 deletions
|
|
@ -89,27 +89,29 @@ rec {
|
|||
src = ../src;
|
||||
fullSrc = ../.;
|
||||
inherit debug;
|
||||
builtin = true;
|
||||
} // args);
|
||||
setBuiltin = pkg: pkg // {
|
||||
mods = mapAttrs (_: m: m // { builtin = true; }) pkg.mods;
|
||||
attachSharedLib = sharedLib: pkg: pkg // {
|
||||
inherit sharedLib;
|
||||
mods = mapAttrs (_: m: m // { inherit sharedLib; }) pkg.mods;
|
||||
};
|
||||
in (all: all // all.lean) rec {
|
||||
inherit (Lean) emacs-dev emacs-package vscode-dev vscode-package;
|
||||
Init = setBuiltin (build { name = "Init"; deps = []; });
|
||||
Std = setBuiltin (build { name = "Std"; deps = [ Init ]; });
|
||||
Lean = setBuiltin (build { name = "Lean"; deps = [ Init Std ]; });
|
||||
Init = attachSharedLib leanshared (build { name = "Init"; deps = []; });
|
||||
Std = attachSharedLib leanshared (build { name = "Std"; deps = [ Init ]; });
|
||||
Lean = attachSharedLib leanshared (build { name = "Lean"; deps = [ Init Std ]; });
|
||||
stdlib = [ Init Std Lean ];
|
||||
iTree = symlinkJoin { name = "ileans"; paths = map (l: l.iTree) stdlib; };
|
||||
Leanpkg = build { name = "Leanpkg"; deps = stdlib; linkFlags = ["-L${gmp}/lib -L${leanshared}"]; };
|
||||
extlib = stdlib ++ [ Leanpkg ];
|
||||
Leanc = build { name = "Leanc"; src = lean-bin-tools-unwrapped.leanc_src; deps = stdlib; linkFlags = ["-L${gmp}/lib -L${leanshared}"]; };
|
||||
stdlibLinkFlags = "-L${gmp}/lib -L${Init.staticLib} -L${Std.staticLib} -L${Lean.staticLib} -L${leancpp}/lib/lean";
|
||||
leanshared = runCommand "leanshared" { buildInputs = [ stdenv.cc ]; } ''
|
||||
leanshared = runCommand "leanshared" { buildInputs = [ stdenv.cc ]; libName = "libleanshared${stdenv.hostPlatform.extensions.sharedLibrary}"; } ''
|
||||
mkdir $out
|
||||
LEAN_CC=${stdenv.cc}/bin/cc ${lean-bin-tools-unwrapped}/bin/leanc -shared ${lib.optionalString stdenv.isLinux "-Bsymbolic"} \
|
||||
${if stdenv.isDarwin then "-Wl,-force_load,${Init.staticLib}/libInit.a -Wl,-force_load,${Std.staticLib}/libStd.a -Wl,-force_load,${Lean.staticLib}/libLean.a -Wl,-force_load,${leancpp}/lib/lean/libleancpp.a ${leancpp}/lib/libleanrt_initial-exec.a -lc++"
|
||||
else "-Wl,--whole-archive -lInit -lStd -lLean -lleancpp ${leancpp}/lib/libleanrt_initial-exec.a -Wl,--no-whole-archive -lstdc++"} -lm ${stdlibLinkFlags} \
|
||||
-o $out/libleanshared${stdenv.hostPlatform.extensions.sharedLibrary}
|
||||
-o $out/$libName
|
||||
'';
|
||||
mods = Init.mods // Std.mods // Lean.mods;
|
||||
leanc = writeShellScriptBin "leanc" ''
|
||||
|
|
|
|||
|
|
@ -21,6 +21,8 @@ lib.makeOverridable (
|
|||
precompilePackage ? precompileModules,
|
||||
# Lean plugin dependencies. Each derivation `plugin` should contain a plugin library at path `${plugin}/${plugin.name}`.
|
||||
pluginDeps ? [],
|
||||
# set only when compiling the stdlib
|
||||
builtin ? false,
|
||||
debug ? false, leanFlags ? [], leancFlags ? [], linkFlags ? [], executableName ? lib.toLower name,
|
||||
srcTarget ? "..#stage0", srcArgs ? "(\${args[*]})", lean-final ? lean-final' }:
|
||||
with builtins; let
|
||||
|
|
@ -47,7 +49,7 @@ with builtins; let
|
|||
}) buildCommand;
|
||||
mkSharedLib = name: args: runBareCommand "${name}-dynlib" {
|
||||
buildInputs = [ stdenv.cc ] ++ lib.optional stdenv.isDarwin darwin.cctools;
|
||||
libName = "${name}.${stdenv.hostPlatform.extensions.sharedLibrary}";
|
||||
libName = "${name}${stdenv.hostPlatform.extensions.sharedLibrary}";
|
||||
} ''
|
||||
mkdir -p $out
|
||||
${leanc}/bin/leanc -fPIC -shared ${lib.optionalString stdenv.isLinux "-Bsymbolic"} ${lib.optionalString stdenv.isDarwin "-Wl,-undefined,dynamic_lookup"} -L ${gmp}/lib \
|
||||
|
|
@ -85,7 +87,7 @@ with builtins; let
|
|||
|
||||
leanPluginFlags = lib.concatStringsSep " " (map (dep: "--plugin=${pathOfSharedLib dep}") pluginDeps);
|
||||
pkgLeanLoadDynlibPaths = map pathOfSharedLib allNativeSharedLibs;
|
||||
loadDynlibPathsOfDeps = deps: concatMap (d: lib.optional (d ? sharedLib) (pathOfSharedLib d.sharedLib)) deps;
|
||||
loadDynlibPathsOfDeps = deps: concatMap (d: lib.optional (!builtin && d ? sharedLib) (pathOfSharedLib d.sharedLib)) deps;
|
||||
|
||||
fakeDepRoot = runBareCommandLocal "${name}-dep-root" {} ''
|
||||
mkdir $out
|
||||
|
|
@ -144,7 +146,7 @@ with builtins; let
|
|||
leanc -c -o $out/$oPath $leancFlags -fPIC ${if debug then "${drv.c}/${drv.cPath} -g" else "src.c -O3 -DNDEBUG"}
|
||||
'';
|
||||
};
|
||||
precompileMod = mod: obj: deps: mkSharedLib mod "${obj}/${obj.oPath} ${lib.concatStringsSep " " (map (d: "${d.sharedLib}/*") (filter (d: !(d ? builtin)) deps))}";
|
||||
precompileMod = mod: obj: deps: mkSharedLib mod "${obj}/${obj.oPath} ${lib.concatStringsSep " " (map (d: "${d.sharedLib}/*") deps)}";
|
||||
mkMod = mod: deps:
|
||||
let drv = buildMod mod deps;
|
||||
obj = compileMod mod drv; in
|
||||
|
|
@ -189,7 +191,7 @@ with builtins; let
|
|||
staticLibArguments = staticLibLinkWrapper ("${staticLib}/* ${lib.concatStringsSep " " (map (d: "${d}/*.a") allStaticLibDeps)}");
|
||||
in rec {
|
||||
inherit name lean deps staticLibDeps allNativeSharedLibs allLinkFlags allExternalDeps print-lean-deps src objects staticLib;
|
||||
mods = if precompilePackage then mapAttrs (_: m: m // { inherit sharedLib; origShlib = m.sharedLib; }) mods' else mods';
|
||||
mods = if precompilePackage then mapAttrs (_: m: m // { inherit sharedLib; }) mods' else mods';
|
||||
modRoot = depRoot name [ mods.${name} ];
|
||||
cTree = symlinkJoin { name = "${name}-cTree"; paths = map (mod: mod.c) (attrValues mods); };
|
||||
oTree = symlinkJoin { name = "${name}-oTree"; paths = (attrValues objects); };
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue