| #This is a make file with common rules for both x86 & x86-64 | |
| all: directories test_cases | |
| cflatobjs += lib/acpi.o | |
| cflatobjs += lib/pci.o | |
| cflatobjs += lib/pci-edu.o | |
| cflatobjs += lib/alloc.o | |
| cflatobjs += lib/auxinfo.o | |
| cflatobjs += lib/vmalloc.o | |
| cflatobjs += lib/alloc_page.o | |
| cflatobjs += lib/alloc_phys.o | |
| cflatobjs += lib/x86/setup.o | |
| cflatobjs += lib/x86/io.o | |
| cflatobjs += lib/x86/smp.o | |
| cflatobjs += lib/x86/vm.o | |
| cflatobjs += lib/x86/fwcfg.o | |
| cflatobjs += lib/x86/apic.o | |
| cflatobjs += lib/x86/atomic.o | |
| cflatobjs += lib/x86/desc.o | |
| cflatobjs += lib/x86/isr.o | |
| cflatobjs += lib/x86/stack.o | |
| cflatobjs += lib/x86/fault_test.o | |
| cflatobjs += lib/x86/delay.o | |
| cflatobjs += lib/x86/pmu.o | |
| ifeq ($(CONFIG_EFI),y) | |
| cflatobjs += lib/x86/amd_sev.o | |
| cflatobjs += lib/efi.o | |
| cflatobjs += x86/efi/reloc_x86_64.o | |
| endif | |
| OBJDIRS += lib/x86 | |
| $(libcflat): LDFLAGS += $(arch_LDFLAGS) | |
| $(libcflat): CFLAGS += -ffreestanding -I $(SRCDIR)/lib -I lib | |
| COMMON_CFLAGS += -m$(bits) | |
| ifneq ($(WA_DIVIDE),) | |
| COMMON_CFLAGS += -Wa,--divide | |
| endif | |
| COMMON_CFLAGS += -O1 | |
| # stack.o relies on frame pointers. | |
| KEEP_FRAME_POINTER := y | |
| FLATLIBS = lib/libcflat.a | |
| ifeq ($(CONFIG_EFI),y) | |
| .PRECIOUS: %.efi %.so | |
| %.so: %.o $(FLATLIBS) $(SRCDIR)/x86/efi/elf_x86_64_efi.lds $(cstart.o) | |
| $(LD) -T $(SRCDIR)/x86/efi/elf_x86_64_efi.lds $(EFI_LDFLAGS) -o $@ \ | |
| $(filter %.o, $^) $(FLATLIBS) | |
| @chmod a-x $@ | |
| %.efi: %.so | |
| $(OBJCOPY) --only-keep-debug $^ $@.debug | |
| $(OBJCOPY) --strip-debug $^ | |
| $(OBJCOPY) --add-gnu-debuglink=$@.debug $^ | |
| $(OBJCOPY) \ | |
| -j .text -j .sdata -j .data -j .dynamic -j .dynsym -j .rel \ | |
| -j .rela -j .reloc -S --target=$(FORMAT) $< $@ | |
| @chmod a-x $@ | |
| else | |
| # We want to keep intermediate file: %.elf and %.o | |
| .PRECIOUS: %.elf %.o | |
| %.elf: LDFLAGS += $(arch_LDFLAGS) | |
| %.elf: %.o $(FLATLIBS) $(SRCDIR)/x86/flat.lds $(cstart.o) | |
| $(LD) $(LDFLAGS) -T $(SRCDIR)/x86/flat.lds -o $@ \ | |
| $(filter %.o, $^) $(FLATLIBS) | |
| @chmod a-x $@ | |
| %.flat: %.elf | |
| $(OBJCOPY) -O elf32-i386 $^ $@ | |
| @chmod a-x $@ | |
| endif | |
| tests-common = $(TEST_DIR)/vmexit.$(exe) $(TEST_DIR)/tsc.$(exe) \ | |
| $(TEST_DIR)/smptest.$(exe) $(TEST_DIR)/dummy.$(exe) \ | |
| $(TEST_DIR)/msr.$(exe) \ | |
| $(TEST_DIR)/hypercall.$(exe) $(TEST_DIR)/sieve.$(exe) \ | |
| $(TEST_DIR)/kvmclock_test.$(exe) \ | |
| $(TEST_DIR)/s3.$(exe) $(TEST_DIR)/pmu.$(exe) $(TEST_DIR)/setjmp.$(exe) \ | |
| $(TEST_DIR)/tsc_adjust.$(exe) $(TEST_DIR)/asyncpf.$(exe) \ | |
| $(TEST_DIR)/init.$(exe) \ | |
| $(TEST_DIR)/hyperv_synic.$(exe) $(TEST_DIR)/hyperv_stimer.$(exe) \ | |
| $(TEST_DIR)/hyperv_connections.$(exe) \ | |
| $(TEST_DIR)/tsx-ctrl.$(exe) \ | |
| $(TEST_DIR)/emulator.$(exe) \ | |
| $(TEST_DIR)/eventinj.$(exe) \ | |
| $(TEST_DIR)/smap.$(exe) \ | |
| $(TEST_DIR)/umip.$(exe) | |
| # The following test cases are disabled when building EFI tests because they | |
| # use absolute addresses in their inline assembly code, which cannot compile | |
| # with the '-fPIC' flag | |
| ifneq ($(CONFIG_EFI),y) | |
| tests-common += $(TEST_DIR)/realmode.$(exe) \ | |
| $(TEST_DIR)/la57.$(exe) | |
| realmode_bits := $(if $(call cc-option,-m16,""),16,32) | |
| endif | |
| tests-common += $(TEST_DIR)/hpet_read_test.$(exe) | |
| test_cases: $(tests-common) $(tests) | |
| $(TEST_DIR)/%.o: CFLAGS += -std=gnu99 -ffreestanding -I $(SRCDIR)/lib -I $(SRCDIR)/lib/x86 -I lib | |
| $(TEST_DIR)/realmode.elf: $(TEST_DIR)/realmode.o $(SRCDIR)/$(TEST_DIR)/realmode.lds | |
| $(LD) -m elf_i386 -nostdlib -o $@ \ | |
| -T $(SRCDIR)/$(TEST_DIR)/realmode.lds $(filter %.o, $^) | |
| $(TEST_DIR)/realmode.o: bits = $(realmode_bits) | |
| $(TEST_DIR)/access_test.$(bin): $(TEST_DIR)/access.o | |
| $(TEST_DIR)/vmx.$(bin): $(TEST_DIR)/access.o | |
| $(TEST_DIR)/svm_npt.$(bin): $(TEST_DIR)/svm.o | |
| $(TEST_DIR)/kvmclock_test.$(bin): $(TEST_DIR)/kvmclock.o | |
| $(TEST_DIR)/hyperv_synic.$(bin): $(TEST_DIR)/hyperv.o | |
| $(TEST_DIR)/hyperv_stimer.$(bin): $(TEST_DIR)/hyperv.o | |
| $(TEST_DIR)/hyperv_connections.$(bin): $(TEST_DIR)/hyperv.o | |
| arch_clean: | |
| $(RM) $(TEST_DIR)/*.o $(TEST_DIR)/*.flat $(TEST_DIR)/*.elf \ | |
| $(TEST_DIR)/.*.d lib/x86/.*.d \ | |
| $(TEST_DIR)/efi/*.o $(TEST_DIR)/efi/.*.d \ | |
| $(TEST_DIR)/*.so $(TEST_DIR)/*.efi $(TEST_DIR)/*.debug |