-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathMakefile.i386
More file actions
92 lines (73 loc) · 3.58 KB
/
Makefile.i386
File metadata and controls
92 lines (73 loc) · 3.58 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
# BlueOS / Makefile.i386
include .config
ifeq ($(V),1)
Q =
else
Q = @
endif
CC = gcc
ASM = nasm
LD = ld
QEMU = qemu-system-i386
GRUB_MKRESCUE = grub-mkrescue
GCC_INC = $(shell $(CC) -print-file-name=include)
CFLAGS = -m32 -ffreestanding -fno-builtin -std=gnu99 -nostdlib \
-fno-stack-protector -nostdinc -fno-pic -I. -Iinclude -I$(GCC_INC) -O2 \
-DI386
ASFLAGS = -f elf32
LDFLAGS = -m elf_i386 -T arch/i386/link.ld -z noexecstack
KERNEL_BIN = kernel.bin
KERNEL_ISO = blueos.iso
obj-y := arch/i386/boot.o arch/printk.o arch/i386/panic.o arch/i386/task.o lib/string.o \
arch/i386/interrupts.o arch/i386/interrupt_entry.o arch/i386/profile.o usr/auth.o \
arch/i386/switch.o arch/i386/bg.o drivers/multilru.o kernel/sysctl.o \
fs/help.o drivers/tty/tty.o drivers/keyboard/keyboard.o arch/i386/syscall.o \
drivers/scsi/scsi_core.o arch/i386/pic.o drivers/scsi/scsi_lsi.o \
drivers/pci/pci.o drivers/pinctrl/pinctrl.o arch/i386/idt.o arch/i386/interrupt_stubs.o \
arch/i386/irq.o fs/vboxfs/vboxfs.o drivers/power/power.o arch/i386/keyboard_io.o \
fs/9p/9p.o drivers/net/mac80211.o kernel/vmcore_info.o drivers/leds/leds.o drivers/vhost/vhost_net.o \
arch/i386/apic.o arch/i386/kvm.o kernel/hlec.o arch/i386/timer.o kernel/hpet.o arch/i386/shell.o \
drivers/rtc/rtc.o drivers/battery/battery.o arch/i386/mm/memory.o arch/i386/acpi.o \
arch/i386/kernel.o arch/i386/init_fnc.o arch/i386/intel.o arch/i386/amd.o arch/i386/interrupts-a.o \
drivers/isapnp/isapnp.o drivers/usb/usb.o drivers/dma/hdc_dma.o crypto/sha256.o drivers/bcma/bcma.o kernel/module.o drivers/bluefetch.o kernel/ksyms.o fs/xfs/xfs.o fs/jfs/jfs.o fs/vfs/vfs.o fs/ramfs/fs.o sound/sdw/s.o drivers/net/rtl8139.o lib/network.o \
fs/fat32/fat32.o drivers/ata/ata.o init/hyper.o arch/i386/cmdline.o drivers/amba/amba_pl011.o fs/9p/vfs_9p.o drivers/virtio/virtio_9p.o fs/adfs/adfs.o fs/ext2/ext2.o arch/i386/commands.o \
drivers/connector/connector.o drivers/i2c/i2c.o drivers/thermal/lm75.o drivers/soc/soc_intel.o drivers/pnp/pnp.o drivers/core/live_config.o \
arch/i386/pm.o
RUST_LIB = rust/target/i686-unknown-linux-gnu/release/librust.a
all: version_h $(KERNEL_BIN)
version_h:
@echo " UPD include/version.h"
$(Q)sed -i 's/#define UTS_VERSION.*/#define UTS_VERSION "#1 SMP PREEMPT '"$$(date +'%Y-%m-%d %H:%M:%S')"'"/' include/version.h
$(KERNEL_BIN): rust_module $(obj-y)
@echo " LD $@"
$(Q)$(LD) $(LDFLAGS) -o $@ $(obj-y) --whole-archive $(RUST_LIB) --no-whole-archive
@echo " DONE BlueOS Kernel is ready."
%.o: %.c
@echo " CC $@"
$(Q)$(CC) $(CFLAGS) -c $< -o $@
%.o: %.asm
@echo " AS $@"
$(Q)$(ASM) $(ASFLAGS) $< -o $@
arch/i386/%.o: arch/i386/%.s
@echo " NASM $@"
$(Q)$(ASM) $(ASFLAGS) $< -o $@
# Rust Module
rust_module:
@echo " RUST Building core module"
$(Q)cd rust && RUSTFLAGS="-C relocation-model=static" cargo build --release \
-Z build-std=core --target i686-unknown-linux-gnu
iso: all
@echo " MKISO $(KERNEL_ISO)"
@mkdir -p iso_root/boot/grub
@cp $(KERNEL_BIN) iso_root/boot/$(KERNEL_BIN)
@echo 'set timeout=0\nset default=0\nmenuentry "BlueOS" {\n multiboot /boot/$(KERNEL_BIN)\n boot\n}' > iso_root/boot/grub/grub.cfg
$(Q)$(GRUB_MKRESCUE) -o $(KERNEL_ISO) iso_root
@rm -rf iso_root
run: all
$(Q)$(QEMU) -kernel $(KERNEL_BIN) -m 256M -nographic
clean:
@echo " CLEAN Objects and binaries"
$(Q)rm -f $(KERNEL_BIN) $(KERNEL_ISO)
$(Q)find . -name "*.o" -type f -delete
$(Q)cd rust && cargo clean
.PHONY: all clean run rust_module iso version_h