2020-02-18 20:14:29 +01:00
|
|
|
# SPDX-License-Identifier: CC0-1.0
|
|
|
|
|
2020-03-18 12:57:00 +01:00
|
|
|
{ stdenv, nixpkgs, apps, packages }:
|
2020-02-18 20:14:29 +01:00
|
|
|
|
2020-03-10 13:33:53 +01:00
|
|
|
let inherit (packages) genodeSources base-hw-pc;
|
2020-02-18 20:14:29 +01:00
|
|
|
in nixpkgs.writeScriptBin "hw-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 -d)"
|
|
|
|
trap "rm -rf $TMPDIR" err exit
|
|
|
|
|
2020-03-18 12:57:00 +01:00
|
|
|
export DHALL_GENODE=${packages.dhallGenode}/source.dhall
|
2020-02-18 20:14:29 +01:00
|
|
|
|
|
|
|
build_core() {
|
|
|
|
local lib="$1"
|
|
|
|
local modules="$2"
|
|
|
|
local link_address="$3"
|
2020-03-18 12:57:00 +01:00
|
|
|
${apps.dhall.program} text <<< \
|
2020-02-18 20:14:29 +01:00
|
|
|
"(${../modules.as.dhall}).to64bitImage ($modules)" \
|
|
|
|
> "$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 \
|
|
|
|
--strip-all \
|
2020-03-10 13:33:53 +01:00
|
|
|
-T${genodeSources}/repos/base/src/ld/genode.ld \
|
2020-02-18 20:14:29 +01:00
|
|
|
-z max-page-size=0x1000 \
|
|
|
|
-Ttext=$link_address -gc-sections \
|
|
|
|
"$lib" "$TMPDIR/boot_modules.o"
|
|
|
|
cat a.out
|
|
|
|
}
|
2020-03-07 13:32:58 +01:00
|
|
|
|
2020-03-18 12:57:00 +01:00
|
|
|
${apps.dhall.program} text \
|
2020-03-07 13:32:58 +01:00
|
|
|
<<< "(env:DHALL_GENODE).Init.render ($@).config" \
|
|
|
|
| ${nixpkgs.buildPackages.libxml2}/bin/xmllint \
|
2020-03-10 13:33:53 +01:00
|
|
|
-schema ${packages.genodeSources}/repos/os/src/init/config.xsd - \
|
2020-03-07 13:32:58 +01:00
|
|
|
| sed 's/>/>/g' \
|
|
|
|
> $TMPDIR/config
|
|
|
|
|
2020-03-18 12:57:00 +01:00
|
|
|
${apps.dhall.program} \
|
2020-03-07 13:32:58 +01:00
|
|
|
<<< "${../insert-config-rom.dhall} \"$TMPDIR/config\" ($@).rom" \
|
|
|
|
> "$TMPDIR/modules.dhall"
|
|
|
|
|
2020-03-10 13:33:53 +01:00
|
|
|
build_core "''${CORE_OBJ:-${base-hw-pc.coreObj}}" "$TMPDIR/modules.dhall" 0xffffffc000000000 > core.elf
|
|
|
|
build_core "''${BOOTSTRAP_OBJ:-${base-hw-pc.bootstrapObj}}" "${
|
2020-03-07 13:32:58 +01:00
|
|
|
../to-rom.dhall
|
|
|
|
} \"core.elf\" \"./core.elf\"" 0x00200000
|
2020-02-18 20:14:29 +01:00
|
|
|
'')
|