2026-04-09 21:47:13 +08:00
.RECIPEPREFIX := >
NO_COLOR ?= 0
BUILD_ROOT := build/x86_64
OBJ_ROOT := $( BUILD_ROOT) /obj
ISO_ROOT := $( BUILD_ROOT) /iso_root
2026-04-10 20:16:20 +08:00
RAMDISK_ROOT := $( BUILD_ROOT) /ramdisk_root
2026-04-09 21:47:13 +08:00
KERNEL_ELF := $( BUILD_ROOT) /clks_kernel.elf
RAMDISK_IMAGE := $( BUILD_ROOT) /cleonos_ramdisk.tar
ISO_IMAGE := build/CLeonOS-x86_64.iso
2026-04-10 20:16:20 +08:00
USER_BUILD_ROOT := $( BUILD_ROOT) /user
USER_OBJ_ROOT := $( USER_BUILD_ROOT) /obj
USER_APP_DIR := $( USER_BUILD_ROOT) /apps
USER_LIB_DIR := $( USER_BUILD_ROOT) /lib
2026-04-09 21:47:13 +08:00
LIMINE_DIR ?= limine
LIMINE_REPO ?= https://gh-proxy.com/https://github.com/limine-bootloader/limine.git
LIMINE_REF ?=
LIMINE_BIN_DIR ?= $( LIMINE_DIR) /bin
LIMINE_SETUP_STAMP := $( LIMINE_DIR) /.cleonos-limine-setup.stamp
LIMINE_BUILD_STAMP := $( LIMINE_DIR) /.cleonos-limine-build.stamp
LIMINE_CONFIGURE_FLAGS ?= --enable-bios-cd --enable-uefi-cd --enable-uefi-x86-64
LIMINE_SKIP_CONFIGURE ?= 0
OBJCOPY_FOR_TARGET ?= llvm-objcopy
OBJDUMP_FOR_TARGET ?= llvm-objdump
READELF_FOR_TARGET ?= llvm-readelf
XORRISO ?= xorriso
TAR ?= tar
QEMU_X86_64 ?= qemu-system-x86_64
CC ?= x86_64-elf-gcc
LD ?= x86_64-elf-ld
ARCH_CFLAGS := -DCLKS_ARCH_X86_64= 1 -m64 -mno-red-zone -mcmodel= kernel -fno-pic -fno-pie
LINKER_SCRIPT := clks/arch/x86_64/linker.ld
RUN_COMMAND := $( QEMU_X86_64) -M q35 -m 1024M -cdrom $( ISO_IMAGE) -serial stdio
DEBUG_COMMAND := $( QEMU_X86_64) -M q35 -m 1024M -cdrom $( ISO_IMAGE) -serial stdio -s -S
2026-04-10 20:16:20 +08:00
USER_CC ?= cc
USER_LD ?= ld
RUSTC ?= rustc
USER_LINKER_SCRIPT := cleonos/c/user.ld
2026-04-10 20:40:28 +08:00
KELF_LINKER_SCRIPT := cleonos/c/kelf.ld
2026-04-10 20:16:20 +08:00
USER_CFLAGS := -std= c11 -ffreestanding -fno-stack-protector -fno-builtin -Wall -Wextra -Werror -Icleonos/c/include
USER_LDFLAGS := -nostdlib -z max-page-size= 0x1000 -T $( USER_LINKER_SCRIPT)
2026-04-10 20:40:28 +08:00
KELF_LDFLAGS := -nostdlib -z max-page-size= 0x1000 -T $( KELF_LINKER_SCRIPT)
2026-04-10 20:16:20 +08:00
2026-04-09 21:47:13 +08:00
i f e q ( $( NO_COLOR ) , 1 )
COLOR_RESET :=
COLOR_INFO :=
COLOR_WARN :=
COLOR_ERROR :=
COLOR_STEP :=
e l s e
COLOR_RESET := \0 33[ 0m
COLOR_INFO := \0 33[ 1; 36m
COLOR_WARN := \0 33[ 1; 33m
COLOR_ERROR := \0 33[ 1; 31m
COLOR_STEP := \0 33[ 1; 35m
e n d i f
d e f i n e l o g _ i n f o
@ p r i n t f '%b\n' "$(COLOR_INFO)[INFO]$(COLOR_RESET) $(1)"
e n d e f
d e f i n e l o g _ w a r n
@ p r i n t f '%b\n' "$(COLOR_WARN)[WARN]$(COLOR_RESET) $(1)"
e n d e f
d e f i n e l o g _ e r r o r
@ p r i n t f '%b\n' "$(COLOR_ERROR)[ERROR]$(COLOR_RESET) $(1)"
e n d e f
d e f i n e l o g _ s t e p
@ p r i n t f '%b\n' "$(COLOR_STEP)[STEP]$(COLOR_RESET) $(1)"
e n d e f
2026-04-09 22:12:29 +08:00
C_SOURCES := \
2026-04-09 21:47:13 +08:00
clks/kernel/kmain.c \
clks/kernel/log.c \
clks/kernel/limine_requests.c \
clks/kernel/tty.c \
2026-04-09 22:02:00 +08:00
clks/kernel/pmm.c \
clks/kernel/heap.c \
2026-04-11 12:48:51 +08:00
clks/kernel/keyboard.c \
2026-04-09 22:12:29 +08:00
clks/kernel/interrupts.c \
2026-04-09 22:35:11 +08:00
clks/kernel/scheduler.c \
2026-04-10 16:55:48 +08:00
clks/kernel/elf64.c \
clks/kernel/elfrunner.c \
clks/kernel/syscall.c \
2026-04-10 17:05:46 +08:00
clks/kernel/ramdisk.c \
clks/kernel/fs.c \
2026-04-10 20:16:20 +08:00
clks/kernel/userland.c \
2026-04-10 20:22:45 +08:00
clks/kernel/driver.c \
2026-04-10 20:32:03 +08:00
clks/kernel/service.c \
2026-04-10 20:40:28 +08:00
clks/kernel/kelf.c \
2026-04-10 21:01:31 +08:00
clks/kernel/exec.c \
2026-04-09 21:47:13 +08:00
clks/lib/string.c \
clks/drivers/serial/serial.c \
clks/drivers/video/framebuffer.c \
clks/drivers/video/font8x8.c \
clks/arch/x86_64/boot.c
2026-04-09 22:12:29 +08:00
ASM_SOURCES := \
clks/arch/x86_64/interrupt_stubs.S
C_OBJECTS := $( patsubst %.c,$( OBJ_ROOT) /%.o,$( C_SOURCES) )
ASM_OBJECTS := $( patsubst %.S,$( OBJ_ROOT) /%.o,$( ASM_SOURCES) )
OBJECTS := $( C_OBJECTS) $( ASM_OBJECTS)
2026-04-09 21:47:13 +08:00
2026-04-10 20:16:20 +08:00
USER_COMMON_SOURCES := \
cleonos/c/src/runtime.c \
cleonos/c/src/syscall.c
USER_COMMON_OBJECTS := $( patsubst %.c,$( USER_OBJ_ROOT) /%.o,$( USER_COMMON_SOURCES) )
USER_SHELL_OBJECT := $( USER_OBJ_ROOT) /cleonos/c/apps/shell_main.o
2026-04-10 20:22:45 +08:00
USER_TTYDRV_OBJECT := $( USER_OBJ_ROOT) /cleonos/c/apps/ttydrv_main.o
2026-04-10 20:40:28 +08:00
USER_ELFRUNNER_KOBJ := $( USER_OBJ_ROOT) /cleonos/c/apps/elfrunner_kmain.o
USER_MEMC_KOBJ := $( USER_OBJ_ROOT) /cleonos/c/apps/memc_kmain.o
2026-04-10 20:16:20 +08:00
USER_RUST_LIB := $( USER_LIB_DIR) /libcleonos_user_rust.a
2026-04-10 20:40:28 +08:00
APP_SHELL := $( USER_APP_DIR) /shell.elf
APP_TTYDRV := $( USER_APP_DIR) /ttydrv.elf
APP_ELFRUNNER := $( USER_APP_DIR) /elfrunner.elf
APP_MEMC := $( USER_APP_DIR) /memc.elf
USER_APPS := $( APP_SHELL) $( APP_TTYDRV) $( APP_ELFRUNNER) $( APP_MEMC)
2026-04-10 20:16:20 +08:00
2026-04-09 21:47:13 +08:00
CFLAGS_COMMON := -std= c11 -ffreestanding -fno-stack-protector -fno-builtin -Wall -Wextra -Werror -Iclks/include
2026-04-09 22:12:29 +08:00
ASFLAGS_COMMON := -ffreestanding -Iclks/include
2026-04-09 21:47:13 +08:00
LDFLAGS_COMMON := -nostdlib -z max-page-size= 0x1000
2026-04-10 20:16:20 +08:00
.PHONY : all setup setup -tools setup -limine kernel userapps ramdisk -root ramdisk iso run debug clean clean -all help
2026-04-09 21:47:13 +08:00
all : iso
setup : setup -tools setup -limine
> $( call log_info ,environment ready )
setup-tools :
> $( call log_step ,checking host tools )
> @command -v git >/dev/null 2>&1 || (printf '%b\n' "$(COLOR_ERROR)[ERROR]$(COLOR_RESET) missing tool : git " && exit 1)
> @command -v $(TAR) >/dev/null 2>&1 || (printf '%b\n' "$(COLOR_ERROR)[ERROR]$(COLOR_RESET) missing tool : $( TAR ) " && exit 1)
> @command -v $(XORRISO) >/dev/null 2>&1 || (printf '%b\n' "$(COLOR_ERROR)[ERROR]$(COLOR_RESET) missing tool : $( XORRISO ) " && exit 1)
> @command -v clang >/dev/null 2>&1 || (printf '%b\n' "$(COLOR_ERROR)[ERROR]$(COLOR_RESET) missing tool : clang " && exit 1)
> @command -v ld.lld >/dev/null 2>&1 || (printf '%b\n' "$(COLOR_ERROR)[ERROR]$(COLOR_RESET) missing tool : ld .lld " && exit 1)
> @command -v $(OBJCOPY_FOR_TARGET) >/dev/null 2>&1 || (printf '%b\n' "$(COLOR_ERROR)[ERROR]$(COLOR_RESET) missing tool : $( OBJCOPY_FOR_TARGET ) " && exit 1)
> @command -v $(OBJDUMP_FOR_TARGET) >/dev/null 2>&1 || (printf '%b\n' "$(COLOR_ERROR)[ERROR]$(COLOR_RESET) missing tool : $( OBJDUMP_FOR_TARGET ) " && exit 1)
> @command -v $(READELF_FOR_TARGET) >/dev/null 2>&1 || (printf '%b\n' "$(COLOR_ERROR)[ERROR]$(COLOR_RESET) missing tool : $( READELF_FOR_TARGET ) " && exit 1)
2026-04-10 20:16:20 +08:00
> @command -v $(USER_CC) >/dev/null 2>&1 || (printf '%b\n' "$(COLOR_ERROR)[ERROR]$(COLOR_RESET) missing tool : $( USER_CC ) " && exit 1)
> @command -v $(USER_LD) >/dev/null 2>&1 || (printf '%b\n' "$(COLOR_ERROR)[ERROR]$(COLOR_RESET) missing tool : $( USER_LD ) " && exit 1)
> @command -v $(RUSTC) >/dev/null 2>&1 || (printf '%b\n' "$(COLOR_ERROR)[ERROR]$(COLOR_RESET) missing tool : $( RUSTC ) " && exit 1)
2026-04-09 21:47:13 +08:00
> $( call log_info ,required tools are available )
setup-limine :
> $( call log_step ,preparing limine )
> @ i f [ ! - d "$(LIMINE_DIR)" ] ; t h e n \
> i f [ - n "$(LIMINE_REF)" ] ; t h e n \
> p r i n t f '%b\n' "$(COLOR_INFO)[INFO]$(COLOR_RESET) cloning limine ($(LIMINE_REF)) into $(LIMINE_DIR)" ; \
> g i t c l o n e - - b r a n c h "$(LIMINE_REF)" - - d e p t h 1 "$(LIMINE_REPO)" "$(LIMINE_DIR)" ; \
> e l s e \
> p r i n t f '%b\n' "$(COLOR_INFO)[INFO]$(COLOR_RESET) cloning limine (default branch) into $(LIMINE_DIR)" ; \
> g i t c l o n e - - d e p t h 1 "$(LIMINE_REPO)" "$(LIMINE_DIR)" ; \
> f i ; \
> f i
> @ i f [ "$(LIMINE_SKIP_CONFIGURE)" = "1" ] ; t h e n \
> t e s t - f "$(LIMINE_DIR)/Makefile" | | ( p r i n t f '%b\n' "$(COLOR_ERROR)[ERROR]$(COLOR_RESET) LIMINE_SKIP_CONFIGURE=1 but $(LIMINE_DIR)/Makefile is missing" & & e x i t 1 ) ; \
> p r i n t f '%b\n' "$(COLOR_WARN)[WARN]$(COLOR_RESET) skipping limine Makefile generation (LIMINE_SKIP_CONFIGURE=1)" ; \
> e l s e \
> cfg_fingerprint = " FLAGS= $( LIMINE_CONFIGURE_FLAGS) ;OBJCOPY= $( OBJCOPY_FOR_TARGET) ;OBJDUMP= $( OBJDUMP_FOR_TARGET) ;READELF= $( READELF_FOR_TARGET) " ; \
> need_configure = 0; \
> i f [ ! - f "$(LIMINE_DIR)/Makefile" ] ; t h e n need_configure = 1; fi ; \
> i f [ ! - f "$(LIMINE_SETUP_STAMP)" ] ; t h e n need_configure = 1; fi ; \
> i f [ - f "$(LIMINE_SETUP_STAMP)" ] & & ! g r e p - q x "$$cfg_fingerprint" "$(LIMINE_SETUP_STAMP)" ; t h e n need_configure = 1; fi ; \
> i f [ "$$need_configure" - e q 1 ] ; t h e n \
> p r i n t f '%b\n' "$(COLOR_STEP)[STEP]$(COLOR_RESET) generating/reconfiguring limine Makefile" ; \
> i f [ - x "$(LIMINE_DIR)/bootstrap" ] ; t h e n \
> ( c d "$(LIMINE_DIR)" & & . / b o o t s t r a p ) ; \
> f i ; \
> t e s t - x "$(LIMINE_DIR)/configure" | | ( p r i n t f '%b\n' "$(COLOR_ERROR)[ERROR]$(COLOR_RESET) limine configure script missing" & & e x i t 1 ) ; \
> ( c d "$(LIMINE_DIR)" & & OBJCOPY_FOR_TARGET = " $( OBJCOPY_FOR_TARGET) " OBJDUMP_FOR_TARGET = " $( OBJDUMP_FOR_TARGET) " READELF_FOR_TARGET = " $( READELF_FOR_TARGET) " ./configure $( LIMINE_CONFIGURE_FLAGS) ) ; \
> p r i n t f '%s\n' "$$cfg_fingerprint" > "$(LIMINE_SETUP_STAMP)" ; \
> r m - f "$(LIMINE_BUILD_STAMP)" ; \
> e l s e \
> p r i n t f '%b\n' "$(COLOR_INFO)[INFO]$(COLOR_RESET) limine configure state unchanged" ; \
> f i ; \
> f i
> @ need_build = 0; \
> i f [ ! - f "$(LIMINE_BUILD_STAMP)" ] ; t h e n need_build = 1; fi ; \
> f o r f i n l i m i n e l i m i n e - b i o s . s y s l i m i n e - b i o s - c d . b i n l i m i n e - u e f i - c d . b i n ; d o \
> i f [ ! - f "$(LIMINE_BIN_DIR)/$$f" ] ; t h e n need_build = 1; fi ; \
> d o n e ; \
> i f [ "$$need_build" - e q 1 ] ; t h e n \
> p r i n t f '%b\n' "$(COLOR_INFO)[INFO]$(COLOR_RESET) building limine" ; \
> $( MAKE ) - C "$(LIMINE_DIR)" ; \
> t o u c h "$(LIMINE_BUILD_STAMP)" ; \
> e l s e \
> p r i n t f '%b\n' "$(COLOR_INFO)[INFO]$(COLOR_RESET) limine already built, skipping compile" ; \
> f i
> @ t e s t - f "$(LIMINE_BIN_DIR)/limine" | | ( p r i n t f '%b\n' "$(COLOR_ERROR)[ERROR]$(COLOR_RESET) limine build failed" & & e x i t 1 )
> @ t e s t - f "$(LIMINE_BIN_DIR)/limine-bios.sys" | | ( p r i n t f '%b\n' "$(COLOR_ERROR)[ERROR]$(COLOR_RESET) limine-bios.sys missing" & & e x i t 1 )
> @ t e s t - f "$(LIMINE_BIN_DIR)/limine-bios-cd.bin" | | ( p r i n t f '%b\n' "$(COLOR_ERROR)[ERROR]$(COLOR_RESET) limine-bios-cd.bin missing" & & e x i t 1 )
> @ t e s t - f "$(LIMINE_BIN_DIR)/limine-uefi-cd.bin" | | ( p r i n t f '%b\n' "$(COLOR_ERROR)[ERROR]$(COLOR_RESET) limine-uefi-cd.bin missing" & & e x i t 1 )
> $( call log_info ,limine artifacts ready )
kernel : $( KERNEL_ELF )
2026-04-10 20:16:20 +08:00
userapps : $( USER_APPS )
> $( call log_info ,user elf apps ready )
ramdisk-root : userapps
> $( call log_step ,staging ramdisk root -> $ ( RAMDISK_ROOT ) )
> @ r m - r f $( RAMDISK_ROOT )
> @ m k d i r - p $( RAMDISK_ROOT )
> @ c p - a r a m d i s k / . $( RAMDISK_ROOT ) /
2026-04-10 20:22:45 +08:00
> @ m k d i r - p $( RAMDISK_ROOT ) / s y s t e m $( RAMDISK_ROOT ) / s h e l l $( RAMDISK_ROOT ) / d r i v e r
2026-04-10 20:40:28 +08:00
> @ c p $( APP_SHELL ) $( RAMDISK_ROOT ) / s h e l l / s h e l l . e l f
> @ c p $( APP_ELFRUNNER ) $( RAMDISK_ROOT ) / s y s t e m / e l f r u n n e r . e l f
> @ c p $( APP_MEMC ) $( RAMDISK_ROOT ) / s y s t e m / m e m c . e l f
> @ c p $( APP_TTYDRV ) $( RAMDISK_ROOT ) / d r i v e r / t t y d r v . e l f
2026-04-10 20:16:20 +08:00
2026-04-09 21:47:13 +08:00
ramdisk : $( RAMDISK_IMAGE )
$(KERNEL_ELF) : $( OBJECTS ) $( LINKER_SCRIPT ) Makefile
> $( call log_step ,linking kernel -> $ ( KERNEL_ELF ) )
> @ m k d i r - p $( dir $ @)
> @ $( LD ) $( LDFLAGS_COMMON ) - T $( LINKER_SCRIPT ) - o $@ $( OBJECTS )
$(OBJ_ROOT)/%.o : %.c Makefile
> $( call log_step ,compiling $ <)
> @ m k d i r - p $( dir $ @)
> @ $( CC ) $( CFLAGS_COMMON ) $( ARCH_CFLAGS ) - c $< - o $@
2026-04-09 22:12:29 +08:00
$(OBJ_ROOT)/%.o : %.S Makefile
> $( call log_step ,assembling $ <)
> @ m k d i r - p $( dir $ @)
> @ $( CC ) $( ASFLAGS_COMMON ) $( ARCH_CFLAGS ) - c $< - o $@
2026-04-10 20:16:20 +08:00
$(USER_OBJ_ROOT)/%.o : %.c Makefile
> $( call log_step ,compiling user $ <)
> @ m k d i r - p $( dir $ @)
> @ $( USER_CC ) $( USER_CFLAGS ) - c $< - o $@
$(USER_RUST_LIB) : cleonos /rust /src /lib .rs Makefile
> $( call log_step ,building rust user lib )
> @ m k d i r - p $( dir $ @)
> @ $( RUSTC ) - - c r a t e - t y p e s t a t i c l i b - C panic = abort -O $< -o $@
2026-04-10 20:40:28 +08:00
$(APP_SHELL) : $( USER_COMMON_OBJECTS ) $( USER_SHELL_OBJECT ) $( USER_RUST_LIB ) $( USER_LINKER_SCRIPT )
2026-04-10 20:16:20 +08:00
> $( call log_step ,linking user shell .elf )
> @ m k d i r - p $( dir $ @)
> @ $( USER_LD ) $( USER_LDFLAGS ) - o $@ $( USER_COMMON_OBJECTS ) $( USER_SHELL_OBJECT ) $( USER_RUST_LIB )
2026-04-10 20:40:28 +08:00
$(APP_TTYDRV) : $( USER_COMMON_OBJECTS ) $( USER_TTYDRV_OBJECT ) $( USER_LINKER_SCRIPT )
> $( call log_step ,linking user ttydrv .elf )
2026-04-10 20:16:20 +08:00
> @ m k d i r - p $( dir $ @)
2026-04-10 20:40:28 +08:00
> @ $( USER_LD ) $( USER_LDFLAGS ) - o $@ $( USER_COMMON_OBJECTS ) $( USER_TTYDRV_OBJECT )
2026-04-10 20:16:20 +08:00
2026-04-10 20:40:28 +08:00
$(APP_ELFRUNNER) : $( USER_ELFRUNNER_KOBJ ) $( KELF_LINKER_SCRIPT )
> $( call log_step ,linking kernel -elf elfrunner .elf )
2026-04-10 20:16:20 +08:00
> @ m k d i r - p $( dir $ @)
2026-04-10 20:40:28 +08:00
> @ $( USER_LD ) $( KELF_LDFLAGS ) - o $@ $( USER_ELFRUNNER_KOBJ )
2026-04-09 22:12:29 +08:00
2026-04-10 20:40:28 +08:00
$(APP_MEMC) : $( USER_MEMC_KOBJ ) $( KELF_LINKER_SCRIPT )
> $( call log_step ,linking kernel -elf memc .elf )
2026-04-10 20:22:45 +08:00
> @ m k d i r - p $( dir $ @)
2026-04-10 20:40:28 +08:00
> @ $( USER_LD ) $( KELF_LDFLAGS ) - o $@ $( USER_MEMC_KOBJ )
2026-04-10 20:22:45 +08:00
2026-04-10 20:16:20 +08:00
$(RAMDISK_IMAGE) : ramdisk -root Makefile
2026-04-09 21:47:13 +08:00
> $( call log_step ,packing ramdisk -> $ ( RAMDISK_IMAGE ) )
> @ m k d i r - p $( dir $ @)
2026-04-10 20:16:20 +08:00
> @ $( TAR ) - C $( RAMDISK_ROOT ) - c f $@ .
2026-04-09 21:47:13 +08:00
iso : setup -tools setup -limine $( KERNEL_ELF ) $( RAMDISK_IMAGE ) configs /limine .conf
> $( call log_step ,assembling iso root )
> @ r m - r f $( ISO_ROOT )
> @ m k d i r - p $( ISO_ROOT ) / b o o t / l i m i n e
> @ c p $( KERNEL_ELF ) $( ISO_ROOT ) / b o o t / c l k s _ k e r n e l . e l f
> @ c p $( RAMDISK_IMAGE ) $( ISO_ROOT ) / b o o t / c l e o n o s _ r a m d i s k . t a r
> @ c p c o n f i g s / l i m i n e . c o n f $( ISO_ROOT ) / b o o t / l i m i n e / l i m i n e . c o n f
> @ c p $( LIMINE_BIN_DIR ) / l i m i n e - b i o s . s y s $( ISO_ROOT ) / b o o t / l i m i n e /
> @ c p $( LIMINE_BIN_DIR ) / l i m i n e - b i o s - c d . b i n $( ISO_ROOT ) / b o o t / l i m i n e /
> @ c p $( LIMINE_BIN_DIR ) / l i m i n e - u e f i - c d . b i n $( ISO_ROOT ) / b o o t / l i m i n e /
> @ m k d i r - p $( dir $ ( ISO_IMAGE ) )
> $( call log_step ,building iso -> $ ( ISO_IMAGE ) )
> @ $( XORRISO ) - a s m k i s o f s \
> - b b o o t / l i m i n e / l i m i n e - b i o s - c d . b i n \
> - n o - e m u l - b o o t \
> - b o o t - l o a d - s i z e 4 \
> - b o o t - i n f o - t a b l e \
> - - e f i - b o o t b o o t / l i m i n e / l i m i n e - u e f i - c d . b i n \
> - e f i - b o o t - p a r t \
> - - e f i - b o o t - i m a g e \
> - - p r o t e c t i v e - m s d o s - l a b e l \
> $( ISO_ROOT ) \
> - o $( ISO_IMAGE )
> $( call log_step ,installing limine boot sectors )
> @ $( LIMINE_BIN_DIR ) / l i m i n e b i o s - i n s t a l l $( ISO_IMAGE )
> $(call log_info,iso ready : $( ISO_IMAGE ) )
run : iso
> $( call log_step ,launching qemu run )
> @ $( RUN_COMMAND )
debug : iso
> $( call log_step ,launching qemu debug ( -s -S ) )
> @ $( DEBUG_COMMAND )
clean :
> $( call log_step ,cleaning $ ( BUILD_ROOT ) )
> @ r m - r f $( BUILD_ROOT )
> $( call log_info ,clean done )
clean-all :
> $( call log_step ,cleaning build )
> @ r m - r f b u i l d
> $( call log_info ,clean -all done )
help :
> @ e c h o "CLeonOS build system (x86_64 only)"
> @ e c h o " make setup"
> @ e c h o " make setup LIMINE_REF=<branch-or-tag>"
> @ e c h o " make setup LIMINE_SKIP_CONFIGURE=1"
> @ e c h o " make setup LIMINE_CONFIGURE_FLAGS='--enable-bios-cd --enable-uefi-cd --enable-uefi-x86-64'"
> @ e c h o " make setup OBJCOPY_FOR_TARGET=llvm-objcopy OBJDUMP_FOR_TARGET=llvm-objdump READELF_FOR_TARGET=llvm-readelf"
2026-04-10 20:16:20 +08:00
> @ e c h o " make userapps"
2026-04-09 21:47:13 +08:00
> @ e c h o " make iso"
> @ e c h o " make run"
> @ e c h o " make debug"
2026-04-10 17:05:46 +08:00
> @ e c h o " make NO_COLOR=1 <target>"