Rewrite makefile and get it compiled.
This commit is contained in:
parent
c2a9e43ad3
commit
aa0a4483b8
171
makefile
171
makefile
|
@ -1,79 +1,164 @@
|
|||
ASM = nasm
|
||||
CC = gcc
|
||||
LD = ld
|
||||
#x86 vars
|
||||
C_SRC_PATH_32 = x86/src/c
|
||||
ASM_SRC_PATH_32 = x86/src/asm
|
||||
C_FLAGS_32 = -m32 -std=c11 -c -fno-stack-protector -fno-builtin -mno-red-zone -mno-mmx -mno-sse -mno-sse2 -masm=intel -Wall -Wextra
|
||||
ASM_FLAGS_32 = -f elf32 -I $(ASM_SRC_PATH_32)/
|
||||
LD_FLAGS_32 = -melf_i386
|
||||
LD_SCRIPT_32 = build/link32.ld
|
||||
#x64 vars
|
||||
C_SRC_PATH_64 = x64/src/c
|
||||
ASM_SRC_PATH_64 = x64/src/asm
|
||||
C_FLAGS_64 = -m64 -std=c11 -c -fno-stack-protector -fno-builtin -mno-red-zone -mno-mmx -mno-sse -mno-sse2 -masm=intel -Wall -Wextra
|
||||
ASM_FLAGS_64 = -f elf64 -I $(ASM_SRC_PATH_64)/
|
||||
LD_FLAGS_64 = -melf_x86_64
|
||||
LD_SCRIPT_64 = build/link64.ld
|
||||
|
||||
GRUB_CFG = build/grub.cfg
|
||||
OUTPUT_DIR = temp
|
||||
CC = gcc
|
||||
|
||||
LD = ld
|
||||
#Recursive Wildcard
|
||||
rwildcard=$(foreach d,$(wildcard $1*),$(call rwildcard,$d/,$2) $(filter $(subst *,%,$2),$d))
|
||||
|
||||
#x86 vars
|
||||
|
||||
C_SRC_PATH_32 := x86/src/c
|
||||
|
||||
ASM_SRC_PATH_32 := x86/src/asm
|
||||
|
||||
C_FLAGS_32 := -m32 -std=c11 -c -fno-stack-protector -fno-builtin -mno-red-zone -mno-mmx -mno-sse -mno-sse2 -masm=intel -Wall -Wextra
|
||||
|
||||
ASM_FLAGS_32 := -f elf32 -I $(ASM_SRC_PATH_32)/
|
||||
|
||||
LD_FLAGS_32 := -melf_i386
|
||||
|
||||
LD_SCRIPT_32 := build/link32.ld
|
||||
|
||||
#x64 vars
|
||||
|
||||
C_SRC_PATH_64 := x64/src/c
|
||||
|
||||
ASM_SRC_PATH_64 := x64/src/asm
|
||||
|
||||
C_FLAGS_64 := -m64 -std=c11 -c -fno-stack-protector -fno-builtin -mno-red-zone -mno-mmx -mno-sse -mno-sse2 -masm=intel -Wall -Wextra
|
||||
|
||||
ASM_FLAGS_64 := -f elf64 -I $(ASM_SRC_PATH_64)/
|
||||
|
||||
LD_FLAGS_64 := -melf_x86_64
|
||||
|
||||
LD_SCRIPT_64 := build/link64.ld
|
||||
|
||||
|
||||
|
||||
GRUB_CFG := build/grub.cfg
|
||||
|
||||
OUTPUT_DIR := temp
|
||||
|
||||
|
||||
|
||||
#C source code
|
||||
C_FILES_32 = $(wildcard $(C_SRC_PATH_32)/*.c)
|
||||
C_FILES_64 = $(wildcard $(C_SRC_PATH_64)/*.c)
|
||||
|
||||
C_FILES_32 := $(call rwildcard, $(C_SRC_PATH_32), *.c)
|
||||
|
||||
C_FILES_64 := $(call rwildcard, $(C_SRC_PATH_64), *.c)
|
||||
|
||||
|
||||
|
||||
#ASM source code
|
||||
ASM_FILES_32 = $(wildcard $(ASM_SRC_PATH_32)/*.asm)
|
||||
ASM_FILES_64 = $(wildcard $(ASM_SRC_PATH_64)/*.asm)
|
||||
|
||||
ASM_FILES_32 := $(call rwildcard, $(ASM_SRC_PATH_32), *.asm)
|
||||
|
||||
ASM_FILES_64 := $(call rwildcard, $(ASM_SRC_PATH_64), *.asm)
|
||||
|
||||
|
||||
#bin files
|
||||
KERNEL_BIN_32 = $(OUTPUT_DIR)/kernel32.bin
|
||||
KERNEL_BIN_64 = $(OUTPUT_DIR)/kernel64.bin
|
||||
#modules
|
||||
|
||||
KERNEL_BIN_32 := kernel32.bin
|
||||
|
||||
KERNEL_BIN_64 := kernel64.bin
|
||||
|
||||
|
||||
#Object files
|
||||
C_OBJ_FILES_32 = $(addprefix $(OUTPUT_DIR)/,$(notdir $(C_FILES_32:.c=_x86.o)))
|
||||
C_OBJ_FILES_64 = $(addprefix $(OUTPUT_DIR)/,$(notdir $(C_FILES_64:.c=_x64.o)))
|
||||
ASM_OBJ_FILES_32 = $(addprefix $(OUTPUT_DIR)/,$(notdir $(ASM_FILES_32:.asm=_asm_x86.o)))
|
||||
ASM_OBJ_FILES_64 = $(addprefix $(OUTPUT_DIR)/,$(notdir $(ASM_FILES_64:.asm=_asm_x64.o)))
|
||||
ALL_OBJ_FILES_32 = $(C_OBJ_FILES_32) $(ASM_OBJ_FILES_32)
|
||||
ALL_OBJ_FILES_64 = $(C_OBJ_FILES_64) $(ASM_OBJ_FILES_64)
|
||||
|
||||
C_OBJ_FILES_32 := $(C_FILES_32:.c=.o32)
|
||||
|
||||
C_OBJ_FILES_64 := $(C_FILES_64:.c=.o64)
|
||||
|
||||
ASM_OBJ_FILES_32 := $(ASM_FILES_32:.asm=.oa32)
|
||||
|
||||
ASM_OBJ_FILES_64 := $(ASM_FILES_64:.asm=.oa64)
|
||||
|
||||
ALL_OBJ_FILES_32 := $(addprefix $(OUTPUT_DIR)/,$(subst /,_,$(C_OBJ_FILES_32))) $(addprefix $(OUTPUT_DIR)/,$(subst /,_,$(ASM_OBJ_FILES_32)))
|
||||
|
||||
ALL_OBJ_FILES_64 := $(addprefix $(OUTPUT_DIR)/,$(subst /,_,$(C_OBJ_FILES_64))) $(addprefix $(OUTPUT_DIR)/,$(subst /,_,$(ASM_OBJ_FILES_64)))
|
||||
|
||||
|
||||
|
||||
print_source:
|
||||
|
||||
$(info ${C_OBJ_FILES_32})
|
||||
|
||||
|
||||
|
||||
all : init compile link buildiso clean
|
||||
|
||||
|
||||
|
||||
init:
|
||||
|
||||
sudo mkdir $(OUTPUT_DIR)
|
||||
|
||||
|
||||
|
||||
compile: $(C_OBJ_FILES_32) $(ASM_OBJ_FILES_32) $(C_OBJ_FILES_64) $(ASM_OBJ_FILES_64)
|
||||
|
||||
|
||||
|
||||
link: $(KERNEL_BIN_32) $(KERNEL_BIN_64)
|
||||
|
||||
|
||||
|
||||
clean:
|
||||
|
||||
sudo rm -rf $(OUTPUT_DIR)
|
||||
|
||||
buildiso:
|
||||
|
||||
sudo mkdir $(OUTPUT_DIR)/temp_iso
|
||||
|
||||
sudo mkdir $(OUTPUT_DIR)/temp_iso/HOS
|
||||
|
||||
sudo mkdir $(OUTPUT_DIR)/temp_iso/boot
|
||||
|
||||
sudo mkdir $(OUTPUT_DIR)/temp_iso/boot/grub
|
||||
sudo mv $(KERNEL_BIN_64) $(OUTPUT_DIR)/temp_iso/HOS/kernel64
|
||||
sudo mv $(KERNEL_BIN_32) $(OUTPUT_DIR)/temp_iso/HOS/kernel32
|
||||
|
||||
sudo mv $(OUTPUT_DIR)/$(KERNEL_BIN_64) $(OUTPUT_DIR)/temp_iso/HOS/kernel64
|
||||
|
||||
sudo mv $(OUTPUT_DIR)/$(KERNEL_BIN_32) $(OUTPUT_DIR)/temp_iso/HOS/kernel32
|
||||
|
||||
sudo cp $(GRUB_CFG) $(OUTPUT_DIR)/temp_iso/boot/grub/
|
||||
|
||||
sudo grub-mkrescue -o HOS.iso $(OUTPUT_DIR)/temp_iso
|
||||
|
||||
$(OUTPUT_DIR)/%_x86.o: $(C_SRC_PATH_32)/%.c
|
||||
sudo $(CC) $(C_FLAGS_32) -o $@ $^
|
||||
|
||||
$(OUTPUT_DIR)/%_x64.o: $(C_SRC_PATH_64)/%.c
|
||||
sudo $(CC) $(C_FLAGS_64) -o $@ $^
|
||||
|
||||
$(OUTPUT_DIR)/%_asm_x86.o: $(ASM_SRC_PATH_32)/%.asm
|
||||
sudo $(ASM) $(ASM_FLAGS_32) -o $@ $^
|
||||
%.o32: %.c
|
||||
|
||||
sudo $(CC) $(C_FLAGS_32) -o $(OUTPUT_DIR)/$(subst /,_,$@) $^
|
||||
|
||||
|
||||
|
||||
%.o64: %.c
|
||||
|
||||
sudo $(CC) $(C_FLAGS_64) -o $(OUTPUT_DIR)/$(subst /,_,$@) $^
|
||||
|
||||
|
||||
|
||||
%.oa32: %.asm
|
||||
|
||||
sudo $(ASM) $(ASM_FLAGS_32) -o $(OUTPUT_DIR)/$(subst /,_,$@) $^
|
||||
|
||||
|
||||
|
||||
%.oa64: %.asm
|
||||
|
||||
sudo $(ASM) $(ASM_FLAGS_64) -o $(OUTPUT_DIR)/$(subst /,_,$@) $^
|
||||
|
||||
|
||||
$(OUTPUT_DIR)/%_asm_x64.o: $(ASM_SRC_PATH_64)/%.asm
|
||||
sudo $(ASM) $(ASM_FLAGS_64) -o $@ $^
|
||||
|
||||
$(KERNEL_BIN_32): $(ALL_OBJ_FILES_32)
|
||||
sudo $(LD) $(LD_FLAGS_32) -T $(LD_SCRIPT_32) -o $(KERNEL_BIN_32) $(ALL_OBJ_FILES_32)
|
||||
|
||||
sudo $(LD) $(LD_FLAGS_32) -T $(LD_SCRIPT_32) -o $(OUTPUT_DIR)/$(KERNEL_BIN_32) $(ALL_OBJ_FILES_32)
|
||||
|
||||
|
||||
|
||||
$(KERNEL_BIN_64): $(ALL_OBJ_FILES_64)
|
||||
sudo $(LD) $(LD_FLAGS_64) -T $(LD_SCRIPT_64) -o $(KERNEL_BIN_64) $(ALL_OBJ_FILES_64)
|
||||
|
||||
sudo $(LD) $(LD_FLAGS_64) -T $(LD_SCRIPT_64) -o $(OUTPUT_DIR)/$(KERNEL_BIN_64) $(ALL_OBJ_FILES_64)
|
||||
|
||||
|
|
|
@ -1,39 +0,0 @@
|
|||
%ifndef _SYS_ASM_
|
||||
%define _SYS_ASM_
|
||||
%macro pushaq
|
||||
push rax ;save current rax
|
||||
push rbx ;save current rbx
|
||||
push rcx ;save current rcx
|
||||
push rdx ;save current rdx
|
||||
push rbp ;save current rbp
|
||||
push rdi ;save current rdi
|
||||
push rsi ;save current rsi
|
||||
push r8 ;save current r8
|
||||
push r9 ;save current r9
|
||||
push r10 ;save current r10
|
||||
push r11 ;save current r11
|
||||
push r12 ;save current r12
|
||||
push r13 ;save current r13
|
||||
push r14 ;save current r14
|
||||
push r15 ;save current r15
|
||||
%endmacro
|
||||
|
||||
%macro popaq
|
||||
pop r15 ;restore current r15
|
||||
pop r14 ;restore current r14
|
||||
pop r13 ;restore current r13
|
||||
pop r12 ;restore current r12
|
||||
pop r11 ;restore current r11
|
||||
pop r10 ;restore current r10
|
||||
pop r9 ;restore current r9
|
||||
pop r8 ;restore current r8
|
||||
pop rsi ;restore current rsi
|
||||
pop rdi ;restore current rdi
|
||||
pop rbp ;restore current rbp
|
||||
pop rdx ;restore current rdx
|
||||
pop rcx ;restore current rcx
|
||||
pop rbx ;restore current rbx
|
||||
pop rax ;restore current rax
|
||||
%endmacro
|
||||
|
||||
%endif
|
|
@ -1,11 +1,46 @@
|
|||
%include "../common/sys.asm"
|
||||
|
||||
global hal_write_port
|
||||
global hal_read_port
|
||||
global hal_enable_interrupt
|
||||
global hal_disable_interrupt
|
||||
global hal_interrupt_handler_wrapper
|
||||
extern hal_interrupt_handler_dummy
|
||||
|
||||
%macro pushaq 0
|
||||
push rax ;save current rax
|
||||
push rbx ;save current rbx
|
||||
push rcx ;save current rcx
|
||||
push rdx ;save current rdx
|
||||
push rbp ;save current rbp
|
||||
push rdi ;save current rdi
|
||||
push rsi ;save current rsi
|
||||
push r8 ;save current r8
|
||||
push r9 ;save current r9
|
||||
push r10 ;save current r10
|
||||
push r11 ;save current r11
|
||||
push r12 ;save current r12
|
||||
push r13 ;save current r13
|
||||
push r14 ;save current r14
|
||||
push r15 ;save current r15
|
||||
%endmacro
|
||||
|
||||
%macro popaq 0
|
||||
pop r15 ;restore current r15
|
||||
pop r14 ;restore current r14
|
||||
pop r13 ;restore current r13
|
||||
pop r12 ;restore current r12
|
||||
pop r11 ;restore current r11
|
||||
pop r10 ;restore current r10
|
||||
pop r9 ;restore current r9
|
||||
pop r8 ;restore current r8
|
||||
pop rsi ;restore current rsi
|
||||
pop rdi ;restore current rdi
|
||||
pop rbp ;restore current rbp
|
||||
pop rdx ;restore current rdx
|
||||
pop rcx ;restore current rcx
|
||||
pop rbx ;restore current rbx
|
||||
pop rax ;restore current rax
|
||||
%endmacro
|
||||
|
||||
[SECTION .text]
|
||||
[BITS 64]
|
||||
hal_write_port:
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
global flush_gdt
|
||||
global flush_tlb
|
||||
global cpuid
|
||||
global hal_flush_gdt
|
||||
global hal_flush_tlb
|
||||
global hal_cpuid
|
||||
;Functions preserve the registers rbx, rsp, rbp, r12, r13, r14, and 15
|
||||
;rax, rdi, rsi, rdx, rcx, r8, r9, r10, r11 are scratch registers.
|
||||
;function parameter: rdi,rsi,rdx,rcx,r8,r9
|
||||
|
@ -21,7 +21,7 @@ pop rax
|
|||
push rax ; eflags
|
||||
|
||||
push rsi ; cs
|
||||
push qword flush_gdt.reload ;eip
|
||||
push qword .reload ;eip
|
||||
iretq
|
||||
.reload:
|
||||
mov es,dx
|
||||
|
|
Loading…
Reference in New Issue