1#This is a make file with common rules for both x86 & x86-64 2 3all: test_cases 4 5cflatobjs += lib/pci.o 6cflatobjs += lib/x86/io.o 7cflatobjs += lib/x86/smp.o 8cflatobjs += lib/x86/vm.o 9cflatobjs += lib/x86/fwcfg.o 10cflatobjs += lib/x86/apic.o 11cflatobjs += lib/x86/atomic.o 12cflatobjs += lib/x86/desc.o 13cflatobjs += lib/x86/isr.o 14cflatobjs += lib/x86/acpi.o 15cflatobjs += lib/x86/stack.o 16 17$(libcflat): LDFLAGS += -nostdlib 18$(libcflat): CFLAGS += -ffreestanding -I lib 19 20CFLAGS += -m$(bits) 21CFLAGS += -O1 22 23# stack.o relies on frame pointers. 24KEEP_FRAME_POINTER := y 25 26libgcc := $(shell $(CC) -m$(bits) --print-libgcc-file-name) 27 28FLATLIBS = lib/libcflat.a $(libgcc) 29%.elf: %.o $(FLATLIBS) x86/flat.lds 30 $(CC) $(CFLAGS) -nostdlib -o $@ -Wl,-T,x86/flat.lds \ 31 $(filter %.o, $^) $(FLATLIBS) 32 33%.flat: %.elf 34 $(OBJCOPY) -O elf32-i386 $^ $@ 35 36tests-common = $(TEST_DIR)/vmexit.flat $(TEST_DIR)/tsc.flat \ 37 $(TEST_DIR)/smptest.flat $(TEST_DIR)/port80.flat \ 38 $(TEST_DIR)/realmode.flat $(TEST_DIR)/msr.flat \ 39 $(TEST_DIR)/hypercall.flat $(TEST_DIR)/sieve.flat \ 40 $(TEST_DIR)/kvmclock_test.flat $(TEST_DIR)/eventinj.flat \ 41 $(TEST_DIR)/s3.flat $(TEST_DIR)/pmu.flat $(TEST_DIR)/setjmp.flat \ 42 $(TEST_DIR)/tsc_adjust.flat $(TEST_DIR)/asyncpf.flat \ 43 $(TEST_DIR)/init.flat $(TEST_DIR)/smap.flat \ 44 $(TEST_DIR)/hyperv_synic.flat $(TEST_DIR)/hyperv_stimer.flat \ 45 46ifdef API 47tests-common += api/api-sample 48tests-common += api/dirty-log 49tests-common += api/dirty-log-perf 50endif 51 52test_cases: $(tests-common) $(tests) 53 54$(TEST_DIR)/%.o: CFLAGS += -std=gnu99 -ffreestanding -I lib -I lib/x86 55 56$(TEST_DIR)/access.elf: $(cstart.o) $(TEST_DIR)/access.o 57 58$(TEST_DIR)/hypercall.elf: $(cstart.o) $(TEST_DIR)/hypercall.o 59 60$(TEST_DIR)/sieve.elf: $(cstart.o) $(TEST_DIR)/sieve.o 61 62$(TEST_DIR)/vmexit.elf: $(cstart.o) $(TEST_DIR)/vmexit.o 63 64$(TEST_DIR)/smptest.elf: $(cstart.o) $(TEST_DIR)/smptest.o 65 66$(TEST_DIR)/emulator.elf: $(cstart.o) $(TEST_DIR)/emulator.o 67 68$(TEST_DIR)/port80.elf: $(cstart.o) $(TEST_DIR)/port80.o 69 70$(TEST_DIR)/tsc.elf: $(cstart.o) $(TEST_DIR)/tsc.o 71 72$(TEST_DIR)/tsc_adjust.elf: $(cstart.o) $(TEST_DIR)/tsc_adjust.o 73 74$(TEST_DIR)/apic.elf: $(cstart.o) $(TEST_DIR)/apic.o 75 76$(TEST_DIR)/ioapic.elf: $(cstart.o) $(TEST_DIR)/ioapic.o 77 78$(TEST_DIR)/tscdeadline_latency.elf: $(cstart.o) $(TEST_DIR)/tscdeadline_latency.o 79 80$(TEST_DIR)/init.elf: $(cstart.o) $(TEST_DIR)/init.o 81 82$(TEST_DIR)/realmode.elf: $(TEST_DIR)/realmode.o 83 $(CC) -m32 -nostdlib -o $@ -Wl,-T,$(TEST_DIR)/realmode.lds $^ 84 85$(TEST_DIR)/realmode.o: bits = 32 86 87$(TEST_DIR)/msr.elf: $(cstart.o) $(TEST_DIR)/msr.o 88 89$(TEST_DIR)/idt_test.elf: $(cstart.o) $(TEST_DIR)/idt_test.o 90 91$(TEST_DIR)/xsave.elf: $(cstart.o) $(TEST_DIR)/xsave.o 92 93$(TEST_DIR)/rmap_chain.elf: $(cstart.o) $(TEST_DIR)/rmap_chain.o 94 95$(TEST_DIR)/svm.elf: $(cstart.o) $(TEST_DIR)/svm.o 96 97$(TEST_DIR)/kvmclock_test.elf: $(cstart.o) $(TEST_DIR)/kvmclock.o \ 98 $(TEST_DIR)/kvmclock_test.o 99 100$(TEST_DIR)/eventinj.elf: $(cstart.o) $(TEST_DIR)/eventinj.o 101 102$(TEST_DIR)/s3.elf: $(cstart.o) $(TEST_DIR)/s3.o 103 104$(TEST_DIR)/pmu.elf: $(cstart.o) $(TEST_DIR)/pmu.o 105 106$(TEST_DIR)/asyncpf.elf: $(cstart.o) $(TEST_DIR)/asyncpf.o 107 108$(TEST_DIR)/pcid.elf: $(cstart.o) $(TEST_DIR)/pcid.o 109 110$(TEST_DIR)/smap.elf: $(cstart.o) $(TEST_DIR)/smap.o 111 112$(TEST_DIR)/pku.elf: $(cstart.o) $(TEST_DIR)/pku.o 113 114$(TEST_DIR)/vmx.elf: $(cstart.o) $(TEST_DIR)/vmx.o $(TEST_DIR)/vmx_tests.o 115 116$(TEST_DIR)/debug.elf: $(cstart.o) $(TEST_DIR)/debug.o 117 118$(TEST_DIR)/memory.elf: $(cstart.o) $(TEST_DIR)/memory.o 119 120$(TEST_DIR)/hyperv_synic.elf: $(cstart.o) $(TEST_DIR)/hyperv.o \ 121 $(TEST_DIR)/hyperv_synic.o 122 123$(TEST_DIR)/hyperv_stimer.elf: $(cstart.o) $(TEST_DIR)/hyperv.o \ 124 $(TEST_DIR)/hyperv_stimer.o 125 126$(TEST_DIR)/setjmp.elf: $(cstart.o) $(TEST_DIR)/setjmp.o 127 128arch_clean: 129 $(RM) $(TEST_DIR)/*.o $(TEST_DIR)/*.flat $(TEST_DIR)/*.elf \ 130 $(TEST_DIR)/.*.d lib/x86/.*.d 131 132api/%.o: CFLAGS += -m32 133 134api/%: LDLIBS += -lstdc++ -lboost_thread -lpthread -lrt 135api/%: LDFLAGS += -m32 136 137api/libapi.a: api/kvmxx.o api/identity.o api/exception.o api/memmap.o 138 $(AR) rcs $@ $^ 139 140api/api-sample: api/api-sample.o api/libapi.a 141 142api/dirty-log: api/dirty-log.o api/libapi.a 143 144api/dirty-log-perf: api/dirty-log-perf.o api/libapi.a 145