Add in-kernel test runner
This adds a way to run tests inside the Smalltown kernel.
Improvements to the Bazel part of this are tracked in T726
Test Plan: Tested by intentionally failing the test.
X-Origin-Diff: phab/D485
GitOrigin-RevId: e4aad7f28d122d82a7fcb6699e678cbe022e2f73
diff --git a/core/tools/ktest/BUILD b/core/tools/ktest/BUILD
new file mode 100644
index 0000000..e139a18
--- /dev/null
+++ b/core/tools/ktest/BUILD
@@ -0,0 +1,62 @@
+load("@io_bazel_rules_go//go:def.bzl", "go_binary", "go_library")
+load("//core/tools/kconfig-patcher:kconfig-patcher.bzl", "kconfig_patch")
+
+go_library(
+ name = "go_default_library",
+ srcs = ["main.go"],
+ importpath = "git.monogon.dev/source/nexantic.git/core/tools/ktest",
+ visibility = ["//visibility:private"],
+)
+
+go_binary(
+ name = "ktest",
+ embed = [":go_default_library"],
+ pure = "on",
+ visibility = ["//visibility:public"],
+)
+
+kconfig_patch(
+ name = "testing-config",
+ src = "//third_party/linux:kernel-config",
+ out = "testing.config",
+ override_configs = {
+ # Unlock command line
+ "CONFIG_CMDLINE_OVERRIDE": "n",
+ "CONFIG_CMDLINE_BOOL": "n",
+ # Shave off 1 second from boot time
+ "CONFIG_SERIO_I8042": "",
+ "CONFIG_KEYBOARD_ATKBD": "",
+ "CONFIG_RTC_DRV_CMOS": "",
+ # Shave off an additional 18ms (half of the boot time)
+ "CONFIG_DEBUG_WX": "",
+ },
+)
+
+genrule(
+ name = "linux-testing",
+ srcs = [
+ "@linux//:all",
+ ":testing-config",
+ ],
+ outs = [
+ "linux-testing.elf",
+ ],
+ cmd = """
+ DIR=external/linux
+
+ mkdir $$DIR/.bin
+
+ cp $(location :testing-config) $$DIR/.config
+
+ (cd $$DIR && make -j $$(nproc) vmlinux >/dev/null)
+
+ cp $$DIR/vmlinux $@
+ """,
+ visibility = ["//visibility:public"],
+)
+
+filegroup(
+ name = "test-script",
+ srcs = ["run_ktest.sh"],
+ visibility = ["//visibility:public"],
+)