40d6ee9450
This introduces the build framework for simple i386 system tests. The first test is the eponymous "Hello World" which simply outputs the text on the serial port and then exits. I've included the framework for x86_64 but it is not in this series as it is a work in progress. Signed-off-by: Alex Bennée <alex.bennee@linaro.org>
47 lines
1.3 KiB
Makefile
47 lines
1.3 KiB
Makefile
#
|
|
# x86 system tests
|
|
#
|
|
# This currently builds only for i386. The common C code is built
|
|
# with standard compiler flags however so we can support both by
|
|
# adding additional boot files for x86_64.
|
|
#
|
|
|
|
I386_SYSTEM_SRC=$(SRC_PATH)/tests/tcg/i386/system
|
|
X64_SYSTEM_SRC=$(SRC_PATH)/tests/tcg/x86_64/system
|
|
# Set search path for all sources
|
|
VPATH+=$(I386_SYSTEM_SRC)
|
|
|
|
# These objects provide the basic boot code and helper functions for all tests
|
|
CRT_OBJS=boot.o
|
|
|
|
X86_TEST_SRCS=$(wildcard $(I386_SYSTEM_SRC)/*.c)
|
|
X86_TESTS = $(patsubst $(I386_SYSTEM_SRC)/%.c, %, $(X86_TEST_SRCS))
|
|
|
|
ifeq ($(TARGET_X86_64), y)
|
|
CRT_PATH=$(X64_SYSTEM_SRC)
|
|
LINK_SCRIPT=$(X64_SYSTEM_SRC)/kernel.ld
|
|
LDFLAGS=-Wl,-T$(LINK_SCRIPT) -Wl,-melf_x86_64
|
|
else
|
|
CRT_PATH=$(I386_SYSTEM_SRC)
|
|
CFLAGS+=-m32
|
|
LINK_SCRIPT=$(I386_SYSTEM_SRC)/kernel.ld
|
|
LDFLAGS=-Wl,-T$(LINK_SCRIPT) -Wl,-melf_i386
|
|
# FIXME: move to common once x86_64 is bootstrapped
|
|
TESTS+=$(X86_TESTS)
|
|
endif
|
|
CFLAGS+=-nostdlib -ggdb -O0 $(MINILIB_INC)
|
|
LDFLAGS+=-static -nostdlib $(CRT_OBJS) $(MINILIB_OBJS) -lgcc
|
|
|
|
# building head blobs
|
|
.PRECIOUS: $(CRT_OBJS)
|
|
|
|
%.o: $(CRT_PATH)/%.S
|
|
$(CC) $(CFLAGS) -c $< -o $@
|
|
|
|
# Build and link the tests
|
|
%: %.c $(LINK_SCRIPT) $(CRT_OBJS) $(MINILIB_OBJS)
|
|
$(CC) $(CFLAGS) $< -o $@ $(LDFLAGS)
|
|
|
|
# Running
|
|
QEMU_OPTS+=-device isa-debugcon,chardev=output -device isa-debug-exit,iobase=0xf4,iosize=0x4 -kernel
|