1 include $(TOP)/config/make.cfg
3 # Rules to create AROS Kernel for amiga-m68k
8 #MM- kernel-link-amiga-m68k : \
9 #MM general-setup-amiga-m68k \
12 #MM kernel-alerthook-kobj \
13 #MM kernel-romboot-kobj \
14 #MM kernel-diag-kobj \
15 #MM kernel-amiga-m68k-amigavideo-kobj \
16 #MM kernel-amiga-m68k-audio-kobj \
17 #MM kernel-amiga-m68k-devs \
18 #MM kernel-amiga-m68k-kbd-kobj \
19 #MM kernel-amiga-m68k-mouse-kobj \
20 #MM kernel-amiga-m68k-uaegfx-kobj \
21 #MM kernel-amiga-m68k-wbtag-kobj \
23 #MM kernel-bootloader-amiga-m68k-kobj \
24 #MM kernel-c-shellcommands-kobj \
26 #MM kernel-debug-kobj \
27 #MM kernel-disk-kobj \
28 #MM kernel-filesystem-kobj \
29 #MM kernel-fs-afs-kobj \
30 #MM kernel-fs-cdvdfs-kobj \
31 #MM kernel-fs-con-kobj \
32 #MM kernel-m680x0-kobj \
33 #MM kernel-misc-kobj \
34 #MM kernel-partition-kobj \
35 #MM kernel-potgo-kobj \
36 #MM kernel-cardres-kobj \
37 #MM kernel-shell-kobj \
38 #MM kernel-usb-amiga-m68k \
39 #MM kernel-workbench-devs-amiga-m68k \
40 #MM kernel-workbook-kobj \
41 #MM workbench-libs-gadtools-kobj \
42 #MM workbench-libs-icon-kobj \
43 #MM workbench-libs-mathffp-kobj \
44 #MM workbench-libs-mathieeesingbas-kobj \
45 #MM workbench-libs-workbench-kobj \
48 #MM- kernel-workbench-devs-amiga-m68k : workbench-devs-amiga-m68k
50 USELIBS := amiga arossupport rom arosm autoinit libinit \
52 LIBS := $(addprefix -l,$(USELIBS)) -L$(GENDIR)/lib -lloadseg
53 DEPLIBS := $(addprefix $(LIBDIR)/lib,$(addsuffix .a,$(USELIBS)))
55 # Force rebuilding, so that we always get new date strings
60 # USe -m68000 when compiling .S files, as we will need the
61 # expanded instruction set to detect alterate CPUs
62 USER_AFLAGS := -m68060 -DADATE="\"$(shell date "+%d.%m.%Y")\""
64 # Sadly, we need to consume Chip RAM for the initial SS and the ROM BSS.
65 # The initial System Stack is located at 0x800-0x1000, but is only
66 # used until RTF_COLDSTART.
68 # Right before RTF_COLDSTART, a new SS will be allocated from the fastest
69 # available RAM, and this 0x800-0x1000 area will be ignored.
70 ROMLOC_ss := 0x0000800
72 # Main ROM (0xf80000 - 0xffffff)
73 ROMLOC_rom := 0x0f80000
75 FILES=start early debug mmu
76 AFILES=rom_entry rom_init cpu_detect superstack_swap
78 KLIBS := exec aros dos utility oop expansion partition debug
79 KDEVS := timer input keyboard console trackdisk gameport audio ata
80 KHNDLRS := con afs amberram
81 KHIDDS := hiddclass graphics keyboard mouse amigakbd amigamouse amigavideo uaegfx
82 KRSRCS := battclock kernel processor lddemon dosboot cia potgo disk FileSystem misc shell cardres
83 KHOOKS := diag romboot
85 KOBJS_rom := $(addprefix $(KOBJSDIR)/,$(addsuffix _library.ko ,$(KLIBS))) \
86 $(addprefix $(KOBJSDIR)/,$(addsuffix _device.ko ,$(KDEVS))) \
87 $(addprefix $(KOBJSDIR)/,$(addsuffix _handler.ko ,$(KHNDLRS))) \
88 $(addprefix $(KOBJSDIR)/,$(addsuffix _hidd.ko ,$(KHIDDS))) \
89 $(addprefix $(KOBJSDIR)/,$(addsuffix _resource.ko,$(KRSRCS))) \
90 $(addprefix $(KOBJSDIR)/,$(addsuffix _driver.ko ,$(KDRVRS) )) \
91 $(addprefix $(KOBJSDIR)/,$(addsuffix _hook.ko ,$(KHOOKS) ))
93 OBJS_rom := $(addprefix $(KOBJSDIR)/,$(addsuffix .o,$(AFILES))) \
94 $(addprefix $(KOBJSDIR)/,$(addsuffix .o,$(FILES)))
95 $(DISTDIR)/aros-amiga-m68k-rom.elf: $(KOBJS_rom) $(OBJS_rom)
97 # Expansion ROM (0xe00000-0xe7ffff)
101 KLIBS := keymap graphics layers intuition gadtools icon workbench 680x0 \
102 mathffp mathieeesingbas
106 KRSRCS := shellcommands workbook wbtag
109 ROMLOC_ext := 0xe00000
111 $(addprefix $(KOBJSDIR)/,$(addsuffix _library.ko ,$(KLIBS) )) \
112 $(addprefix $(KOBJSDIR)/,$(addsuffix _device.ko ,$(KDEVS) )) \
113 $(addprefix $(KOBJSDIR)/,$(addsuffix _handler.ko ,$(KHNDLRS))) \
114 $(addprefix $(KOBJSDIR)/,$(addsuffix _hidd.ko ,$(KHIDDS) )) \
115 $(addprefix $(KOBJSDIR)/,$(addsuffix _resource.ko,$(KRSRCS) )) \
116 $(addprefix $(KOBJSDIR)/,$(addsuffix _driver.ko ,$(KDRVRS) )) \
117 $(addprefix $(KOBJSDIR)/,$(addsuffix _hook.ko ,$(KHOOKS) ))
118 OBJS_ext := $(addprefix $(KOBJSDIR)/,$(addsuffix .o,$(AFILES))) \
119 $(addprefix $(KOBJSDIR)/,$(addsuffix .o,$(FILES)))
120 $(DISTDIR)/aros-amiga-m68k-ext.elf: $(KOBJS_ext) $(OBJS_ext)
122 #MM kernel-link-amiga-m68k:
123 kernel-link-amiga-m68k : $(DISTDIR)/aros-amiga-m68k-rom.bin $(DISTDIR)/aros-amiga-m68k-ext.bin
125 #MM kernel-link-amiga-m68k-quick:
126 kernel-link-amiga-m68k-quick : $(DISTDIR)/aros-amiga-m68k-rom.bin $(DISTDIR)/aros-amiga-m68k-ext.bin
128 $(HOSTGENDIR)/tools/romcheck: romcheck.c
129 $(Q)$(HOST_CC) $(DEBUG_CFLAGS) -o $@ $<
131 $(GENDIR)/%_objs.ld: $(SRCDIR)/$(CURDIR)/mmakefile.src
133 $(Q)for file in $(OBJS_$*) $(KOBJS_$*); do \
134 echo "$$file(.rodata .rodata.*)" >>$@; \
135 echo "$$file(.text)" >>$@; \
138 $(DISTDIR)/aros-amiga-m68k-reloc.elf : $(DEPLIBS) $(SRCDIR)/$(CURDIR)/mmakefile.src \
139 $(OBJS_rom) $(KOBJS_rom) \
140 $(OBJS_ext) $(KOBJS_ext) \
141 $(SRCDIR)/$(CURDIR)/aros-rom.ld \
142 $(GENDIR)/rom_objs.ld \
143 $(GENDIR)/ext_objs.ld
145 @$(ECHO) Linking $@...
146 $(Q)$(KERNEL_CC) -Wl,-r \
147 -static -nostartfiles -nostdlib \
148 -Wl,--defsym -Wl,start=0x0 \
149 -Wl,--defsym -Wl,SysBase=0x4 \
151 -o $@ -Wl,-T -Wl,$(SRCDIR)/$(CURDIR)/aros-rom.ld \
152 -L$(LIBDIR) $(LIBS) -lgcc
154 $(DISTDIR)/aros-amiga-m68k.elf: $(DISTDIR)/aros-amiga-m68k-reloc.elf
155 $(Q)$(KERNEL_LD) -o $@ \
156 --section-start .rom=$(ROMLOC_rom) \
157 --section-start .ext=$(ROMLOC_ext) \
158 --section-start .ss=$(ROMLOC_ss) \
160 $(Q)$(TARGET_OBJDUMP) -h $@ | grep '[rea][oxm][mte] '
162 $(DISTDIR)/aros-amiga-m68k-%.bin : $(DISTDIR)/aros-amiga-m68k.elf $(HOSTGENDIR)/tools/romcheck
163 $(Q)$(TARGET_OBJCOPY) \
164 --output-target binary \
167 $(DISTDIR)/aros-amiga-m68k.elf $@
169 $(Q)$(HOSTGENDIR)/tools/romcheck $@
170 $(Q)$(MKDIR) $(AROSDIR)/boot
171 $(Q)$(CP) $@ $(AROSDIR)/boot/aros-$*.bin
177 USER_CFLAGS += $(PRIV_KERNEL_INCLUDES) $(PRIV_EXEC_INCLUDES)
178 USER_AFLAGS += $(PRIV_KERNEL_INCLUDES) $(PRIV_EXEC_INCLUDES)
180 $(KOBJSDIR)/%.o : %.c
181 %compile_q cmd="$(KERNEL_CC)" opt="$(CFLAGS) $(USER_CFLAGS) -I$(BINDIR)/Development/include -I$(GENINCDIR)"
183 $(KOBJSDIR)/%.o : %.S
184 %compile_q cmd="$(KERNEL_CC)" opt="$(CFLAGS) $(AFLAGS) $(USER_AFLAGS) -I$(BINDIR)/Development/include -I$(GENINCDIR)"
186 $(KOBJSDIR)/%.d : %.c
189 # Localize symbols, so that we don't get name clashes when linking
191 # .. except for exec.library. Our boot code needs symbols from it
192 # (PrepareMoveExecBase, InitKickTags, etc)
193 %/exec_library.ko: %/exec_library.o
196 # .. except for kernel.resource. Our boot code needs symbols from it
197 # (krnPrepareExecBase and krnCreateMemHeader)
198 %/kernel_resource.ko: %/kernel_resource.o
201 # Localize symbols for everybody else though!
203 $(Q)$(NM_PLAIN) --defined-only $< | cut -d' ' -f3 >$@.sym
204 $(Q)$(OBJCOPY) --localize-symbols $@.sym $< $@
206 DEPS := $(foreach f, $(FILES), $(TARGETDIR)/$(f).d)
209 ###########################################################################
211 ## Compressed elf for AROSBootstrap
213 BOOTDIR := $(BINDIR)/boot
215 #MM- kernel-link-amiga-m68k: kernel-boot-elf
216 #MM- kernel-link-amiga-m68k-quick: kernel-boot-elf-quick
219 #MM kernel-boot-elf-quick:
220 kernel-boot-elf: $(BOOTDIR)/aros.elf
221 kernel-boot-elf-quick: $(BOOTDIR)/aros.elf
223 # Main ROM, that must live in MEMF_LOCAL memory
228 KLIBS := exec expansion
235 KOBJS_local := $(addprefix $(KOBJSDIR)/,$(addsuffix _library.ko ,$(KLIBS))) \
236 $(addprefix $(KOBJSDIR)/,$(addsuffix _device.ko ,$(KDEVS))) \
237 $(addprefix $(KOBJSDIR)/,$(addsuffix _handler.ko ,$(KHNDLRS))) \
238 $(addprefix $(KOBJSDIR)/,$(addsuffix _hidd.ko ,$(KHIDDS))) \
239 $(addprefix $(KOBJSDIR)/,$(addsuffix _resource.ko,$(KRSRCS))) \
240 $(addprefix $(KOBJSDIR)/,$(addsuffix _driver.ko ,$(KDRVRS) )) \
241 $(addprefix $(KOBJSDIR)/,$(addsuffix _hook.ko ,$(KHOOKS) ))
243 OBJS_local:= $(addprefix $(KOBJSDIR)/,$(addsuffix .o,$(AFILES))) \
244 $(addprefix $(KOBJSDIR)/,$(addsuffix .o,$(FILES)))
246 FILES=start early debug
247 AFILES=rom_entry rom_init cpu_detect superstack_swap
249 OBJS_start := $(addprefix $(KOBJSDIR)/,$(addsuffix .o,$(AFILES))) \
250 $(addprefix $(KOBJSDIR)/,$(addsuffix .o,$(FILES)))
253 # Everything else. Can live in MEMF_ANY
257 KLIBS := aros utility dos oop mathffp mathieeesingbas partition \
258 keymap graphics layers intuition gadtools icon workbench 680x0
259 KDEVS := timer input keyboard console trackdisk gameport audio ata
260 KHNDLRS := cdrom con afs amberram
261 KHIDDS := hiddclass graphics keyboard mouse amigakbd amigamouse amigavideo uaegfx
262 KRSRCS := battclock processor lddemon dosboot cia potgo disk \
263 misc shell shellcommands workbook wbtag cardres FileSystem
264 KHOOKS := alert diag romboot
267 $(addprefix $(KOBJSDIR)/,$(addsuffix _library.ko ,$(KLIBS) )) \
268 $(addprefix $(KOBJSDIR)/,$(addsuffix _device.ko ,$(KDEVS) )) \
269 $(addprefix $(KOBJSDIR)/,$(addsuffix _handler.ko ,$(KHNDLRS))) \
270 $(addprefix $(KOBJSDIR)/,$(addsuffix _hidd.ko ,$(KHIDDS) )) \
271 $(addprefix $(KOBJSDIR)/,$(addsuffix _resource.ko,$(KRSRCS) )) \
272 $(addprefix $(KOBJSDIR)/,$(addsuffix _driver.ko ,$(KDRVRS) )) \
273 $(addprefix $(KOBJSDIR)/,$(addsuffix _hook.ko ,$(KHOOKS) ))
275 $(DISTDIR)/aros-amiga-m68k-ram.elf : $(DEPLIBS) $(SRCDIR)/$(CURDIR)/mmakefile.src \
277 $(OBJS_local) $(KOBJS_local) \
278 $(OBJS_any) $(KOBJS_any) \
279 $(SRCDIR)/$(CURDIR)/aros-ram.ld \
280 $(GENDIR)/start_objs.ld \
281 $(GENDIR)/local_objs.ld \
282 $(GENDIR)/any_objs.ld
284 @$(ECHO) Linking $@...
285 $(Q)$(KERNEL_CC) -Wl,-r \
286 -static -nostartfiles -nostdlib \
287 -Wl,--defsym -Wl,start=0x0 \
288 -Wl,--defsym -Wl,SysBase=0x4 \
290 -o $@ -Wl,-T -Wl,$(SRCDIR)/$(CURDIR)/aros-ram.ld \
291 -L$(LIBDIR) $(LIBS) -lgcc
294 $(BOOTDIR)/aros.elf: $(DISTDIR)/aros-amiga-m68k-ram.elf \
295 $(SRCDIR)/$(CURDIR)/mmakefile.src
296 $(Q)$(MKDIR) $(BOOTDIR)
297 $(Q)$(TARGET_OBJCOPY) \