menuconfig预设

This commit is contained in:
2026-04-18 19:31:19 +08:00
parent af477d0602
commit e7062c3045
3 changed files with 134 additions and 7 deletions

View File

@@ -5,6 +5,15 @@ on:
pull_request: pull_request:
workflow_dispatch: workflow_dispatch:
inputs: inputs:
menuconfig_preset:
description: "menuconfig preset (full/minimal/dev)"
type: choice
options:
- full
- minimal
- dev
required: false
default: "full"
menuconfig_overrides: menuconfig_overrides:
description: "Optional extra menuconfig args, e.g. --set CLEONOS_CLKS_ENABLE_AUDIO=OFF" description: "Optional extra menuconfig args, e.g. --set CLEONOS_CLKS_ENABLE_AUDIO=OFF"
required: false required: false
@@ -17,6 +26,7 @@ jobs:
build-os: build-os:
runs-on: ubuntu-latest runs-on: ubuntu-latest
env: env:
MENUCONFIG_PRESET: ${{ github.event_name == 'workflow_dispatch' && github.event.inputs.menuconfig_preset || 'full' }}
MENUCONFIG_OVERRIDES: ${{ github.event_name == 'workflow_dispatch' && github.event.inputs.menuconfig_overrides || '' }} MENUCONFIG_OVERRIDES: ${{ github.event_name == 'workflow_dispatch' && github.event.inputs.menuconfig_overrides || '' }}
steps: steps:
@@ -47,7 +57,7 @@ jobs:
- name: Setup Rust - name: Setup Rust
uses: dtolnay/rust-toolchain@stable uses: dtolnay/rust-toolchain@stable
- name: Generate menuconfig (default all enabled) - name: Generate menuconfig (shared preset)
shell: bash shell: bash
run: | run: |
set -euo pipefail set -euo pipefail
@@ -56,8 +66,8 @@ jobs:
# shellcheck disable=SC2206 # shellcheck disable=SC2206
extra_args=(${MENUCONFIG_OVERRIDES}) extra_args=(${MENUCONFIG_OVERRIDES})
fi fi
python3 scripts/menuconfig.py --defaults --non-interactive "${extra_args[@]}" python3 scripts/menuconfig.py --defaults --non-interactive --preset "${MENUCONFIG_PRESET}" "${extra_args[@]}"
echo "menuconfig generated with defaults=all-enabled" echo "menuconfig generated with preset=${MENUCONFIG_PRESET}"
- name: Configure - name: Configure
run: | run: |

View File

@@ -17,6 +17,7 @@ OBJDUMP_FOR_TARGET ?=
READELF_FOR_TARGET ?= READELF_FOR_TARGET ?=
PYTHON ?= python3 PYTHON ?= python3
MENUCONFIG_ARGS ?= MENUCONFIG_ARGS ?=
MENUCONFIG_PRESET ?=
ifeq ($(strip $(CMAKE_GENERATOR)),) ifeq ($(strip $(CMAKE_GENERATOR)),)
GEN_ARG := GEN_ARG :=
@@ -25,6 +26,7 @@ GEN_ARG := -G "$(CMAKE_GENERATOR)"
endif endif
CMAKE_PASSTHROUGH_ARGS := CMAKE_PASSTHROUGH_ARGS :=
MENUCONFIG_PRESET_ARG := $(if $(strip $(MENUCONFIG_PRESET)),--preset $(MENUCONFIG_PRESET),)
ifneq ($(strip $(LIMINE_SKIP_CONFIGURE)),) ifneq ($(strip $(LIMINE_SKIP_CONFIGURE)),)
CMAKE_PASSTHROUGH_ARGS += -DLIMINE_SKIP_CONFIGURE=$(LIMINE_SKIP_CONFIGURE) CMAKE_PASSTHROUGH_ARGS += -DLIMINE_SKIP_CONFIGURE=$(LIMINE_SKIP_CONFIGURE)
@@ -64,9 +66,9 @@ reconfigure:
menuconfig: menuconfig:
> @if command -v $(PYTHON) >/dev/null 2>&1; then \ > @if command -v $(PYTHON) >/dev/null 2>&1; then \
> $(PYTHON) scripts/menuconfig.py $(MENUCONFIG_ARGS); \ > $(PYTHON) scripts/menuconfig.py $(MENUCONFIG_PRESET_ARG) $(MENUCONFIG_ARGS); \
> elif command -v python >/dev/null 2>&1; then \ > elif command -v python >/dev/null 2>&1; then \
> python scripts/menuconfig.py $(MENUCONFIG_ARGS); \ > python scripts/menuconfig.py $(MENUCONFIG_PRESET_ARG) $(MENUCONFIG_ARGS); \
> else \ > else \
> echo "python3/python not found"; \ > echo "python3/python not found"; \
> exit 1; \ > exit 1; \
@@ -75,9 +77,9 @@ menuconfig:
menuconfig-gui: menuconfig-gui:
> @if command -v $(PYTHON) >/dev/null 2>&1; then \ > @if command -v $(PYTHON) >/dev/null 2>&1; then \
> $(PYTHON) scripts/menuconfig.py --gui $(MENUCONFIG_ARGS); \ > $(PYTHON) scripts/menuconfig.py --gui $(MENUCONFIG_PRESET_ARG) $(MENUCONFIG_ARGS); \
> elif command -v python >/dev/null 2>&1; then \ > elif command -v python >/dev/null 2>&1; then \
> python scripts/menuconfig.py --gui $(MENUCONFIG_ARGS); \ > python scripts/menuconfig.py --gui $(MENUCONFIG_PRESET_ARG) $(MENUCONFIG_ARGS); \
> else \ > else \
> echo "python3/python not found"; \ > echo "python3/python not found"; \
> exit 1; \ > exit 1; \
@@ -145,3 +147,7 @@ help:
> @echo " make configure CMAKE_EXTRA_ARGS='-DLIMINE_SKIP_CONFIGURE=1 -DOBJCOPY_FOR_TARGET=objcopy'" > @echo " make configure CMAKE_EXTRA_ARGS='-DLIMINE_SKIP_CONFIGURE=1 -DOBJCOPY_FOR_TARGET=objcopy'"
> @echo "Direct passthrough is also supported:" > @echo "Direct passthrough is also supported:"
> @echo " make run LIMINE_SKIP_CONFIGURE=1" > @echo " make run LIMINE_SKIP_CONFIGURE=1"
> @echo "Preset examples:"
> @echo " make menuconfig MENUCONFIG_PRESET=full"
> @echo " make menuconfig MENUCONFIG_PRESET=minimal"
> @echo " make menuconfig-gui MENUCONFIG_PRESET=dev"

View File

@@ -169,6 +169,108 @@ def init_values(options: Iterable[OptionItem], previous: Dict[str, bool], use_de
return values return values
def _set_option_if_exists(values: Dict[str, bool], key: str, enabled: bool) -> None:
if key in values:
values[key] = enabled
def _set_all_options(values: Dict[str, bool], options: List[OptionItem], enabled: bool) -> None:
for item in options:
values[item.key] = enabled
def apply_preset(preset: str, clks_options: List[OptionItem], user_options: List[OptionItem], values: Dict[str, bool]) -> None:
preset_name = preset.strip().lower()
if preset_name == "full":
_set_all_options(values, clks_options, True)
_set_all_options(values, user_options, True)
return
if preset_name == "dev":
_set_all_options(values, clks_options, True)
_set_all_options(values, user_options, True)
_set_option_if_exists(values, "CLEONOS_CLKS_ENABLE_USERLAND_AUTO_EXEC", False)
_set_option_if_exists(values, "CLEONOS_CLKS_ENABLE_EXEC_SERIAL_LOG", True)
_set_option_if_exists(values, "CLEONOS_CLKS_ENABLE_PROCFS", True)
_set_option_if_exists(values, "CLEONOS_CLKS_ENABLE_IDLE_DEBUG_LOG", True)
return
if preset_name == "minimal":
_set_all_options(values, clks_options, True)
_set_all_options(values, user_options, False)
clks_disable = [
"CLEONOS_CLKS_ENABLE_AUDIO",
"CLEONOS_CLKS_ENABLE_MOUSE",
"CLEONOS_CLKS_ENABLE_DESKTOP",
"CLEONOS_CLKS_ENABLE_DRIVER_MANAGER",
"CLEONOS_CLKS_ENABLE_KELF",
"CLEONOS_CLKS_ENABLE_EXTERNAL_PSF",
"CLEONOS_CLKS_ENABLE_ELFRUNNER_PROBE",
"CLEONOS_CLKS_ENABLE_KLOGD_TASK",
"CLEONOS_CLKS_ENABLE_KWORKER_TASK",
"CLEONOS_CLKS_ENABLE_BOOT_VIDEO_LOG",
"CLEONOS_CLKS_ENABLE_PMM_STATS_LOG",
"CLEONOS_CLKS_ENABLE_HEAP_STATS_LOG",
"CLEONOS_CLKS_ENABLE_FS_ROOT_LOG",
"CLEONOS_CLKS_ENABLE_ELFRUNNER_INIT",
"CLEONOS_CLKS_ENABLE_SYSCALL_TICK_QUERY",
"CLEONOS_CLKS_ENABLE_TTY_READY_LOG",
"CLEONOS_CLKS_ENABLE_IDLE_DEBUG_LOG",
"CLEONOS_CLKS_ENABLE_USER_SYSTEM_APP_PROBE",
"CLEONOS_CLKS_ENABLE_SCHED_TASK_COUNT_LOG",
]
for key in clks_disable:
_set_option_if_exists(values, key, False)
clks_enable = [
"CLEONOS_CLKS_ENABLE_KEYBOARD",
"CLEONOS_CLKS_ENABLE_USRD_TASK",
"CLEONOS_CLKS_ENABLE_USERLAND_AUTO_EXEC",
"CLEONOS_CLKS_ENABLE_HEAP_SELFTEST",
"CLEONOS_CLKS_ENABLE_SYSTEM_DIR_CHECK",
"CLEONOS_CLKS_ENABLE_PROCFS",
"CLEONOS_CLKS_ENABLE_EXEC_SERIAL_LOG",
"CLEONOS_CLKS_ENABLE_KBD_TTY_SWITCH_HOTKEY",
"CLEONOS_CLKS_ENABLE_KBD_CTRL_SHORTCUTS",
"CLEONOS_CLKS_ENABLE_KBD_FORCE_STOP_HOTKEY",
"CLEONOS_CLKS_ENABLE_USER_INIT_SCRIPT_PROBE",
"CLEONOS_CLKS_ENABLE_INTERRUPT_READY_LOG",
"CLEONOS_CLKS_ENABLE_SHELL_MODE_LOG",
]
for key in clks_enable:
_set_option_if_exists(values, key, True)
user_enable_tokens = [
"SHELL",
"HELP",
"LS",
"CD",
"PWD",
"CAT",
"CLEAR",
"EXIT",
"EXEC",
"DMESG",
"TTY",
"PID",
"PS",
"KILL",
"JOBS",
"FG",
"BG",
"RESTART",
"SHUTDOWN",
"TTYDRV",
]
for token in user_enable_tokens:
_set_option_if_exists(values, f"CLEONOS_USER_APP_{token}", True)
return
raise RuntimeError(f"unknown preset: {preset}")
def print_section(title: str, options: List[OptionItem], values: Dict[str, bool]) -> None: def print_section(title: str, options: List[OptionItem], values: Dict[str, bool]) -> None:
print() print()
print(f"== {title} ==") print(f"== {title} ==")
@@ -1048,6 +1150,11 @@ def parse_args() -> argparse.Namespace:
parser.add_argument("--non-interactive", action="store_true", help="save config without opening interactive menu") parser.add_argument("--non-interactive", action="store_true", help="save config without opening interactive menu")
parser.add_argument("--plain", action="store_true", help="use legacy plain-text menu instead of ncurses") parser.add_argument("--plain", action="store_true", help="use legacy plain-text menu instead of ncurses")
parser.add_argument("--gui", action="store_true", help="use GUI window mode (PySide)") parser.add_argument("--gui", action="store_true", help="use GUI window mode (PySide)")
parser.add_argument(
"--preset",
choices=["full", "minimal", "dev"],
help="apply a built-in preset before interactive edit or save",
)
parser.add_argument( parser.add_argument(
"--set", "--set",
action="append", action="append",
@@ -1070,6 +1177,10 @@ def main() -> int:
previous = load_previous_values() previous = load_previous_values()
values = init_values(all_options, previous, use_defaults=args.defaults) values = init_values(all_options, previous, use_defaults=args.defaults)
if args.preset:
apply_preset(args.preset, clks_options, user_options, values)
parse_set_overrides(values, args.set) parse_set_overrides(values, args.set)
should_save = args.non_interactive should_save = args.non_interactive