1subdir-$(CONFIG_ARM_32) += arm32
2subdir-$(CONFIG_ARM_64) += arm64
3subdir-y += platforms
4subdir-$(CONFIG_ARM_64) += efi
5subdir-$(CONFIG_ACPI) += acpi
6
7obj-$(CONFIG_HAS_ALTERNATIVE) += alternative.o
8obj-y += bootfdt.init.o
9obj-y += cpu.o
10obj-y += cpuerrata.o
11obj-y += cpufeature.o
12obj-y += decode.o
13obj-y += device.o
14obj-y += domain.o
15obj-y += domain_build.o
16obj-y += domctl.o
17obj-$(EARLY_PRINTK) += early_printk.o
18obj-y += gic.o
19obj-y += gic-v2.o
20obj-$(CONFIG_HAS_GICV3) += gic-v3.o
21obj-$(CONFIG_HAS_ITS) += gic-v3-its.o
22obj-$(CONFIG_HAS_ITS) += gic-v3-lpi.o
23obj-y += guestcopy.o
24obj-y += guest_walk.o
25obj-y += hvm.o
26obj-y += io.o
27obj-y += irq.o
28obj-y += kernel.o
29obj-$(CONFIG_LIVEPATCH) += livepatch.o
30obj-y += mem_access.o
31obj-y += mm.o
32obj-y += monitor.o
33obj-y += p2m.o
34obj-y += percpu.o
35obj-y += platform.o
36obj-y += platform_hypercall.o
37obj-y += physdev.o
38obj-y += processor.o
39obj-y += psci.o
40obj-y += setup.o
41obj-y += shutdown.o
42obj-y += smc.o
43obj-y += smp.o
44obj-y += smpboot.o
45obj-y += sysctl.o
46obj-y += time.o
47obj-y += traps.o
48obj-y += vcpreg.o
49obj-y += vgic.o
50obj-y += vgic-v2.o
51obj-$(CONFIG_HAS_GICV3) += vgic-v3.o
52obj-$(CONFIG_HAS_ITS) += vgic-v3-its.o
53obj-y += vm_event.o
54obj-y += vtimer.o
55obj-$(CONFIG_SBSA_VUART_CONSOLE) += vpl011.o
56obj-y += vsmc.o
57obj-y += vpsci.o
58obj-y += vuart.o
59
60#obj-bin-y += ....o
61
62ifdef CONFIG_DTB_FILE
63obj-y += dtb.o
64AFLAGS += -DCONFIG_DTB_FILE=\"$(CONFIG_DTB_FILE)\"
65endif
66
67ALL_OBJS := $(TARGET_SUBARCH)/head.o $(ALL_OBJS)
68
69DEPS += $(TARGET_SUBARCH)/.head.o.d
70
71ifdef CONFIG_LIVEPATCH
72all_symbols = --all-symbols
73ifdef CONFIG_FAST_SYMBOL_LOOKUP
74all_symbols = --all-symbols --sort-by-name
75endif
76else
77all_symbols =
78endif
79
80$(TARGET): $(TARGET)-syms
81	$(OBJCOPY) -O binary -S $< $@
82ifeq ($(CONFIG_ARM_64),y)
83	ln -sf $(notdir $@)  ../../$(notdir $@).efi
84endif
85
86ifeq ($(CONFIG_LTO),y)
87# Gather all LTO objects together
88prelink_lto.o: $(ALL_OBJS)
89	$(LD_LTO) -r -o $@ $^
90
91# Link it with all the binary objects
92prelink.o: $(patsubst %/built_in.o,%/built_in_bin.o,$(ALL_OBJS)) prelink_lto.o
93	$(LD) $(LDFLAGS) -r -o $@ $^
94else
95prelink.o: $(ALL_OBJS)
96	$(LD) $(LDFLAGS) -r -o $@ $^
97endif
98
99$(BASEDIR)/common/symbols-dummy.o:
100	$(MAKE) -f $(BASEDIR)/Rules.mk -C $(BASEDIR)/common symbols-dummy.o
101
102$(TARGET)-syms: prelink.o xen.lds $(BASEDIR)/common/symbols-dummy.o
103	$(LD) $(LDFLAGS) -T xen.lds -N prelink.o \
104	    $(BASEDIR)/common/symbols-dummy.o -o $(@D)/.$(@F).0
105	$(NM) -pa --format=sysv $(@D)/.$(@F).0 \
106		| $(BASEDIR)/tools/symbols $(all_symbols) --sysv --sort >$(@D)/.$(@F).0.S
107	$(MAKE) -f $(BASEDIR)/Rules.mk $(@D)/.$(@F).0.o
108	$(LD) $(LDFLAGS) -T xen.lds -N prelink.o \
109	    $(@D)/.$(@F).0.o -o $(@D)/.$(@F).1
110	$(NM) -pa --format=sysv $(@D)/.$(@F).1 \
111		| $(BASEDIR)/tools/symbols $(all_symbols) --sysv --sort >$(@D)/.$(@F).1.S
112	$(MAKE) -f $(BASEDIR)/Rules.mk $(@D)/.$(@F).1.o
113	$(LD) $(LDFLAGS) -T xen.lds -N prelink.o $(build_id_linker) \
114	    $(@D)/.$(@F).1.o -o $@
115	$(NM) -pa --format=sysv $(@D)/$(@F) \
116		| $(BASEDIR)/tools/symbols --xensyms --sysv --sort \
117		>$(@D)/$(@F).map
118	rm -f $(@D)/.$(@F).[0-9]*
119
120asm-offsets.s: $(TARGET_SUBARCH)/asm-offsets.c
121	$(CC) $(filter-out -flto,$(CFLAGS)) -S -o $@ $<
122
123xen.lds: xen.lds.S
124	$(CC) -P -E -Ui386 $(AFLAGS) -o $@ $<
125	sed -e 's/xen\.lds\.o:/xen\.lds:/g' <.xen.lds.d >.xen.lds.d.new
126	mv -f .xen.lds.d.new .xen.lds.d
127
128dtb.o: $(CONFIG_DTB_FILE)
129
130.PHONY: clean
131clean::
132	rm -f asm-offsets.s xen.lds
133	rm -f $(BASEDIR)/.xen-syms.[0-9]*
134	rm -f $(TARGET).efi
135