-*.o
+*.[oa]
*.mod.[co]
*.cmd
*.bin
OBJCOPYFLAGS := -O binary
LDFLAGS += -T
-subdir-y := demos/$(SRCARCH)
+subdir-y := lib/$(SRCARCH) demos/$(SRCARCH)
+
+# demos depend on the library
+$(obj)/demos/$(SRCARCH): $(obj)/lib/$(SRCARCH)
include $(INMATES_LIB)/Makefile.lib
-LIBDIR := ../../lib/arm
-
INMATES := gic-demo.bin uart-demo.bin
-gic-demo-y := gic-demo.o \
- $(addprefix $(LIBDIR)/,header.o printk.o gic.o $(DRIVERS))
-
-uart-demo-y := uart-demo.o \
- $(addprefix $(LIBDIR)/,header.o printk.o $(DRIVERS))
+gic-demo-y := gic-demo.o
+uart-demo-y := uart-demo.o
$(eval $(call DECLARE_TARGETS,$(INMATES)))
include $(INMATES_LIB)/Makefile.lib
-LIBDIR := ../../lib/x86
-
INMATES := tiny-demo.bin apic-demo.bin ioapic-demo.bin 32-bit-demo.bin \
pci-demo.bin e1000-demo.bin ivshmem-demo.bin
-tiny-demo-y := tiny-demo.o \
- $(LIBDIR)/header.o $(LIBDIR)/printk.o $(LIBDIR)/timing.o
-
-apic-demo-y := apic-demo.o \
- $(LIBDIR)/header.o $(LIBDIR)/printk.o $(LIBDIR)/timing.o \
- $(LIBDIR)/int.o
-
-ioapic-demo-y := ioapic-demo.o \
- $(LIBDIR)/header.o $(LIBDIR)/printk.o $(LIBDIR)/mem.o \
- $(LIBDIR)/int.o $(LIBDIR)/ioapic.o
+tiny-demo-y := tiny-demo.o
+apic-demo-y := apic-demo.o
+ioapic-demo-y := ioapic-demo.o
+pci-demo-y := pci-demo.o
+e1000-demo-y := e1000-demo.o
+ivshmem-demo-y := ivshmem-demo.o
$(eval $(call DECLARE_32_BIT,32-bit-demo))
-32-bit-demo-y := 32-bit-demo.o \
- $(LIBDIR)/header-32.o $(LIBDIR)/printk-32.o
-
-pci-demo-y := pci-demo.o \
- $(LIBDIR)/header.o $(LIBDIR)/printk.o $(LIBDIR)/mem.o \
- $(LIBDIR)/int.o $(LIBDIR)/pci.o $(LIBDIR)/timing.o
-
-e1000-demo-y := e1000-demo.o \
- $(LIBDIR)/header.o $(LIBDIR)/printk.o $(LIBDIR)/mem.o \
- $(LIBDIR)/pci.o $(LIBDIR)/timing.o
-
-ivshmem-demo-y := ivshmem-demo.o \
- $(LIBDIR)/header.o $(LIBDIR)/printk.o $(LIBDIR)/mem.o \
- $(LIBDIR)/int.o $(LIBDIR)/pci.o $(LIBDIR)/timing.o
+32-bit-demo-y := 32-bit-demo.o
$(eval $(call DECLARE_TARGETS,$(INMATES)))
--- /dev/null
+#
+# Jailhouse, a Linux-based partitioning hypervisor
+#
+# Copyright (c) Siemens AG, 2015
+#
+# Authors:
+# Jan Kiszka <jan.kiszka@siemens.com>
+#
+# This work is licensed under the terms of the GNU GPL, version 2. See
+# the COPYING file in the top-level directory.
+#
+
+include $(INMATES_LIB)/Makefile.lib
+
+always := lib.a
+
+lib-y := header.o gic.o printk.o
+lib-$(CONFIG_ARM_GIC) += gic-v2.o
+lib-$(CONFIG_ARM_GIC_V3) += gic-v3.o
+lib-$(CONFIG_SERIAL_AMBA_PL011) += uart-pl011.o
+lib-$(CONFIG_SERIAL_8250_DW) += uart-8250-dw.o
+lib-$(CONFIG_SERIAL_TEGRA) += uart-tegra.o
mach-$(CONFIG_MACH_SUN7I) := sun7i
mach-$(CONFIG_MACH_TEGRA124) := tegra124
-gic-$(CONFIG_ARM_GIC) := gic-v2.o
-gic-$(CONFIG_ARM_GIC_V3) := gic-v3.o
-uart-$(CONFIG_SERIAL_AMBA_PL011) := uart-pl011.o
-uart-$(CONFIG_SERIAL_8250_DW) := uart-8250-dw.o
-uart-$(CONFIG_SERIAL_TEGRA) := uart-tegra.o
-
MACHINE := mach-$(mach-y)
-DRIVERS := $(gic-y) $(uart-y)
KBUILD_CFLAGS += -I$(INMATES_LIB)/include/$(MACHINE)
KBUILD_AFLAGS += -I$(INMATES_LIB)/include/$(MACHINE)
.SECONDARY: $(addprefix $(obj)/,$(targets))
.SECONDEXPANSION:
-$(obj)/%-linked.o: $(INMATES_LIB)/inmate.lds $$(addprefix $$(obj)/,$$($$*-y))
+$(obj)/%-linked.o: $(INMATES_LIB)/inmate.lds $$(addprefix $$(obj)/,$$($$*-y)) \
+ $(INMATES_LIB)/lib.a
$(call if_changed,ld)
$(obj)/%.bin: $(obj)/%-linked.o
--- /dev/null
+#
+# Jailhouse, a Linux-based partitioning hypervisor
+#
+# Copyright (c) Siemens AG, 2015
+#
+# Authors:
+# Jan Kiszka <jan.kiszka@siemens.com>
+#
+# This work is licensed under the terms of the GNU GPL, version 2. See
+# the COPYING file in the top-level directory.
+#
+
+always := lib.a lib32.a
+
+TARGETS := header.o hypercall.o ioapic.o printk.o
+TARGETS_64_ONLY := int.o mem.o pci.o timing.o
+
+lib-y := $(TARGETS) $(TARGETS_64_ONLY)
+
+lib32-y := $(addprefix $(obj)/,$(TARGETS:.o=-32.o))
+
+quiet_cmd_link_archive32 = AR $@
+cmd_link_archive32 = rm -f $@; $(AR) rcs$(KBUILD_ARFLAGS) $@ $(lib32-y)
+
+$(obj)/lib32.a: $(lib32-y)
+ $(call if_changed,link_archive32)
+
+AFLAGS_header-32.o := -m32
+targets += header-32.o
+
+$(obj)/%-32.o: c_flags += -m32
+$(obj)/%-32.o: $(src)/%.c
+ $(call if_changed_rule,cc_o_c)
# prevent deleting intermediate files which would cause rebuilds
.SECONDARY: $(addprefix $(obj)/,$(targets))
-# obj/NAME-linked.o: ... obj/$(NAME-y)
+# obj/NAME-linked.o: ... obj/$(NAME-y) lib/lib[32].a
.SECONDEXPANSION:
-$(obj)/%-linked.o: $(INMATES_LIB)/inmate.lds $$(addprefix $$(obj)/,$$($$*-y))
+$(obj)/%-linked.o: $(INMATES_LIB)/inmate.lds $$(addprefix $$(obj)/,$$($$*-y)) \
+ $(INMATES_LIB)/$$(if $$($$*_32),lib32.a,lib.a)
$(call if_changed,ld)
$(obj)/%.bin: $(obj)/%-linked.o
define DECLARE_32_BIT =
CFLAGS_$(1).o := -m32
LDFLAGS_$(1)-linked.o := /dev/null -m elf_i386 -T
+ $(1)_32 := y
endef
-
-AFLAGS_header-32.o := -m32
-
-$(obj)/%-32.o: c_flags += -m32
-$(obj)/%-32.o: $(obj)/%.c
- $(call if_changed_rule,cc_o_c)