|
|
|
@ -1,6 +1,7 @@ |
|
|
|
BUILD := build
|
|
|
|
BUILD := build
|
|
|
|
OBJECT_DIR := $(BUILD)/objects
|
|
|
|
OBJECT_DIR := $(BUILD)/objects
|
|
|
|
BOOTSTRAP_OBJECT := $(OBJECT_DIR)/bootstrap.o
|
|
|
|
BOOTSTRAP_OBJECT := $(OBJECT_DIR)/bootstrap.o
|
|
|
|
|
|
|
|
KERNEL64_ENTRY_OBJECT := $(OBJECT_DIR)/kernel64-entry.o
|
|
|
|
PAYLOAD_ELF := $(BUILD)/kernel64.elf
|
|
|
|
PAYLOAD_ELF := $(BUILD)/kernel64.elf
|
|
|
|
PAYLOAD_BIN := $(BUILD)/kernel64.bin
|
|
|
|
PAYLOAD_BIN := $(BUILD)/kernel64.bin
|
|
|
|
PAYLOAD_OBJECT := $(OBJECT_DIR)/kernel64-payload.o
|
|
|
|
PAYLOAD_OBJECT := $(OBJECT_DIR)/kernel64-payload.o
|
|
|
|
@ -15,8 +16,10 @@ USER_LIBC_OBJECTS := $(OBJECT_DIR)/user-libc.o $(OBJECT_DIR)/user-syscall.o |
|
|
|
|
|
|
|
|
|
|
|
BOOTFLAGS := -m32 -O2 -ffreestanding -fno-pic -fno-pie \
|
|
|
|
BOOTFLAGS := -m32 -O2 -ffreestanding -fno-pic -fno-pie \
|
|
|
|
-fno-stack-protector -Wall -Wextra
|
|
|
|
-fno-stack-protector -Wall -Wextra
|
|
|
|
|
|
|
|
KERNEL64_BOOTFLAGS := -m64 -O2 -ffreestanding -fno-builtin -fno-pic -fno-pie \
|
|
|
|
|
|
|
|
-fno-stack-protector -mno-red-zone -mcmodel=small -Wall -Wextra
|
|
|
|
USER_CFLAGS := -m64 -O2 -ffreestanding -fno-builtin -fno-pic -fno-pie \
|
|
|
|
USER_CFLAGS := -m64 -O2 -ffreestanding -fno-builtin -fno-pic -fno-pie \
|
|
|
|
-fno-stack-protector -mno-red-zone -Wall -Wextra -Iuser/include -Ifreestanding/abi
|
|
|
|
-fno-stack-protector -mno-red-zone -Wall -Wextra -Iuser/include -Ikernel/core/abi
|
|
|
|
USER_LDFLAGS := -m elf_x86_64 -nostdlib -static -T user/linker.ld
|
|
|
|
USER_LDFLAGS := -m elf_x86_64 -nostdlib -static -T user/linker.ld
|
|
|
|
|
|
|
|
|
|
|
|
.PHONY: all thirdparty payload objects disk run test clean |
|
|
|
.PHONY: all thirdparty payload objects disk run test clean |
|
|
|
@ -29,9 +32,10 @@ thirdparty: |
|
|
|
payload: thirdparty objects |
|
|
|
payload: thirdparty objects |
|
|
|
cd ../.. && ./bin/tpc.php --nano examples/typephp-os/project.yml
|
|
|
|
cd ../.. && ./bin/tpc.php --nano examples/typephp-os/project.yml
|
|
|
|
|
|
|
|
|
|
|
|
# Only the 32-bit bootstrap requires flags incompatible with the 64-bit Nano
|
|
|
|
# Startup sources are built explicitly by Make. The 64-bit entry object is
|
|
|
|
# payload. Ordinary .c/.cc/.S files stay in project.yml sources.
|
|
|
|
# injected into tpc's final link through project.yml; the 32-bit Multiboot
|
|
|
|
objects: $(BOOTSTRAP_OBJECT) |
|
|
|
# object participates only in the packaging link.
|
|
|
|
|
|
|
|
objects: $(BOOTSTRAP_OBJECT) $(KERNEL64_ENTRY_OBJECT) |
|
|
|
|
|
|
|
|
|
|
|
disk: $(DISK) |
|
|
|
disk: $(DISK) |
|
|
|
|
|
|
|
|
|
|
|
@ -49,19 +53,22 @@ $(BUILD): |
|
|
|
$(OBJECT_DIR): |
|
|
|
$(OBJECT_DIR): |
|
|
|
mkdir -p $@
|
|
|
|
mkdir -p $@
|
|
|
|
|
|
|
|
|
|
|
|
$(BOOTSTRAP_OBJECT): freestanding/boot.S | $(OBJECT_DIR) |
|
|
|
$(BOOTSTRAP_OBJECT): boot/boot.S | $(OBJECT_DIR) |
|
|
|
gcc $(BOOTFLAGS) -c $< -o $@
|
|
|
|
gcc $(BOOTFLAGS) -c $< -o $@
|
|
|
|
|
|
|
|
|
|
|
|
$(OBJECT_DIR)/%.o: user/%.c freestanding/abi/typephp_os_syscall.h | $(OBJECT_DIR) |
|
|
|
$(KERNEL64_ENTRY_OBJECT): boot/kernel64-entry.S | $(OBJECT_DIR) |
|
|
|
|
|
|
|
gcc $(KERNEL64_BOOTFLAGS) -c $< -o $@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
$(OBJECT_DIR)/%.o: user/%.c kernel/core/abi/typephp_os_syscall.h | $(OBJECT_DIR) |
|
|
|
gcc $(USER_CFLAGS) -c $< -o $@
|
|
|
|
gcc $(USER_CFLAGS) -c $< -o $@
|
|
|
|
|
|
|
|
|
|
|
|
$(USER_CRT0_OBJECT): user/crt0.S freestanding/abi/typephp_os_syscall.h | $(OBJECT_DIR) |
|
|
|
$(USER_CRT0_OBJECT): user/crt0.S kernel/core/abi/typephp_os_syscall.h | $(OBJECT_DIR) |
|
|
|
gcc $(USER_CFLAGS) -c $< -o $@
|
|
|
|
gcc $(USER_CFLAGS) -c $< -o $@
|
|
|
|
|
|
|
|
|
|
|
|
$(OBJECT_DIR)/user-libc.o: user/libc.c freestanding/abi/typephp_os_syscall.h | $(OBJECT_DIR) |
|
|
|
$(OBJECT_DIR)/user-libc.o: user/libc.c kernel/core/abi/typephp_os_syscall.h | $(OBJECT_DIR) |
|
|
|
gcc $(USER_CFLAGS) -c $< -o $@
|
|
|
|
gcc $(USER_CFLAGS) -c $< -o $@
|
|
|
|
|
|
|
|
|
|
|
|
$(OBJECT_DIR)/user-syscall.o: user/syscall.S freestanding/abi/typephp_os_syscall.h | $(OBJECT_DIR) |
|
|
|
$(OBJECT_DIR)/user-syscall.o: user/syscall.S kernel/core/abi/typephp_os_syscall.h | $(OBJECT_DIR) |
|
|
|
gcc $(USER_CFLAGS) -c $< -o $@
|
|
|
|
gcc $(USER_CFLAGS) -c $< -o $@
|
|
|
|
|
|
|
|
|
|
|
|
$(USER_SH_ELF): $(OBJECT_DIR)/sh.o $(USER_CRT0_OBJECT) $(USER_LIBC_OBJECTS) user/linker.ld | $(BUILD) |
|
|
|
$(USER_SH_ELF): $(OBJECT_DIR)/sh.o $(USER_CRT0_OBJECT) $(USER_LIBC_OBJECTS) user/linker.ld | $(BUILD) |
|
|
|
@ -75,7 +82,7 @@ $(KERNEL): payload |
|
|
|
objcopy -I binary -O elf32-i386 -B i386 \
|
|
|
|
objcopy -I binary -O elf32-i386 -B i386 \
|
|
|
|
--rename-section .data=.payload,alloc,load,readonly,data,contents \
|
|
|
|
--rename-section .data=.payload,alloc,load,readonly,data,contents \
|
|
|
|
$(PAYLOAD_BIN) $(PAYLOAD_OBJECT)
|
|
|
|
$(PAYLOAD_BIN) $(PAYLOAD_OBJECT)
|
|
|
|
ld -m elf_i386 -T freestanding/linker.ld -o $@ \
|
|
|
|
ld -m elf_i386 -T boot/linker.ld -o $@ \
|
|
|
|
$(BOOTSTRAP_OBJECT) $(PAYLOAD_OBJECT)
|
|
|
|
$(BOOTSTRAP_OBJECT) $(PAYLOAD_OBJECT)
|
|
|
|
|
|
|
|
|
|
|
|
run: all |
|
|
|
run: all |
|
|
|
|