|
|
1.1 root 1: # SeaBIOS build system
2: #
3: # Copyright (C) 2008,2009 Kevin O'Connor <[email protected]>
4: #
5: # This file may be distributed under the terms of the GNU LGPLv3 license.
6:
7: # Program version
8: VERSION=0.5.0-$(shell date +"%Y%m%d_%H%M%S")-$(shell hostname)
9:
10: # Output directory
11: OUT=out/
12:
13: # Source files
14: SRCBOTH=misc.c pmm.c stacks.c output.c util.c block.c floppy.c ata.c mouse.c \
15: kbd.c pci.c serial.c clock.c pic.c cdrom.c ps2port.c smp.c resume.c \
16: pnpbios.c pirtable.c vgahooks.c ramdisk.c \
17: usb.c usb-uhci.c usb-ohci.c usb-hid.c paravirt.c
18: SRC16=$(SRCBOTH) system.c disk.c apm.c pcibios.c font.c
19: SRC32=$(SRCBOTH) post.c shadow.c memmap.c coreboot.c boot.c \
20: acpi.c smm.c mptable.c smbios.c pciinit.c optionroms.c mtrr.c \
21: lzmadecode.c
22:
23: cc-option = $(shell if test -z "`$(1) $(2) -S -o /dev/null -xc \
24: /dev/null 2>&1`"; then echo "$(2)"; else echo "$(3)"; fi ;)
25:
26: # Default compiler flags
27: COMMONCFLAGS = -Wall -Os -MD -m32 -march=i386 -mregparm=3 \
28: -mpreferred-stack-boundary=2 -mrtd -freg-struct-return \
29: -ffreestanding -fomit-frame-pointer \
30: -fno-delete-null-pointer-checks -Wno-strict-aliasing \
31: -ffunction-sections -fdata-sections -fno-common \
32: -minline-all-stringops
33: COMMONCFLAGS += $(call cc-option,$(CC),-nopie,)
34: COMMONCFLAGS += $(call cc-option,$(CC),-fno-stack-protector,)
35: COMMONCFLAGS += $(call cc-option,$(CC),-fno-stack-protector-all,)
36:
37: override CFLAGS = $(COMMONCFLAGS) -g -DMODE16=0
38: CFLAGS16INC = $(COMMONCFLAGS) -DMODE16=1 -fno-defer-pop \
39: $(call cc-option,$(CC),-fno-jump-tables,-DMANUAL_NO_JUMP_TABLE) \
40: $(call cc-option,$(CC),-fno-tree-switch-conversion,) \
41: $(call cc-option,$(CC),--param large-stack-frame=4,)
42: CFLAGS16 = $(CFLAGS16INC) -g
43:
44: all: $(OUT) $(OUT)bios.bin
45:
46: # Run with "make V=1" to see the actual compile commands
47: ifdef V
48: Q=
49: else
50: Q=@
51: endif
52:
53: OBJCOPY=objcopy
54: OBJDUMP=objdump
55: STRIP=strip
56:
57: .PHONY : all FORCE
58:
59: vpath %.c src vgasrc
60: vpath %.S src vgasrc
61:
62: ################ Build rules
63:
64: # Verify the gcc configuration and test if -fwhole-program works.
65: TESTGCC:=$(shell CC=$(CC) tools/test-gcc.sh)
66: ifeq "$(TESTGCC)" "-1"
67: $(error "Please upgrade GCC")
68: endif
69:
70: ifndef COMPSTRAT
71: COMPSTRAT=$(TESTGCC)
72: endif
73:
74: # Do a whole file compile - three methods are supported.
75: ifeq "$(COMPSTRAT)" "1"
76: # First method - use -fwhole-program without -combine.
77: define whole-compile
78: @echo " Compiling whole program $3"
79: $(Q)printf '$(foreach i,$2,#include "../$i"\n)' > $3.tmp.c
80: $(Q)$(CC) $1 -fwhole-program -DWHOLE_PROGRAM -c $3.tmp.c -o $3
81: endef
82: else
83: ifeq "$(COMPSTRAT)" "2"
84: # Second menthod - don't use -fwhole-program at all.
85: define whole-compile
86: @echo " Compiling whole program $3"
87: $(Q)printf '$(foreach i,$2,#include "../$i"\n)' > $3.tmp.c
88: $(Q)$(CC) $1 -c $3.tmp.c -o $3
89: endef
90: else
91: # Third (and preferred) method - use -fwhole-program with -combine
92: define whole-compile
93: @echo " Compiling whole program $3"
94: $(Q)$(CC) $1 -fwhole-program -DWHOLE_PROGRAM -combine -c $2 -o $3
95: endef
96: endif
97: endif
98:
99:
100: $(OUT)%.s: %.c
101: @echo " Compiling to assembler $@"
102: $(Q)$(CC) $(CFLAGS16INC) -S -c $< -o $@
103:
104: $(OUT)%.lds: %.lds.S
105: @echo " Precompiling $@"
106: $(Q)$(CPP) -P -D__ASSEMBLY__ $< -o $@
107:
108: $(OUT)asm-offsets.h: $(OUT)asm-offsets.s
109: @echo " Generating offset file $@"
110: $(Q)./tools/gen-offsets.sh $< $@
111:
112:
113: $(OUT)ccode.16.s: ; $(call whole-compile, $(CFLAGS16) -S, $(addprefix src/, $(SRC16)),$@)
114:
115: $(OUT)ccode32.o: ; $(call whole-compile, $(CFLAGS), $(addprefix src/, $(SRC32)),$@)
116:
117: $(OUT)code16.o: romlayout.S $(OUT)ccode.16.s $(OUT)asm-offsets.h
118: @echo " Compiling (16bit) $@"
119: $(Q)$(CC) $(CFLAGS16INC) -c -D__ASSEMBLY__ $< -o $@
120:
121: $(OUT)romlayout16.lds $(OUT)romlayout32.lds $(OUT)code32.o: $(OUT)ccode32.o $(OUT)code16.o tools/layoutrom.py
122: @echo " Building ld scripts (version \"$(VERSION)\")"
123: $(Q)echo 'const char VERSION[] = "$(VERSION)";' > $(OUT)version.c
124: $(Q)$(CC) $(CFLAGS) -c $(OUT)version.c -o $(OUT)version.o
125: $(Q)$(LD) -melf_i386 -r $(OUT)ccode32.o $(OUT)version.o -o $(OUT)code32.o
126: $(Q)$(OBJDUMP) -thr $(OUT)code32.o > $(OUT)code32.o.objdump
127: $(Q)$(OBJDUMP) -thr $(OUT)code16.o > $(OUT)code16.o.objdump
128: $(Q)./tools/layoutrom.py $(OUT)code16.o.objdump $(OUT)code32.o.objdump $(OUT)romlayout16.lds $(OUT)romlayout32.lds
129:
130:
131: $(OUT)rom16.o: $(OUT)code16.o $(OUT)rom32.o $(OUT)romlayout16.lds
132: @echo " Linking (no relocs) $@"
133: $(Q)$(LD) -r -T $(OUT)romlayout16.lds $< -o $@
134:
135: $(OUT)rom32.o: $(OUT)code32.o $(OUT)romlayout32.lds
136: @echo " Linking (no relocs) $@"
137: $(Q)$(LD) -r -T $(OUT)romlayout32.lds $< -o $@
138:
139: $(OUT)rom.o: $(OUT)rom16.o $(OUT)rom32.o $(OUT)rombios16.lds $(OUT)rombios.lds
140: @echo " Linking $@"
141: $(Q)$(LD) -T $(OUT)rombios16.lds $(OUT)rom16.o -R $(OUT)rom32.o -o $(OUT)rom16.reloc.o
142: $(Q)$(STRIP) $(OUT)rom16.reloc.o -o $(OUT)rom16.final.o
143: $(Q)$(OBJCOPY) --adjust-vma 0xf0000 $(OUT)rom16.o $(OUT)rom16.moved.o
144: $(Q)$(LD) -T $(OUT)rombios.lds $(OUT)rom16.final.o $(OUT)rom32.o -R $(OUT)rom16.moved.o -o $@
145:
146: $(OUT)bios.bin.elf $(OUT)bios.bin: $(OUT)rom.o tools/checkrom.py
147: @echo " Prepping $@"
148: $(Q)$(OBJDUMP) -thr $< > $<.objdump
149: $(Q)$(OBJCOPY) -O binary $< $(OUT)bios.bin.raw
150: $(Q)./tools/checkrom.py $<.objdump $(OUT)bios.bin.raw $(OUT)bios.bin
151: $(Q)$(STRIP) -R .comment $< -o $(OUT)bios.bin.elf
152:
153:
154: ################ VGA build rules
155:
156: # VGA src files
157: SRCVGA=src/output.c src/util.c vgasrc/vga.c vgasrc/vgafb.c vgasrc/vgaio.c \
158: vgasrc/vgatables.c vgasrc/vgafonts.c vgasrc/clext.c
159:
160: $(OUT)vgaccode.16.s: ; $(call whole-compile, $(CFLAGS16) -S -Isrc, $(SRCVGA),$@)
161:
162: $(OUT)vgalayout16.o: vgaentry.S $(OUT)vgaccode.16.s $(OUT)asm-offsets.h
163: @echo " Compiling (16bit) $@"
164: $(Q)$(CC) $(CFLAGS16INC) -c -D__ASSEMBLY__ -Isrc $< -o $@
165:
166: $(OUT)vgarom.o: $(OUT)vgalayout16.o $(OUT)vgalayout.lds
167: @echo " Linking $@"
168: $(Q)$(LD) --gc-sections -T $(OUT)vgalayout.lds $(OUT)vgalayout16.o -o $@
169:
170: $(OUT)vgabios.bin.raw: $(OUT)vgarom.o
171: @echo " Extracting binary $@"
172: $(Q)$(OBJCOPY) -O binary $< $@
173:
174: $(OUT)vgabios.bin: $(OUT)vgabios.bin.raw tools/buildrom.py
175: @echo " Finalizing rom $@"
176: $(Q)./tools/buildrom.py $< $@
177:
178: ####### dsdt build rules
179: src/acpi-dsdt.hex: src/acpi-dsdt.dsl
180: @echo "Compiling DSDT"
181: $(Q)cpp -P $< > $(OUT)acpi-dsdt.dsl.i
182: $(Q)iasl -tc -p $@ $(OUT)acpi-dsdt.dsl.i
183: $(Q)rm $(OUT)acpi-dsdt.dsl.i
184:
185: ####### Generic rules
186: clean:
187: $(Q)rm -rf $(OUT)
188:
189: $(OUT):
190: $(Q)mkdir $@
191:
192: -include $(OUT)*.d
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.