mirror of
https://github.com/Leonmmcoset/cleonos.git
synced 2026-04-21 10:40:00 +00:00
menuconfig预设
This commit is contained in:
16
.github/workflows/build-os.yml
vendored
16
.github/workflows/build-os.yml
vendored
@@ -5,6 +5,15 @@ on:
|
||||
pull_request:
|
||||
workflow_dispatch:
|
||||
inputs:
|
||||
menuconfig_preset:
|
||||
description: "menuconfig preset (full/minimal/dev)"
|
||||
type: choice
|
||||
options:
|
||||
- full
|
||||
- minimal
|
||||
- dev
|
||||
required: false
|
||||
default: "full"
|
||||
menuconfig_overrides:
|
||||
description: "Optional extra menuconfig args, e.g. --set CLEONOS_CLKS_ENABLE_AUDIO=OFF"
|
||||
required: false
|
||||
@@ -17,6 +26,7 @@ jobs:
|
||||
build-os:
|
||||
runs-on: ubuntu-latest
|
||||
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 || '' }}
|
||||
|
||||
steps:
|
||||
@@ -47,7 +57,7 @@ jobs:
|
||||
- name: Setup Rust
|
||||
uses: dtolnay/rust-toolchain@stable
|
||||
|
||||
- name: Generate menuconfig (default all enabled)
|
||||
- name: Generate menuconfig (shared preset)
|
||||
shell: bash
|
||||
run: |
|
||||
set -euo pipefail
|
||||
@@ -56,8 +66,8 @@ jobs:
|
||||
# shellcheck disable=SC2206
|
||||
extra_args=(${MENUCONFIG_OVERRIDES})
|
||||
fi
|
||||
python3 scripts/menuconfig.py --defaults --non-interactive "${extra_args[@]}"
|
||||
echo "menuconfig generated with defaults=all-enabled"
|
||||
python3 scripts/menuconfig.py --defaults --non-interactive --preset "${MENUCONFIG_PRESET}" "${extra_args[@]}"
|
||||
echo "menuconfig generated with preset=${MENUCONFIG_PRESET}"
|
||||
|
||||
- name: Configure
|
||||
run: |
|
||||
|
||||
14
Makefile
14
Makefile
@@ -17,6 +17,7 @@ OBJDUMP_FOR_TARGET ?=
|
||||
READELF_FOR_TARGET ?=
|
||||
PYTHON ?= python3
|
||||
MENUCONFIG_ARGS ?=
|
||||
MENUCONFIG_PRESET ?=
|
||||
|
||||
ifeq ($(strip $(CMAKE_GENERATOR)),)
|
||||
GEN_ARG :=
|
||||
@@ -25,6 +26,7 @@ GEN_ARG := -G "$(CMAKE_GENERATOR)"
|
||||
endif
|
||||
|
||||
CMAKE_PASSTHROUGH_ARGS :=
|
||||
MENUCONFIG_PRESET_ARG := $(if $(strip $(MENUCONFIG_PRESET)),--preset $(MENUCONFIG_PRESET),)
|
||||
|
||||
ifneq ($(strip $(LIMINE_SKIP_CONFIGURE)),)
|
||||
CMAKE_PASSTHROUGH_ARGS += -DLIMINE_SKIP_CONFIGURE=$(LIMINE_SKIP_CONFIGURE)
|
||||
@@ -64,9 +66,9 @@ reconfigure:
|
||||
|
||||
menuconfig:
|
||||
> @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 \
|
||||
> python scripts/menuconfig.py $(MENUCONFIG_ARGS); \
|
||||
> python scripts/menuconfig.py $(MENUCONFIG_PRESET_ARG) $(MENUCONFIG_ARGS); \
|
||||
> else \
|
||||
> echo "python3/python not found"; \
|
||||
> exit 1; \
|
||||
@@ -75,9 +77,9 @@ menuconfig:
|
||||
|
||||
menuconfig-gui:
|
||||
> @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 \
|
||||
> python scripts/menuconfig.py --gui $(MENUCONFIG_ARGS); \
|
||||
> python scripts/menuconfig.py --gui $(MENUCONFIG_PRESET_ARG) $(MENUCONFIG_ARGS); \
|
||||
> else \
|
||||
> echo "python3/python not found"; \
|
||||
> exit 1; \
|
||||
@@ -145,3 +147,7 @@ help:
|
||||
> @echo " make configure CMAKE_EXTRA_ARGS='-DLIMINE_SKIP_CONFIGURE=1 -DOBJCOPY_FOR_TARGET=objcopy'"
|
||||
> @echo "Direct passthrough is also supported:"
|
||||
> @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"
|
||||
|
||||
@@ -169,6 +169,108 @@ def init_values(options: Iterable[OptionItem], previous: Dict[str, bool], use_de
|
||||
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:
|
||||
print()
|
||||
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("--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(
|
||||
"--preset",
|
||||
choices=["full", "minimal", "dev"],
|
||||
help="apply a built-in preset before interactive edit or save",
|
||||
)
|
||||
parser.add_argument(
|
||||
"--set",
|
||||
action="append",
|
||||
@@ -1070,6 +1177,10 @@ def main() -> int:
|
||||
|
||||
previous = load_previous_values()
|
||||
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)
|
||||
|
||||
should_save = args.non_interactive
|
||||
|
||||
Reference in New Issue
Block a user