2020-01-17 01:24:34 +01:00
|
|
|
# SPDX-License-Identifier: CC0-1.0
|
|
|
|
|
2020-01-16 18:43:24 +01:00
|
|
|
{ stdenv, nixpkgs, dhallApps, packages }:
|
|
|
|
|
|
|
|
let inherit (packages.genode) base-nova;
|
|
|
|
in nixpkgs.writeScriptBin "nova-image" (with nixpkgs.buildPackages;
|
|
|
|
let inherit (stdenv) cc;
|
|
|
|
|
|
|
|
in ''
|
|
|
|
#!${runtimeShell}
|
|
|
|
set -eu
|
|
|
|
|
|
|
|
CC="${cc}/bin/${cc.targetPrefix}cc"
|
|
|
|
LD="${buildPackages.binutils}/bin/${buildPackages.binutils.targetPrefix}ld"
|
|
|
|
|
|
|
|
TMPDIR="$(${coreutils}/bin/mktemp -p /tmp -d nova-iso.XXXX)"
|
|
|
|
# trap "rm -rf $TMPDIR" err exit
|
|
|
|
|
|
|
|
CORE_NOVA="${base-nova}/lib/core-nova.o"
|
|
|
|
|
|
|
|
export DHALL_PRELUDE=${packages.dhallPrelude}/package.dhall
|
|
|
|
export DHALL_GENODE=${packages.dhallGenode}/package.dhall
|
|
|
|
${dhallApps.dhall.program} text <<< "(${
|
|
|
|
../nova-modules.as.dhall
|
|
|
|
}) ($@)" > "$TMPDIR/modules.as"
|
|
|
|
|
|
|
|
# compile the boot modules into one object file
|
|
|
|
$CC -c -x assembler -o "$TMPDIR/boot_modules.o" "$TMPDIR/modules.as"
|
|
|
|
|
|
|
|
# link final image
|
|
|
|
$LD -nostdlib \
|
|
|
|
-T${base-nova.src}/repos/base/src/ld/genode.ld \
|
|
|
|
-T${base-nova.src}/repos/base-nova/src/core/core-bss.ld \
|
|
|
|
-z max-page-size=0x1000 \
|
|
|
|
-Ttext=0x100000 -gc-sections \
|
|
|
|
"$CORE_NOVA" "$TMPDIR/boot_modules.o" \
|
|
|
|
-o "image.elf"
|
|
|
|
'')
|