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:
|
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: |
|
||||||
|
|||||||
14
Makefile
14
Makefile
@@ -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"
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
Reference in New Issue
Block a user