Skip to content

Commit e9d141b

Browse files
committed
permit debug information through gdb
1 parent c643f15 commit e9d141b

5 files changed

Lines changed: 75 additions & 54 deletions

File tree

deps/musl/default.nix

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22
stdenv
33
, pkgs
44
, linuxHeaders ? null
5+
, debug ? false
56
}:
67
stdenv.mkDerivation rec {
78
pname = "musl-includeos";
@@ -40,7 +41,8 @@ stdenv.mkDerivation rec {
4041
./configure --prefix=$out --disable-shared --enable-debug --with-malloc=oldmalloc CROSS_COMPILE=${stdenv.targetPlatform.config}-
4142
'';
4243

43-
CFLAGS = "-Wno-error=int-conversion -nostdinc";
44+
dontStrip = debug;
45+
CFLAGS = "-Wno-error=int-conversion -nostdinc${pkgs.lib.optionalString debug " -g"}";
4446

4547
meta = {
4648
description = "musl - Linux based libc, built with IncludeOS linux-like syscalls";

flake.lock

Lines changed: 4 additions & 4 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

flake.nix

Lines changed: 53 additions & 45 deletions
Original file line numberDiff line numberDiff line change
@@ -3,18 +3,19 @@
33

44
inputs = {
55
nixpkgs.url = "github:NixOS/nixpkgs/25.05";
6-
vmrunner.url = "github:includeos/vmrunner";
6+
# vmrunner.url = "github:includeos/vmrunner";
7+
vmrunner.url = "github:mazunki/vmrunner";
78
};
89

910
outputs = { self, nixpkgs, vmrunner }:
1011
let
1112
system = "x86_64-linux";
1213

13-
mkIncludeos = { withCcache ? false, smp ? false }:
14+
mkIncludeos = { withCcache ? false, smp ? false, debug ? false }:
1415
let
1516
overlays = [
1617
(import ./overlay.nix {
17-
inherit withCcache smp;
18+
inherit withCcache smp debug;
1819
disableTargetWarning = true;
1920
})
2021
];
@@ -45,61 +46,68 @@
4546
inherit chainloader; # 32-bit boot stub that hotswaps into the 64-bit unikernel
4647
};
4748

48-
default = mkIncludeos {};
49-
mkUnikernel = import ./mkUnikernel.nix { inherit system default vmrunner; };
49+
default = mkIncludeos {};
50+
defaultDebug = mkIncludeos { debug = true; };
51+
mkUnikernel = import ./mkUnikernel.nix { inherit system default defaultDebug vmrunner; };
5052
in {
5153
packages.${system} = {
52-
default = default.includeos;
54+
default = default.includeos // { debug = defaultDebug.includeos; };
5355
chainloader = default.chainloader;
5456
example = mkUnikernel { unikernel = ./example; };
5557
};
5658

5759
devShells.${system}.default = import ./develop.nix { includeos = default.includeos; };
5860

59-
lib.${system} = { inherit mkIncludeos mkUnikernel; };
61+
lib.${system} = {
62+
inherit mkIncludeos mkUnikernel;
6063

61-
apps.${system} = {
62-
default = self.apps.${system}.boot-unikernel;
64+
mkChainloader = { mem }:
65+
vmrunner.lib.${system}.mkBoot default.chainloader { inherit mem; };
6366

64-
boot = {
65-
type = "app";
66-
program = "${vmrunner.lib.${system}.mkBoot default.chainloader {}}/bin/boot";
67-
};
67+
boot = { kernel ? "service", mem, kvm ? false, debug ? false }:
68+
let
69+
chainloaders = self.lib.${system}.mkChainloader { inherit mem; };
70+
chainloader = if kvm then chainloaders.kvm
71+
else if debug then chainloaders.debug
72+
else chainloaders.default;
73+
in {
74+
type = "app";
75+
program = "${default.pkgs.writeShellScript "boot-unikernel" ''
76+
set -e
77+
dir="''${1:-./result}"
78+
${default.pkgs.lib.optionalString debug ''echo "boot: $dir/${kernel}" >&2''}
79+
exec ${chainloader}/bin/boot "$dir/${kernel}" "$@"
80+
''}";
81+
};
6882

69-
boot-unikernel = {
70-
type = "app";
71-
program = "${default.pkgs.writeShellScript "boot-unikernel" ''
72-
set -e
73-
dir="''${1:-./result}"
74-
shift || true
75-
exec ${vmrunner.lib.${system}.mkBoot default.chainloader {}}/bin/boot \
76-
-j $dir/vm.json \
77-
$dir/*.elf.bin \
78-
"$@"
79-
''}";
80-
};
83+
mkBoot1 = { src, kernel ? "service", kvm ? false, mem ? "16G", debug ? false }:
84+
let
85+
bootApp = self.lib.${system}.boot { inherit kernel kvm debug mem; };
86+
in {
87+
type = "app";
88+
program = "${default.pkgs.writeShellScript "run-flake-package" ''
89+
set -e
90+
exec ${bootApp.program} ${src} "$@"
91+
''}";
92+
};
8193

82-
boot-unikernel-kvm = {
83-
type = "app";
84-
program = "${default.pkgs.writeShellScript "boot-unikernel-kvm" ''
85-
set -e
86-
dir="''${1:-./result}"
87-
shift || true
88-
exec ${vmrunner.lib.${system}.mkBoot default.chainloader { kvm = true; }}/bin/boot \
89-
-j $dir/vm.json \
90-
$dir/*.elf.bin \
91-
"$@"
92-
''}";
93-
};
94+
mkBoot = args:
95+
let
96+
debugSrc = args.debugSrc or args.src;
97+
base = builtins.removeAttrs args [ "debugSrc" ];
98+
tcg = self.lib.${system}.mkBoot1 (base // { kvm = false; debug = false; });
99+
kvm = self.lib.${system}.mkBoot1 (base // { kvm = true; debug = false; });
100+
debug = self.lib.${system}.mkBoot1 (base // { src = debugSrc; kvm = false; debug = true; });
101+
in
102+
tcg // { inherit tcg kvm debug; };
103+
};
94104

95-
example = {
96-
type = "app";
97-
program = "${default.pkgs.writeShellScript "run-example" ''
98-
set -e
99-
built=$(nix build path:${self.outPath}#example --no-link --print-out-paths)
100-
exec ${self.apps.${system}.boot-unikernel.program} $built "$@"
101-
''}";
102-
};
105+
apps.${system} = {
106+
default = self.apps.${system}.boot-unikernel;
107+
108+
boot-unikernel = self.lib.${system}.boot { mem = "128m"; };
109+
110+
example = self.lib.${system}.mkBoot { src = self.packages.${system}.example; kernel = "hello_includeos.elf.bin"; };
103111
};
104112
};
105113
}

mkUnikernel.nix

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,11 @@
11
# mkUnikernel.nix
2-
{ system, default, vmrunner }:
2+
{ system, default, defaultDebug, vmrunner }:
33
args:
44
let
5-
ios = if args ? includeos then args.includeos else default;
5+
debug = args.debug or false;
6+
ios = if args ? includeos then args.includeos
7+
else if debug then defaultDebug
8+
else default;
69
vmrunnerPkg = if args ? vmrunner then args.vmrunner
710
else vmrunner.packages.${system}.default;
811

@@ -37,6 +40,10 @@ ios.includeos.stdenv.mkDerivation {
3740
"-DINCLUDEOS_PACKAGE=${ios.includeos}"
3841
"-DCMAKE_MODULE_PATH=${ios.includeos}/cmake"
3942
"-DFOR_PRODUCTION=${if forProduction then "ON" else "OFF"}"
43+
"-DCMAKE_BUILD_TYPE=${if debug then "Debug" else "Release"}"
44+
] ++ ios.pkgs.lib.optionals debug [
45+
"-DCMAKE_C_FLAGS=-ffile-prefix-map=/build/${builtins.baseNameOf src}=/build/unikernel"
46+
"-DCMAKE_CXX_FLAGS=-ffile-prefix-map=/build/${builtins.baseNameOf src}=/build/unikernel"
4047
];
4148

4249
installPhase = ''

overlay.nix

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22
withCcache, # Enable ccache. Requires correct permissions, see below.
33
disableTargetWarning ? true, # TODO: see https://github.com/NixOS/nixpkgs/issues/395191
44
smp, # Enable multicore support (SMP)
5+
debug ? false,
56
} :
67
final: prev: {
78

@@ -13,7 +14,7 @@ final: prev: {
1314
musl-unpatched = self.callPackage ./deps/musl-unpatched/default.nix { linuxHeaders = prev.linuxHeaders; };
1415

1516
# Import IncludeOS musl which will be built and linked with IncludeOS services
16-
musl-includeos = self.callPackage ./deps/musl/default.nix { };
17+
musl-includeos = self.callPackage ./deps/musl/default.nix { inherit debug; };
1718

1819
# Clang with unpatched musl for building libcxx
1920
clang_musl_unpatched_nolibcxx = self.llvmPkgs.clangNoLibcxx.override (old: {
@@ -191,7 +192,10 @@ final: prev: {
191192

192193
smpFlags = if smp then [ "-DSMP=ON" ] else [];
193194

194-
cmakeFlags = archFlags ++ smpFlags;
195+
debugFlags = if debug then [ "-DCMAKE_BUILD_TYPE=Debug" ] else [];
196+
dontStrip = debug;
197+
198+
cmakeFlags = archFlags ++ smpFlags ++ debugFlags;
195199

196200
# Add some pasthroughs, for easily building the dependencies (for debugging):
197201
# $ nix-build -A NAME

0 commit comments

Comments
 (0)