xref: /kvm-unit-tests/x86/Makefile.common (revision 7430e2c554924e8ddb6156161708fa402c478b6f)
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/pci-edu.o
7cflatobjs += lib/x86/setup.o
8cflatobjs += lib/x86/io.o
9cflatobjs += lib/x86/smp.o
10cflatobjs += lib/x86/vm.o
11cflatobjs += lib/x86/fwcfg.o
12cflatobjs += lib/x86/apic.o
13cflatobjs += lib/x86/atomic.o
14cflatobjs += lib/x86/desc.o
15cflatobjs += lib/x86/isr.o
16cflatobjs += lib/x86/acpi.o
17cflatobjs += lib/x86/stack.o
18
19$(libcflat): LDFLAGS += -nostdlib
20$(libcflat): CFLAGS += -ffreestanding -I lib
21
22CFLAGS += -m$(bits)
23CFLAGS += -O1
24
25# stack.o relies on frame pointers.
26KEEP_FRAME_POINTER := y
27
28libgcc := $(shell $(CC) -m$(bits) --print-libgcc-file-name)
29
30# We want to keep intermediate file: %.elf and %.o
31.PRECIOUS: %.elf %.o
32
33FLATLIBS = lib/libcflat.a $(libgcc)
34%.elf: %.o $(FLATLIBS) x86/flat.lds $(cstart.o)
35	$(CC) $(CFLAGS) -nostdlib -o $@ -Wl,-T,x86/flat.lds \
36		$(filter %.o, $^) $(FLATLIBS)
37
38%.flat: %.elf
39	$(OBJCOPY) -O elf32-i386 $^ $@
40
41tests-common = $(TEST_DIR)/vmexit.flat $(TEST_DIR)/tsc.flat \
42               $(TEST_DIR)/smptest.flat  $(TEST_DIR)/port80.flat \
43               $(TEST_DIR)/realmode.flat $(TEST_DIR)/msr.flat \
44               $(TEST_DIR)/hypercall.flat $(TEST_DIR)/sieve.flat \
45               $(TEST_DIR)/kvmclock_test.flat  $(TEST_DIR)/eventinj.flat \
46               $(TEST_DIR)/s3.flat $(TEST_DIR)/pmu.flat $(TEST_DIR)/setjmp.flat \
47               $(TEST_DIR)/tsc_adjust.flat $(TEST_DIR)/asyncpf.flat \
48               $(TEST_DIR)/init.flat $(TEST_DIR)/smap.flat \
49               $(TEST_DIR)/hyperv_synic.flat $(TEST_DIR)/hyperv_stimer.flat \
50
51ifdef API
52tests-common += api/api-sample
53tests-common += api/dirty-log
54tests-common += api/dirty-log-perf
55endif
56
57test_cases: $(tests-common) $(tests)
58
59$(TEST_DIR)/%.o: CFLAGS += -std=gnu99 -ffreestanding -I lib -I lib/x86
60
61$(TEST_DIR)/realmode.elf: $(TEST_DIR)/realmode.o
62	$(CC) -m32 -nostdlib -o $@ -Wl,-T,$(TEST_DIR)/realmode.lds $^
63
64$(TEST_DIR)/realmode.o: bits = 32
65
66$(TEST_DIR)/kvmclock_test.elf: $(TEST_DIR)/kvmclock.o
67
68$(TEST_DIR)/hyperv_synic.elf: $(TEST_DIR)/hyperv.o
69
70$(TEST_DIR)/hyperv_stimer.elf: $(TEST_DIR)/hyperv.o
71
72arch_clean:
73	$(RM) $(TEST_DIR)/*.o $(TEST_DIR)/*.flat $(TEST_DIR)/*.elf \
74	$(TEST_DIR)/.*.d lib/x86/.*.d
75
76api/%.o: CFLAGS += -m32
77
78api/%: LDLIBS += -lstdc++ -lboost_thread -lpthread -lrt
79api/%: LDFLAGS += -m32
80
81api/libapi.a: api/kvmxx.o api/identity.o api/exception.o api/memmap.o
82	$(AR) rcs $@ $^
83
84api/api-sample: api/api-sample.o api/libapi.a
85
86api/dirty-log: api/dirty-log.o api/libapi.a
87
88api/dirty-log-perf: api/dirty-log-perf.o api/libapi.a
89