@@ -168,10 +168,10 @@ OBJCOPY := $(GCC_DIR)/$(CROSS)objcopy$(EXT)
168168# LICENSE in the root directory of this reporsitory.
169169# -----------------------------------------------------------------------------
170170# .PHONY: confirm
171- all : confirm clean setup $(BIN_DIR ) /bootcd.iso
171+ all : confirm clean setup shell32 $(BIN_DIR ) /bootcd.iso
172172setup :
173173 $(MKDIR ) -p $(BUI_DIR ) $(BUI_DIR ) /bin $(BUI_DIR ) /bin/content $(BUI_DIR ) /hex
174- $(MKDIR ) -p $(BIN_DIR ) /content/img
174+ $(MKDIR ) -p $(BIN_DIR ) /content/img $( BUI_DIR ) /obj $( BUI_DIR ) /obj/pe
175175 $(COPY ) $(IMG_DIR ) /* .bmp $(BIN_DIR ) /content/img
176176 ( cd $( SRC_DIR) /fntres ; \
177177 $(SRC_DIR)/fntres/build.sh ;\
@@ -240,6 +240,8 @@ CFLAGS_C := -m32 -O1 -ffreestanding -Wall -Wextra \
240240 -nostdlib \
241241 -nostartfiles \
242242 -fno-stack-protector \
243+ -fno-unwind-tables \
244+ -fno-asynchronous-unwind-tables \
243245 -fno-builtin \
244246 -fno-pic \
245247 -mno-ms-bitfields \
@@ -262,7 +264,7 @@ CFLAGS_CC:= -std=c++20 $(CFLAGS_C) \
262264 -fno-threadsafe-statics
263265
264266LDFLAGS := -nostdlib -T $(COR_DIR ) /kernel.ld -Map $(BIN_DIR ) /kernel.map
265- LDSHFLGS := -nostdlib -T $(U32_DIR ) /shell32/shell .ld -Map $(BIN_DIR ) /shell .map
267+ LDSHFLGS := -nostdlib -T $(U32_DIR ) /shell32/shell32 .ld -Map $(BIN_DIR ) /shell32 .map
266268
267269ASMFLAGS := -f win32 -O2 -DDOS_MODE=32
268270ISOGUI ?= 0
@@ -385,6 +387,7 @@ OBJS := $(OBJ_DIR)/coff/ckernel.o \
385387 $(OBJ_DIR ) /coff/kheap.o \
386388 \
387389 $(OBJ_DIR ) /coff/elf_loader.o \
390+ $(OBJ_DIR ) /coff/pe_loader.o \
388391 \
389392 $(RUN_CPO ) \
390393 $(OBJ_DIR ) /coff/kstl.o \
@@ -396,7 +399,7 @@ OBJS := $(OBJ_DIR)/coff/ckernel.o \
396399# *.o bject files for linkage stage of the shell ...
397400# -----------------------------------------------------------------------------
398401SHOBJS := \
399- $(OBJ_DIR ) /elf/shell .o
402+ $(OBJ_DIR ) /coff/shell32 .o
400403
401404ISO_FILES := /boot2.bin /kernel.bin
402405LBA := $(COR_DIR ) /lba.inc
@@ -458,13 +461,15 @@ define MOD-LBA
458461 done \
459462 )
460463 @echo "VBE_INFO_ADDR equ 0x0A00" >> $(LBA )
464+
461465 $(AS ) -DLBA_FILE=\"$(COR_DIR ) /lba.inc\" -f bin $(COR_DIR ) /boot/boot1.asm -o $(BIN_DIR ) /content/boot1.bin
462466 $(AS ) -DLBA_FILE=\"$(COR_DIR ) /lba.inc\" -f bin $(COR_DIR ) /boot/boot2.asm -o $(BIN_DIR ) /content/boot2.bin
463- @cd $( BIN_DIR ) /content && \
467+
464468 $(XORRISO ) -as mkisofs -o $(BIN_DIR ) /bootcd.iso \
465- -b boot1.bin \
466- -no-emul-boot \
467- -boot-load-size 4 .
469+ -b boot1.bin \
470+ -no-emul-boot \
471+ -boot-load-size 4 \
472+ -V "BOOTCD" $(BIN_DIR ) /content
468473 cd ..
469474 @echo "DONE"
470475endef
@@ -499,8 +504,15 @@ endef
499504$(eval $(call compile_rule,$(COR_DIR)))
500505$(eval $(call compile_rule,$(COR_DIR)/fs/iso9660))
501506$(eval $(call compile_rule,$(COR_DIR)/video))
507+
508+ # -----------------------------------------------------------------------------
509+ # compile rule for program loaders ...
510+ # -----------------------------------------------------------------------------
502511$(eval $(call compile_rule,$(COR_DIR)/loader/elf))
512+ $(eval $(call compile_rule,$(COR_DIR)/loader/pe))
513+
503514$(eval $(call compile_rule,$(SRC_DIR)/fntres))
515+ $(eval $(call compile_rule,$(SRC_DIR)/user32/shell32))
504516
505517DEPS := $(patsubst $(OBJ_DIR ) /coff/% .o,$(DEP_DIR ) /coff/% .d,$(OBJS ) )
506518-include $(DEPS )
@@ -532,19 +544,13 @@ $(BIN)/INITRD.EXE: $(OBJ)/make_initrd.o
532544 $(GCC ) -m32 -mconsole -O2 -Wall -Wextra -o $@ $<
533545 $(STRIP ) $@
534546# -----------------------------------------------------------------------------
535- #
536- # -----------------------------------------------------------------------------
537- $(OBJ_DIR ) /elf/% .o : $(SRC_DIR ) /user32/shell32/% .c
538- $(GCC ) $(CFLAGS_C ) -c $< -o $@
539- $(OBJ_DIR ) /elf/% .o : $(SRC_DIR ) /user32/shell32/% .cc
540- $(CPP ) $(CFLAGS_CC ) -c $< -o $@
541- $(OBJ_DIR ) /elf/shell.bin : \
542- $(OBJ_DIR)/elf/user32.o \
543- $(SRC_DIR)/user32/shell32/shell.ld
544- $(LD) $(LDSHFLGS) -o $(OBJ_DIR)/elf/shell.bin $(SHOBJS)
545- $(BIN ) /shell.elf : $(OBJ_DIR ) /elf/shell.bin
546- $(OBJCOPY ) -O binary $(OBJ ) /shell.bin $(BIN ) /shell.exe
547- shell : $(BIN ) /shell.elf
547+ # ELF shell32 application
548+ # -----------------------------------------------------------------------------
549+ $(BIN_DIR ) /content/shell32.exe : $(SHOBJS ) \
550+ $(SRC_DIR)/user32/shell32/shell32.ld
551+ $(GCC) -m32 -mconsole $(CFLAGS_C) -o $(BIN_DIR)/content/shell32.exe $(SHOBJS)
552+ shell32 : $(BIN_DIR ) /content/shell32.exe
553+ strip $(BIN_DIR ) /content/shell32.exe
548554 echo " dodo"
549555
550556$(BIN_DIR ) /bootcd.iso : \
@@ -558,6 +564,7 @@ $(BIN_DIR)/bootcd.iso: \
558564 $(COR_DIR ) /create_iso.sh ;\
559565 )
560566 $(MOD-LBA)
567+ $(shell32)
561568
562569$(OBJ_DIR ) /coff/int86_switch.bin : $(COR_DIR ) /int86_switch.asm
563570 $(AS ) -f bin -o $(OBJ_DIR ) /coff/int86_switch.bin $(COR_DIR ) /int86_switch.asm
@@ -583,9 +590,9 @@ clean:
583590# optional/bonus: QEMU boot for bootCD.iso ...
584591# -----------------------------------------------------------------------------
585592bootcd :
586- /mingw64/bin/qemu-system-x86_64 .exe \
587- -drive file=$(BIN_DIR)/bootcd.iso,if=none,media=cdrom,id=cdrom0 \
588- -machine q35,i8042=on \
589- -device ich9-ahci,id=ahci0 \
590- -device ide-cd,drive=cdrom0,bus=ahci0.0 \
591- -boot d -m 512M
593+ /mingw64/bin/qemu-system-i386 .exe \
594+ -drive file=$(BIN_DIR)/bootcd.iso,if=none,media=cdrom,id=cdrom0 \
595+ -machine q35,i8042=on \
596+ -device ich9-ahci,id=ahci0 \
597+ -device ide-cd,drive=cdrom0,bus=ahci0.0 \
598+ -boot d -m 512M
0 commit comments