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