refactor: rework the entire build system

This commit is contained in:
d0p1 🏳️‍⚧️ 2023-06-29 06:09:31 +02:00
parent 4e110d12eb
commit 8cefd7946f
41 changed files with 607 additions and 209 deletions

6
.gitignore vendored
View file

@ -9,6 +9,7 @@
*.a
*.dump
vmstupid
vmstupid-dbg
/sysroot
@ -17,3 +18,8 @@ log.txt
/docs/html
/docs/config/Data
a.out
*.old
/bx_enh_dbg.ini
bochsrc.bxrc

View file

@ -1,53 +1,13 @@
.SUFFIXES:
.DELETE_ON_ERROR:
.DEFAULT_GOAL := all
TOPDIR := $(CURDIR)
export TOPDIR
AS = nasm
LD = ld.lld
OBJDUMP = llvm-objdump
QEMU = qemu-system-i386
RM = rm -f
MKCWD = mkdir -p $(@D)
INSTALL = install
SUBDIR := thirdparty lib bin kernel
BIN_DIR = bin
DOC_DIR = docs
KERNEL_DIR = kernel
LIB_DIR = lib
TOOLS_DIR = tools
.PHONY: docs
docs:
-mkdir -p docs/html
naturaldocs -p docs/config -img docs/img -xi tmp -i . -o HTML docs/html
cp docs/img/favicon.ico docs/html/
include $(TOOLS_DIR)/build.mk
ASFLAGS = -F dwarf -g -DSTUPID_VERSION="\"$(shell $(GIT-VERSION))\"" -Ilib \
-DBUILD_DATE="\"$(shell date --iso)\"" \
-DNASM_VERSION="\"$(shell nasm -v)\""
QEMUFLAGS = -serial stdio -no-reboot
GARBADGE = stupid.iso
include $(KERNEL_DIR)/build.mk
include $(LIB_DIR)/build.mk
include $(BIN_DIR)/build.mk
include $(DOC_DIR)/build.mk
all: stupid.iso
sysroot: $(KERNEL_BIN) $(KERNEL_DUMP) $(LIBS_BIN)
$(INSTALL) -d $@
$(INSTALL) -d $@/bin
$(INSTALL) -d $@/lib
$(INSTALL) $(KERNEL_BIN) $@
$(INSTALL) $(LIBS_BIN) $@/lib
stupid.iso: sysroot
$(CREATE-ISO) $@ $<
run: stupid.iso
$(QEMU) $(QEMUFLAGS) -cdrom $<
clean:
$(RM) $(GARBADGE)
re: clean all
.PHONY: all clean re
include $(TOPDIR)/share/mk/stupid.subdir.mk

3
bin/Makefile Normal file
View file

@ -0,0 +1,3 @@
NOSUBDIR := 1
include $(TOPDIR)/share/mk/stupid.subdir.mk

View file

View file

@ -3,14 +3,26 @@
*/
/*
* Procedure: Motd
* Program entry point
* Procedure: main
*
* Program entry point.
*/
Motd: PROC OPTIONS(MAIN);
DCL in FILE;
OPEN FILE(in) TITLE('/etc/motd') INPUT;
DO ;
PROC main;
DCL in AS File;
DCL line AS String;
DCL now AS DateTime;
now = [[DateTime allocate] now];
IF now == NIL THEN exit(1);
in = [[File allocate] initOpen:"/etc/motd"];
IF in == NIL THEN exit(1);
WHILE [in readLine:line] != EOF;
print(line);
END;
CLOSE FILE(in);
[in release];
[now release];
END;

View file

@ -1,5 +0,0 @@
.PHONY: docs
docs:
-mkdir -p $(DOC_DIR)/html
naturaldocs -p $(DOC_DIR)/config -img $(DOC_DIR)/img -xi tmp -i . -o HTML $(DOC_DIR)/html
cp $(DOC_DIR)/img/favicon.ico $(DOC_DIR)/html/

2
docs/coding-style.txt Normal file
View file

@ -0,0 +1,2 @@
File: Coding Style

View file

@ -116,6 +116,7 @@ Format: 1.51
Alter Language: Assembly
Add Extensions: s inc
Struct Prototype Ender: endstruc
Language: PL/S

View file

@ -40,6 +40,7 @@ Timestamp: Updated yyyy/mm/dd
File: Introduction (docs/intro.txt)
Link: Source Code (https://github.com/d0p1s4m4/StupidOS)
File: Coding Style (docs/coding-style.txt)
File: FAQ (docs/faq.txt)
Group: Kernel {
@ -56,11 +57,9 @@ Group: Kernel {
File: serial.s (no auto-title, kernel/drivers/serial.s)
} # Group: Driver
Group: Debug {
File: msg_en (kernel/debug/msg_en.s)
} # Group: Debug
File: kernel.s (kernel/kernel.s)
File: msg_en (kernel/i18n/msg_en.s)
File: pmm.s (kernel/pmm.s)
} # Group: Kernel
Group: Lib {
@ -107,6 +106,21 @@ Group: Bin {
} # Group: Bin
Group: Share {
Group: Mk {
File: stupid.clean.mk (share/mk/stupid.clean.mk)
File: stupid.kernel.mk (share/mk/stupid.kernel.mk)
File: stupid.lib.mk (share/mk/stupid.lib.mk)
File: stupid.own.mk (share/mk/stupid.own.mk)
File: stupid.prog.mk (share/mk/stupid.prog.mk)
File: stupid.subdir.mk (share/mk/stupid.subdir.mk)
File: stupid.sys.mk (share/mk/stupid.sys.mk)
} # Group: Mk
} # Group: Share
Group: Index {
Index: Everything

View file

@ -79,3 +79,18 @@ Format: 1.51
# If you add something that you think would be useful to other developers
# and should be included in Natural Docs by default, please e-mail it to
# topics [at] naturaldocs [dot] org.
Alter Topic Type: Macro
Add Keywords:
equ
Topic Type: Struct
Plural: Structs
Class Hierarchy: Yes
Keywords:
struc

5
kernel/Makefile Normal file
View file

@ -0,0 +1,5 @@
KERNEL = vmstupid
SRCS = head.s gdt.s pic.s isr.s idt.s pmm.s paging.s \
lib/log.s drivers/serial.s
include $(TOPDIR)/share/mk/stupid.kernel.mk

View file

@ -1,24 +0,0 @@
include kernel/drivers/build.mk
KERNEL_SRCS = head.s gdt.s pic.s isr.s idt.s pmm.s paging.s lib/log.s
KERNEL_OBJS = $(addprefix kernel/, $(KERNEL_SRCS:.s=.o) $(DRIVERS_OBJS))
KERNEL_BIN = vmstupid
KERNEL_DUMP = $(KERNEL_BIN).dump
KERNEL_ASFLAGS = $(ASFLAGS) -D__KERNEL__ -Ikernel
GARBADGE += $(KERNEL_OBJS) $(KERNEL_BIN) $(KERNEL_DUMP)
$(KERNEL_BIN): $(KERNEL_OBJS)
$(LD) -T $(KERNEL_DIR)/linker.ld -nostdlib -o $@ $^
$(KERNEL_DUMP): $(KERNEL_BIN)
$(OBJDUMP) -D $^ > $@
kernel/lib/%.o: lib/base/%.s
@$(MKCWD)
$(AS) -felf -o $@ $< $(KERNEL_ASFLAGS)
kernel/%.o: kernel/%.s
$(AS) -felf -o $@ $< $(KERNEL_ASFLAGS)

51
kernel/cpu.inc Normal file
View file

@ -0,0 +1,51 @@
struc tss
.link: resd 1
endstruc
struc gdt_entry
.limit_low: resw 1
.base_low: resw 1
.base_mid: resb 1
.access: resb 1
.flags: resb 1
.base_high: resb 1
endstruc
struc idt_entry
.limit_low: resw 1
.selector: resw 1
.zero: resb 1
.attr: resb 1
.base_high: resw 1
endstruc
struc intframe
;; registers
.edi: resd 1
.esi: resd 1
.ebp: resd 1
.esp: resd 1
.ebx: resd 1
.edx: resd 1
.ecx: resd 1
.eax: resd 1
;;
.gs: resd 1
.fs: resd 1
.es: resd 1
.ds: resd 1
.intno: resd 1
;; by x86 hardware
.err: resd 1
.eip: resd 1
.cs: resd 1
.eflags: resd 1
;; crossring
.useresp: resd 1
.ss: resd 1
endstruc

View file

@ -1,29 +0,0 @@
; file: msg_en
; English strings
.section rodata
msg_hello_world:
db "StupidOS v", STUPID_VERSION, " (built with ", NASM_VERSION, " on ", BUILD_DATE, ")", 0
msg_boot_info:
db "Bootloader: %s", 0
msg_pmm_initialized:
db "PMM initialized", 0
err_invalid_boot_magic:
db "[ERROR] Invalid boot magic (got: %x, expected: 0x2BADB002)", 0
err_cannot_map_memory:
db "[ERROR] Can't map memory", 0
warn_no_mmap:
db "[WARN] mmap flag not set", 0
msg_mmap_entry:
db "Memory Map Entry:", 0xA
db 0x9, "Address: (hi): %x (lo): %x", 0xA
db 0x9, "Length: (hi): %x (lo): %x", 0xA
db 0x9, "Type: %x", 0
msg_mem_block:
db "Free Memory:", 0xA
db 0x9, "Address: %x", 0xA
db 0x9, "Length: %x", 0
msg_max_mem:
db "Max memory: %x", 0
msg_bitmap_stored_at:
db "Bitmap stored at: %x", 0

View file

@ -1,2 +0,0 @@
DRIVERS_SRCS = serial.s
DRIVERS_OBJS = $(addprefix drivers/, $(DRIVERS_SRCS:.s=.o))

14
kernel/fs/vfs.inc Normal file
View file

@ -0,0 +1,14 @@
struc superblock
.devid: resd 1
.size: resd 1
.ninode: resd 1
.fs_type: resd 1
endstruc
struc inode
.devid: resd 1
.size: resd 1
.inode: resd 1s
.access: resd 1
endstruc

View file

@ -5,16 +5,22 @@
%include "base.inc"
%include "multiboot.inc"
MULTIBOOT_MAGIC equ 0x1BADB002
MULTIBOOT_ALIGN equ 1 << 0
MULTIBOOT_MEMINFO equ 1 << 1
MULTIBOOT_FLAGS equ MULTIBOOT_ALIGN | MULTIBOOT_MEMINFO
; Define: MB_HDR_FLAGS
MB_HDR_FLAGS equ MB_HDR_ALIGN | MB_HDR_MEMINFO | MB_HDR_VIDEO
section .multiboot
align 4
dd MULTIBOOT_MAGIC
dd MULTIBOOT_FLAGS
dd -(MULTIBOOT_MAGIC + MULTIBOOT_FLAGS)
istruc mb_header
at mb_header.magic, dd MB_HDR_MAGIC
at mb_header.flags, dd MB_HDR_FLAGS
at mb_header.checksum, dd -(MB_HDR_MAGIC + MB_HDR_FLAGS)
; video mode info
at mb_header.mode_type, dd 0
at mb_header.width, dd 1024
at mb_header.height, dd 768
at mb_header.depth, dd 32
iend
section .bss
align 16
@ -25,6 +31,7 @@ stack_top:
section .text
; Function: entry
; setup cpu and paging before calling <kmain>
;
; in:
; EAX - Multiboot magic
@ -36,18 +43,17 @@ section .text
global entry
entry:
mov esp, stack_top
cli
cli ; disable interrupt
mov edi, eax
mov esi, ebx
mov edi, eax ; save multiboot magic in EDI
mov esi, ebx ; save multiboot structure in ESI
;; initialize serial (mostly used for debug)
extern serial_init
call serial_init
;; eax <- magic
;; ebx <- multiboot struct
cmp edi, 0x2BADB002
;; make sure we use a multiboot compliant bootloader
cmp edi, MB_MAGIC
je .multiboot_valid
LOG err_invalid_boot_magic, edi
@ -95,7 +101,7 @@ hang:
section .rodata
msg_hello_world db "StupidOS v", STUPID_VERSION, " (built with ", NASM_VERSION, " on ", BUILD_DATE, ")", 0
msg_hello_world db "StupidOS v", STUPID_VERSION, " (built with ", __NASM_VER__, " on ", __DATE__, " ", __TIME__, ")", 0
msg_boot_info db "Bootloader: %s", 0
msg_pmm_initialized db "PMM initialized", 0
err_invalid_boot_magic db "[ERROR] Invalid boot magic (got: %x, expected: 0x2BADB002)", 0

10
kernel/i18n/i18n.inc Normal file
View file

@ -0,0 +1,10 @@
struc lang_entry
.code: resb 2
.data: resd 1
.next: resd 1
endstruc
struc msg_table
.hello_world: resd 1
.cpu_exceptions: resd 32
endstruc

102
kernel/i18n/msg_en.s Normal file
View file

@ -0,0 +1,102 @@
; file: msg_en
; English strings
%include "i18n.inc"
.section rodata
global lang_en
lang_en:
istruc lang_entry
at lang_entry.code: db "en"
at lang_entry.data: dd msg_en
at lang_entry.next: dd 0
iend
msg_en:
istruc msg_table
at msg_table.hello_world: dd msg_hello_world
at msg_table.cpu_exceptions:
dd msg_int_division_zero
dd msg_int_debug
dd msg_int_nmi
dd msg_int_breakpoint
dd msg_int_overflow
dd msg_int_range_exceeded
dd msg_int_invalid_opcode
dd msg_int_device_not_available
dd msg_int_double_fault
dd msg_int_coproc_segment_overrun
dd msg_int_invalid_tss
dd msg_int_seg_not_present
dd msg_int_stack_segfault
dd msg_int_gpf
dd msg_int_page_fault
dd msg_int_reserved
dd msg_int_fp_exception
dd msg_int_align_check
dd msg_int_machine_check
dd msg_int_simd_exception
dd msg_int_virt_exception
dd msg_int_reserved
dd msg_int_reserved
dd msg_int_reserved
dd msg_int_reserved
dd msg_int_reserved
dd msg_int_reserved
dd msg_int_reserved
dd msg_int_reserved
dd msg_int_reserved
dd msg_int_reserved
dd msg_int_reserved
iend
msg_hello_world:
db "StupidOS v", STUPID_VERSION, " (built with ", NASM_VERSION, " on ", BUILD_DATE, ")", 0
msg_boot_info:
db "Bootloader: %s", 0
msg_pmm_initialized:
db "PMM initialized", 0
err_invalid_boot_magic:
db "[ERROR] Invalid boot magic (got: %x, expected: 0x2BADB002)", 0
err_cannot_map_memory:
db "[ERROR] Can't map memory", 0
warn_no_mmap:
db "[WARN] mmap flag not set", 0
msg_mmap_entry:
db "Memory Map Entry:", 0xA
db 0x9, "Address: (hi): %x (lo): %x", 0xA
db 0x9, "Length: (hi): %x (lo): %x", 0xA
db 0x9, "Type: %x", 0
msg_mem_block:
db "Free Memory:", 0xA
db 0x9, "Address: %x", 0xA
db 0x9, "Length: %x", 0
msg_max_mem:
db "Max memory: %x", 0
msg_bitmap_stored_at:
db "Bitmap stored at: %x", 0
msg_int_division_zero: db "Division by zero", 0x0
msg_int_debug: db "Debug", 0x0
msg_int_nmi: db "Non-maskable interrupt", 0x0
msg_int_breakpoint: db "Breakpoint", 0x0
msg_int_overflow: db "Overflow", 0x0
msg_int_range_exceeded: db "Bound range exceeded", 0x0
msg_int_invalid_opcode: db "Invalid Opcode", 0x0
msg_int_device_not_available: db "Device not available", 0x0
msg_int_double_fault: db "Double fault", 0x0
msg_int_coproc_segment_overrun: db "Coprocessor segment overrun", 0x0
msg_int_invalid_tss: db "Invalid TSS", 0x0
msg_int_seg_not_present: db "Segment not present", 0x0
msg_int_stack_segfault: db "Stack segment fault", 0x0
msg_int_gpf: db "General Protection Fault", 0x0
msg_int_page_fault: db "Page fault", 0x0
msg_int_reserved: db "Reserved", 0x0
msg_int_fp_exception: db "x87 Floating-Point Exception", 0x0
msg_int_align_check: db "Aligment check", 0x0
msg_int_machine_check: db "Machine check", 0x0
msg_int_simd_exception: db "SIMD Floating-Point exception", 0x0
msg_int_virt_exception: db "Virtualization exception", 0x0
msg_int_sec_exception: db "Security exception", 0x0

View file

@ -1,5 +1,6 @@
[BITS 32]
%include "cpu.inc"
%include "base.inc"
%macro ISR_NO_ERR 1
@ -8,7 +9,7 @@ isr%1:
xchg bx, bx
push dword 0
push dword %1
jmp isr_handler
jmp isr_common
%endmacro
%macro ISR_ERR 1
@ -16,38 +17,9 @@ global isr%1
isr%1:
xchg bx, bx
push dword %1
jmp isr_handler
jmp isr_common
%endmacro
struc intframe
;; registers
.edi: resd 1
.esi: resd 1
.ebp: resd 1
.esp: resd 1
.ebx: resd 1
.edx: resd 1
.ecx: resd 1
.eax: resd 1
;;
.gs: resd 1
.fs: resd 1
.es: resd 1
.ds: resd 1
.intno: resd 1
;; by x86 hardware
.err: resd 1
.eip: resd 1
.cs: resd 1
.eflags: resd 1
;; crossring
.useresp: resd 1
.ss: resd 1
endstruc
section .text
ISR_NO_ERR 0
@ -89,8 +61,16 @@ panic:
;jmp panic
ret
;global isr_handler
isr_handler:
push ebp
mov ebp, esp
.end:
leave
ret
isr_common:
push ds
push es
push fs
@ -103,8 +83,8 @@ isr_handler:
mov fs, ax
mov gs, ax
LOG msg_interrupt
;LOG msg_interrupt
call isr_handler
;extern pic_eoi
;call pic_eoi
@ -119,6 +99,29 @@ isr_handler:
section .rodata
msg_int_division_zero: db "Division by zero", 0x0
msg_int_debug: db "Debug", 0x0
msg_int_nmi: db "Non-maskable interrupt", 0x0
msg_int_breakpoint: db "Breakpoint", 0x0
msg_int_overflow: db "Overflow", 0x0
msg_int_range_exceeded: db "Bound range exceeded", 0x0
msg_int_invalid_opcode: db "Invalid Opcode", 0x0
msg_int_device_not_available: db "Device not available", 0x0
msg_int_double_fault: db "Double fault", 0x0
msg_int_coproc_segment_overrun: db "Coprocessor segment overrun", 0x0
msg_int_invalid_tss: db "Invalid TSS", 0x0
msg_int_seg_not_present: db "Segment not present", 0x0
msg_int_stack_segfault: db "Stack segment fault", 0x0
msg_int_gpf: db "General Protection Fault", 0x0
msg_int_page_fault: db "Page fault", 0x0
msg_int_reserved: db "Reserved", 0x0
msg_int_fp_exception: db "x87 Floating-Point Exception", 0x0
msg_int_align_check: db "Aligment check", 0x0
msg_int_machine_check: db "Machine check", 0x0
msg_int_simd_exception: db "SIMD Floating-Point exception", 0x0
msg_int_virt_exception: db "Virtualization exception", 0x0
msg_int_sec_exception: db "Security exception", 0x0
msg_interrupt db "interrupt", 0xA
db "edi: %x esi: %x ebp: %x esp: %x", 0xA
db "ebx: %x edx: %x ecx: %x eax: %x", 0xA

View file

@ -1,2 +1,12 @@
; File: kernel.s
[BITS 32]
; Function: kmain
.global kmain
kmain:
push ebp
mov ebp, esp
leave
ret

View file

@ -1,9 +1,54 @@
; file: multiboot.inc
; File: multiboot.inc
; Define: MB_HDR_MAGIC
; Multiboot Header Magic
MB_HDR_MAGIC equ 0x1BADB002
; Define: MB_MAGIC
; Multiboot Magic passed by the bootloader.
MB_MAGIC equ 0x2BADB002
; Structure: mb_header
;
; .magic - todo
; .flags - See <flags>
; .checksum - todo
; .aout_kludge - todo
; .mode_type - todo
; .width - todo
; .height - todo
; .depth - todo
struc mb_header
.magic: resd 1
.flags: resd 1
.checksum: resd 1
.aout_kludge: resd 5
.mode_type: resd 1
.width: resd 1
.height: resd 1
.depth: resd 1
endstruc
; Defines: flags
;
; MB_HDR_ALIGN - todo
; MB_HDR_MEMINFO - <mb_info.mem_lower>
; MB_HDR_VIDEO - todo
MB_HDR_ALIGN equ 1 << 0
MB_HDR_MEMINFO equ 1 << 1
MB_HDR_VIDEO equ 1 << 2
; Structure: mb_info
;
; Fields:
; .flags - See <flags>
; .mem_lower - todo
; .mem_upper - todo
; .boot_device - todo
; .
struc mb_info
; Field: flags
;; flags
.flags: resd 1
;; flags[0] is set
@ -25,7 +70,7 @@ struc mb_info
;; flags[6] is set
.mmap_length: resd 1
; Field: mmap_addr
; <mb_info.mmap_length>
; see <mb_mmap>
.mmap_addr: resd 1
@ -59,6 +104,13 @@ struc mb_info
.framebuffer_misc: resw 3
endstruc
; Defines: flags
;
; MB_INFO_MEM - todo
; MB_INFO_BOOTDEV - todo
MB_INFO_MEM equ 1 << 0
MB_INFO_BOOTDEV equ 1 << 1
; Structure: mb_mmap
struc mb_mmap
.size: resd 1
@ -67,6 +119,13 @@ struc mb_mmap
.type: resd 1
endstruc
; Defines: types
;
; MB_MEMORY_AVAILABLE - 1
; MB_MEMORY_RESERVED - 2
; MB_MEMORY_ACPI - 3
; MB_MEMORY_NVS - 4
; MB_MEMORY_BADRAM - 5
%define MB_MEMORY_AVAILABLE 1
%define MB_MEMORY_RESERVED 2
%define MB_MEMORY_ACPI 3

View file

@ -1,3 +1,4 @@
; File: pmm.s
[BITS 32]
;; XXX: align address to page

3
lib/Makefile Normal file
View file

@ -0,0 +1,3 @@
SUBDIR = base crypto
include $(TOPDIR)/share/mk/stupid.subdir.mk

View file

@ -9,6 +9,7 @@ extern log_impl
; LOG msg_boot_info, eax
; (end)
%macro LOG 1-*
%ifdef DEBUG
%rep %0
%rotate -1
push %1
@ -21,4 +22,5 @@ extern log_impl
%rep %0
add esp, 4
%endrep
%endif
%endmacro

4
lib/base/Makefile Normal file
View file

@ -0,0 +1,4 @@
LIB = base
SRCS = log.s
include $(TOPDIR)/share/mk/stupid.lib.mk

View file

@ -1,2 +0,0 @@
LIBS += base
base_SRCS = log.s

View file

@ -1,24 +0,0 @@
LIBS_BIN =
define LIBS_TEMPLATE
$(1)_BIN = lib$(1).a
$(1)_OBJS = $$(addprefix lib/$(1)/, $$($(1)_SRCS:.s=.o))
$$($(1)_BIN): $$($(1)_OBJS)
ar rcs $$@ $$^
GARBADGE += $$($(1)_OBJS) $$($(1)_BIN)
LIBS_BIN += $$($(1)_BIN)
endef
LIBS =
include lib/*/build.mk
$(foreach lib, $(LIBS), $(eval $(call LIBS_TEMPLATE,$(lib))))
lib/%.o: lib/%.s
$(AS) -felf $(ASFLAGS) -o $@ $<

4
lib/crypto/Makefile Normal file
View file

@ -0,0 +1,4 @@
LIB = crypto
SRCS = hash/sha256.s
include $(TOPDIR)/share/mk/stupid.lib.mk

5
lib/pls/std/error.pls Normal file
View file

@ -0,0 +1,5 @@
CLASS Error;
MESSAGE
END;

3
lib/pls/std/io/file.pls Normal file
View file

@ -0,0 +1,3 @@
CLASS File;
END;

5
share/mk/stupid.clean.mk Normal file
View file

@ -0,0 +1,5 @@
# File: stupid.clean.mk
#
clean:
$(RM) $(CLEANFILES)

38
share/mk/stupid.kernel.mk Normal file
View file

@ -0,0 +1,38 @@
# File: stupid.kernel.mk
#
include $(TOPDIR)/share/mk/stupid.own.mk
ifdef KERNEL
ASFLAGS += -D__KERNEL__ -I$(TOPDIR)/kernel
OBJS = $(addsuffix .o, $(basename $(SRCS)))
OBJS-dbg = $(addsuffix .dbg.o, $(basename $(SRCS)))
CLEANFILES += $(KERNEL) $(KERNEL)-dbg $(OBJS) $(OBJS-dbg)
$(KERNEL): $(OBJS)
$(LD) -T $(TOPDIR)/kernel/linker.ld -nostdlib -o $@ $^
$(KERNEL)-dbg: $(OBJS-dbg)
$(LD) -T $(TOPDIR)/kernel/linker.ld -nostdlib -o $@ $^
%.o: %.s
$(AS) $(ASFLAGS) -o $@ $<
%.dbg.o: %.s
$(AS) $(ASFLAGS) $(ASDBGFLAGS) -o $@ $<
lib/%.o: ../lib/base/%.s
@$(MKCWD)
$(AS) $(ASFLAGS) -o $@ $<
lib/%.dbg.o: ../lib/base/%.s
@$(MKCWD)
$(AS) $(ASFLAGS) $(ASDBGFLAGS) -o $@ $<
all: $(KERNEL) $(KERNEL)-dbg
endif
include $(TOPDIR)/share/mk/stupid.clean.mk

33
share/mk/stupid.lib.mk Normal file
View file

@ -0,0 +1,33 @@
# File: stupid.lib.mk
# Support for building libraries
include $(TOPDIR)/share/mk/stupid.own.mk
ifdef LIB
CLEANFILES += lib$(LIB).a
ifdef SRCS
OBJS += $(addsuffix .o, $(basename $(SRCS)))
CLEANFILES += $(OBJS)
lib$(LIB).a: $(OBJS)
$(AR) rcs $@ $^
else
CLEANFILES += $(LIB).o
lib$(LIB).a: $(LIB).o
$(AR) rcs $@ $^
endif
all: lib$(LIB).a
endif
include $(TOPDIR)/share/mk/stupid.clean.mk
include $(TOPDIR)/share/mk/stupid.sys.mk

32
share/mk/stupid.own.mk Normal file
View file

@ -0,0 +1,32 @@
# File: stupid.own.mk
# Define common variables
ifndef _STUPID_OWN_MK_
_STUPID_OWN_MK_=1
.DEFAULT_GOAL := all
BINDIR = /bin
LIBDIR = /lib
CC = clang -target i386-none-elf
CXX = clang++ -target i386-none-elf
AS = nasm
LD = ld.lld
PLSCC = plsc
OBJCOPY = llvm-objcopy
OBJDUMP = llvm-objdump
MKCWD = mkdir -p $(@D)
TARGETS = all clean install
.PHONY: $(TARGETS)
EXTRAFLAGS = -DSTUPID_VERSION="0.0" -D__STUPID__
CFLAGS += -Wall -Werror -Wextra $(EXTRAFLAGS)
CXXFLAGS += -Wall -Werror -Wextra $(EXTRAFLAGS)
ASFLAGS += -felf -I$(TOPDIR)/lib $(EXTRAFLAGS)
ASDBGFLAGS += -F dwarf -g -DDEBUG
endif

41
share/mk/stupid.prog.mk Normal file
View file

@ -0,0 +1,41 @@
# File: stupid.prog.mk
# Building programs from source files
#
# targets:
# - all:
# build the program and its manual page.
# - clean:
# remove the program and any object files.
# - install:
# install the program and its manual page.
include $(TOPDIR)/share/mk/stupid.own.mk
ifdef PROG
CLEANFILES += $(PROG)
ifdef SRCS
OBJS += $(addsuffix .o, $(basename $(SRCS)))
CLEANFILES += $(OBJS)
$(PROG): $(OBJS)
$(CC) $(CFLAGS) -o $@ $^ $(LDADD)
else
CLEANFILES += $(PROG).o
$(PROG): $(PROG).o
$(CC) $(CFLAGS) -o $@ $< $(LDADD)
endif
all: $(PROG)
endif
include $(TOPDIR)/share/mk/stupid.clean.mk
include $(TOPDIR)/share/mk/stupid.sys.mk

20
share/mk/stupid.subdir.mk Normal file
View file

@ -0,0 +1,20 @@
# File: stupid.subdir.mk
# Targets for building subdirectories
.DEFAULT_GOAL := all
TOPGOALS = all clean install
ifndef NOSUBDIR
.PHONY: $(SUBDIR)
$(SUBDIR):
$(MAKE) -C $@ $(MAKECMDGOALS)
$(TOPGOALS): $(SUBDIR)
else
# ensure target exist
$(TOPGOALS):
endif

19
share/mk/stupid.sys.mk Normal file
View file

@ -0,0 +1,19 @@
# File: stupid.sys.mk
%.o: %.c
$(CC) -c -o $@ $< $(CFLAGS)
%.o: %.cc
$(CXX) -c -o $@ $< $(CXXFLAGS)
%.o: %.cpp
$(CXX) -c -o $@ $< $(CXXFLAGS)
%.o: %.cxx
$(CXX) -c -o $@ $< $(CXXFLAGS)
%.o: %.C
$(CXX) -c -o $@ $< $(CXXFLAGS)
%.o: %.s
$(AS) $(ASFLAGS) -o $@ $<

3
thirdparty/Makefile vendored Normal file
View file

@ -0,0 +1,3 @@
NOSUBDIR := 1
include $(TOPDIR)/share/mk/stupid.subdir.mk

View file

@ -1,9 +0,0 @@
define TOOLS_TEMPLATE
$(1) = $$(addprefix $$(TOOLS_DIR)/, $$(shell echo -n $(1) | tr A-Z a-z))
endef
TOOLS = GIT-VERSION CREATE-ISO
$(foreach tool, $(TOOLS), $(eval $(call TOOLS_TEMPLATE,$(tool))))

View file

@ -12,6 +12,12 @@ menuentry "StupidOS" {
boot
}
menuentry "StupidOS (debug)" {
hashsum --hash sha256 --check /boot/hashfile --prefix /
multiboot /vmstupid-dbg "lang=en"
boot
}
EOF
)
@ -19,6 +25,7 @@ gen_iso_file() {
mkdir -p "$2/boot/grub"
echo "$grub_config" > "$2/boot/grub/grub.cfg"
sha256sum vmstupid > "$2/boot/hashfile"
sha256sum vmstupid-dbg >> "$2/boot/hashfile"
grub-mkrescue -o $1 $2
}