Skip to content

Commit

Permalink
Merge pull request torvalds#400 from tavip/lkl-tapify
Browse files Browse the repository at this point in the history
test runner rework
  • Loading branch information
thehajime authored Dec 28, 2017
2 parents baf9c8c + e07ec2c commit 5058cad
Show file tree
Hide file tree
Showing 38 changed files with 2,959 additions and 1,773 deletions.
44 changes: 26 additions & 18 deletions .circleci/config.yml
Original file line number Diff line number Diff line change
Expand Up @@ -25,7 +25,12 @@ do_steps: &do_steps
key: code-tree-shallow-{{ epoch }}
paths:
- /home/ubuntu/project/.git
- run: cd tools/lkl && make clean
- run:
name: clean
command: |
make mrproper
cd tools/lkl && make clean-conf
rm -rf ~/junit
- run: mkdir -p /home/ubuntu/.ccache
- restore_cache:
key: compiler-cache-{{ checksum "~/_cross_compile" }}
Expand Down Expand Up @@ -60,14 +65,12 @@ do_steps: &do_steps
if [[ $CROSS_COMPILE == *android* ]]; then
/home/ubuntu/circle-android.sh wait-for-boot;
fi
- run: cd tools/lkl && make test
- run: if [ $VALGRIND = 1]; then cd tools/lkl && make valgrind; fi
- run:
name: save test results
name: run tests
command: |
mkdir -p ~/junit/
find ./tools/lkl/ -type f -name "*.xml" -exec cp {} ~/junit/ \;
when: always
mkdir -p ~/junit
make -C tools/lkl run-tests tests="--junit-dir ~/junit"
find ./tools/lkl/ -type f -name "*.xml" -exec mv {} ~/junit/ \;
- store_test_results:
path: ~/junit
- store_artifacts:
Expand All @@ -77,54 +80,49 @@ do_steps: &do_steps
jobs:
x86_64:
docker:
- image: lkldocker/circleci-x86_64:0.1
- image: lkldocker/circleci-x86_64:0.3
environment:
CROSS_COMPILE: ""
MKARG: "dpdk=yes"
LKL_TEST_DHCP: 1
<<: *do_steps

mingw32:
docker:
- image: lkldocker/circleci-mingw:0.1
- image: lkldocker/circleci-mingw:0.3
environment:
CROSS_COMPILE: "i686-w64-mingw32-"
LKL_TEST_DHCP: 1
<<: *do_steps

android-arm32:
docker:
- image: lkldocker/circleci-android-arm32:0.1
- image: lkldocker/circleci-android-arm32:0.3
environment:
CROSS_COMPILE: "arm-linux-androideabi-"
LKL_TEST_DHCP: 1
LKL_ANDROID_TEST: 1
ANDROID_SDK_ROOT: /home/ubuntu/android-sdk
<<: *do_steps

android-aarch64:
docker:
- image: lkldocker/circleci-android-arm64:0.1
- image: lkldocker/circleci-android-arm64:0.3
environment:
CROSS_COMPILE: "aarch64-linux-android-"
LKL_TEST_DHCP: 1
LKL_ANDROID_TEST: 1
ANDROID_SDK_ROOT: /home/ubuntu/android-sdk
<<: *do_steps

x86_64_valgrind:
docker:
- image: lkldocker/circleci-x86_64:0.1
- image: lkldocker/circleci-x86_64:0.3
environment:
CROSS_COMPILE: ""
MKARG: "dpdk=yes"
LKL_TEST_DHCP: 1
VALGRIND: 1
<<: *do_steps

checkpatch:
docker:
- image: lkldocker/circleci:0.1
- image: lkldocker/circleci:0.3
environment:
steps:
- restore_cache:
Expand All @@ -146,3 +144,13 @@ workflows:
- android-arm32
- android-aarch64
- checkpatch
nightly:
triggers:
- schedule:
cron: "0 0 * * *"
filters:
branches:
only:
- master
jobs:
- x86_64_valgrind
3 changes: 3 additions & 0 deletions arch/lkl/include/uapi/asm/syscalls.h
Original file line number Diff line number Diff line change
Expand Up @@ -92,6 +92,8 @@ typedef __s64 s64;
#include <asm/siginfo.h>
#include <linux/utime.h>
#include <asm/socket.h>
#include <linux/icmp.h>
#include <linux/ip.h>

/* Define data structures used in system calls that are not defined in UAPI
* headers */
Expand Down Expand Up @@ -225,6 +227,7 @@ typedef __kernel_rwf_t rwf_t;
#define SOCK_PACKET 10

#define MSG_TRUNC 0x20
#define MSG_DONTWAIT 0x40

/* avoid colision with system headers defines */
#define sa_handler sa_handler
Expand Down
5 changes: 5 additions & 0 deletions tools/lkl/.gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -7,3 +7,8 @@ tests/valgrind*.xml
*.exe
*.dll
tests/net-test
tests/disk
Makefile.conf
include/autoconf.h
tests/autoconf.sh
*.pyc
6 changes: 3 additions & 3 deletions tools/lkl/Build
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
CFLAGS_lklfuse.o += -D_FILE_OFFSET_BITS=64

cptofs-y += cptofs.o
fs2tar-y += fs2tar.o
lklfuse-y += lklfuse.o
cptofs-$(LKL_HOST_CONFIG_ARCHIVE) += cptofs.o
fs2tar-$(LKL_HOST_CONFIG_ARCHIVE) += fs2tar.o
lklfuse-$(LKL_HOST_CONFIG_FUSE) += lklfuse.o

202 changes: 52 additions & 150 deletions tools/lkl/Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -2,192 +2,89 @@
# (this improves performance and avoids hard-to-debug behaviour);
# also do not print "Entering directory..." messages from make
.SUFFIXES:
MAKEFLAGS += -r --no-print-directory
MAKEFLAGS += -r --no-print-directory

ifeq ($(V),1)
Q =
else
Q = @
endif

# default target
all:

-include ../scripts/Makefile.include

# By default we want to use gcc (as does Linux), especially as the clang
# cross toolchain does not use prefixed names
CC := $(CROSS_COMPILE)gcc
LD := $(CROSS_COMPILE)$(LD)
AR := $(CROSS_COMPILE)$(AR)
export CC LD AR

EXESUF :=
SOSUF := .so

PREFIX := /usr

ifeq (,$(srctree))
srctree := $(patsubst %/,%,$(dir $(shell pwd)))
srctree := $(patsubst %/,%,$(dir $(srctree)))
endif
export srctree


# Target build configuration

export CFLAGS += -I$(OUTPUT)/include -Iinclude -Wall -g -O2 -Wextra \
-Wno-unused-parameter \
-Wno-missing-field-initializers -fno-strict-aliasing
LDFLAGS += -pie

OUTPUT_FORMAT = $(shell $(LD) -r -print-output-format)

ifneq (,$(filter $(OUTPUT_FORMAT),elf64-x86-64 elf32-i386 elf64-x86-64-freebsd elf32-littlearm elf64-littleaarch64))
OUTPUT_DEF = $(shell echo | $(CC) -dM -E -)
CFLAGS += -fPIC -pthread
ifeq (,$(filter $(OUTPUT_DEF),__ANDROID__))
LDLIBS += -lrt -lpthread
endif
export CONFIG_AUTO_LKL_POSIX_HOST=y
CFLAGS += -DCONFIG_AUTO_LKL_POSIX_HOST

# Intel DPDK configuration
ifeq ($(dpdk),yes)
export CONFIG_AUTO_LKL_VIRTIO_NET_DPDK=y
RTE_SDK ?= $(shell pwd)/dpdk-17.02
RTE_TARGET ?= build
DPDK_LIBS = -lrte_pmd_vmxnet3_uio -lrte_pmd_ixgbe -lrte_pmd_e1000
DPDK_LIBS += -lrte_pmd_virtio
DPDK_LIBS += -lrte_timer -lrte_hash -lrte_mbuf -lrte_ethdev -lrte_eal
DPDK_LIBS += -lrte_mempool -lrte_ring -lrte_pmd_ring
DPDK_LIBS += -lrte_kvargs -lrte_net
CFLAGS += -I$(RTE_SDK)/$(RTE_TARGET)/include -msse4.2 -mpopcnt
CFLAGS += -DCONFIG_AUTO_LKL_VIRTIO_NET_DPDK
LDFLAGS +=-L$(RTE_SDK)/$(RTE_TARGET)/lib
LDFLAGS +=-Wl,--whole-archive $(DPDK_LIBS) -Wl,--no-whole-archive -lm -ldl
endif
# Virtual Distributed Ethernet configuration
ifeq ($(vde),yes)
export CONFIG_AUTO_LKL_VIRTIO_NET_VDE=y
CFLAGS += -DCONFIG_AUTO_LKL_VIRTIO_NET_VDE
LDLIBS += $(shell pkg-config --libs vdeplug)
endif
else ifneq (,$(filter $(OUTPUT_FORMAT),pe-i386 pe-x86-64 ))
KOPT = "KALLSYMS_EXTRA_PASS=1"
LDLIBS += -lws2_32
EXESUF := .exe
SOSUF := .dll
export CONFIG_AUTO_LKL_NT_HOST=y
CFLAGS += -DCONFIG_AUTO_LKL_NT_HOST -Iinclude/mingw32
ifneq (,$(filter $(OUTPUT_FORMAT),pe-x86-64))
CFLAGS += -Wl,--enable-auto-image-base -Wl,--image-base -Wl,0x10000000 -Wl,--out-implib=$(OUTPUT)liblkl.dll.a -Wl,--export-all-symbols -Wl,--enable-auto-import
LDFLAGS +=-Wl,--image-base -Wl,0x10000000 -Wl,--enable-auto-image-base -Wl,--out-implib=$(OUTPUT)liblkl.dll.a -Wl,--export-all-symbols -Wl,--enable-auto-import
ifneq ($(silent),1)
ifneq ($(V),1)
QUIET_AUTOCONF = @echo ' AUTOCONF '$@;
Q = @
endif
else
$(error Unrecognized platform: $(OUTPUT_FORMAT))
endif

ifneq ($(OUTPUT),)
OUTPUT := $(OUTPUT)/tools/lkl/
OUTPUT := $(OUTPUT)/tools/lkl/
else
OUTPUT := $(CURDIR)/
OUTPUT := $(CURDIR)/
endif
export OUTPUT

ifneq (,$(filter $(OUTPUT_FORMAT),pe-i386 pe-x86-64 ))
ALL_PROGRAMS :=
ALL_LIBRARIES := $(OUTPUT)liblkl.a $(OUTPUT)liblkl$(SOSUF)
else
ALL_PROGRAMS := $(OUTPUT)lklfuse$(EXESUF) $(OUTPUT)cptofs$(EXESUF) $(OUTPUT)cpfromfs$(EXESUF) $(OUTPUT)fs2tar$(EXESUF)
ALL_LIBRARIES := $(OUTPUT)liblkl.a $(OUTPUT)liblkl$(SOSUF) $(OUTPUT)liblkl-hijack$(SOSUF)
endif

static: $(OUTPUT)liblkl.a
shared: $(OUTPUT)liblkl$(SOSUF)
hijack: $(OUTPUT)liblkl-hijack$(SOSUF)

$(OUTPUT)liblkl$(SOSUF): $(OUTPUT)lib/lkl-in.o $(OUTPUT)lib/lkl.o
$(OUTPUT)liblkl$(SOSUF): LDFLAGS += -shared
PREFIX := /usr

$(OUTPUT)liblkl-hijack$(SOSUF): $(OUTPUT)lib/hijack/hijack-in.o $(OUTPUT)liblkl.a
$(OUTPUT)liblkl-hijack$(SOSUF): LDFLAGS += -shared -nodefaultlibs
$(OUTPUT)liblkl-hijack$(SOSUF): LDLIBS += -ldl
ifneq (,$(filter $(OUTPUT_DEF),__ANDROID__))
$(OUTPUT)liblkl-hijack$(SOSUF): LDLIBS += -lgcc -lc
ifeq (,$(srctree))
srctree := $(patsubst %/,%,$(dir $(shell pwd)))
srctree := $(patsubst %/,%,$(dir $(srctree)))
endif
export srctree

$(OUTPUT)lklfuse$(EXESUF): $(OUTPUT)lklfuse-in.o $(OUTPUT)liblkl.a
$(OUTPUT)lklfuse$(EXESUF): LDLIBS += -lfuse
-include ../scripts/Makefile.include

$(OUTPUT)fs2tar$(EXESUF): $(OUTPUT)fs2tar-in.o $(OUTPUT)liblkl.a
$(OUTPUT)fs2tar$(EXESUF): LDLIBS += -larchive
ifneq (,$(filter $(OUTPUT_FORMAT),elf64-x86-64-freebsd pe-x86-64))
$(OUTPUT)fs2tar$(EXESUF): LDLIBS += -largp
endif
all:

$(OUTPUT)cptofs$(EXESUF): $(OUTPUT)cptofs-in.o $(OUTPUT)liblkl.a
ifneq (,$(filter $(OUTPUT_FORMAT),elf64-x86-64-freebsd))
$(OUTPUT)cptofs$(EXESUF): LDLIBS += -largp
endif
conf: $(OUTPUT)Makefile.conf

$(OUTPUT)Makefile.conf: Makefile.autoconf
$(call QUIET_AUTOCONF, headers)$(MAKE) -f Makefile.autoconf -s

TEST_TARGETS := test valgrind gdb
-include $(OUTPUT)Makefile.conf

$(OUTPUT)tests/boot: $(OUTPUT)tests/boot-in.o $(OUTPUT)liblkl.a
ifneq (,$(filter $(OUTPUT_DEF),__ANDROID__))
$(OUTPUT)tests/boot: LDLIBS += -lc
endif
$(OUTPUT)tests/net-test: $(OUTPUT)tests/net-test-in.o $(OUTPUT)liblkl.a
$(TEST_TARGETS): $(OUTPUT)tests/boot $(OUTPUT)tests/net-test
export CFLAGS += -I$(OUTPUT)/include -Iinclude -Wall -g -O2 -Wextra \
-Wno-unused-parameter \
-Wno-missing-field-initializers -fno-strict-aliasing

# because of libdl, liblkl-hijack will not compile on windows
# fortunately, the test target will handle a missing libhijack.so correctly
ifeq (,$(filter $(OUTPUT_FORMAT),pe-i386))
test: liblkl-hijack$(SOSUF)
endif
-include Targets

$(OUTPUT)%-in.o: $(OUTPUT)lib/lkl.o FORCE
$(Q)$(MAKE) -f $(srctree)/tools/build/Makefile.build dir=$(patsubst %/,%,$(dir $*)) obj=$(notdir $*)
TARGETS := $(progs-y:%=$(OUTPUT)%$(EXESUF))
TARGETS += $(libs-y:%=$(OUTPUT)%$(SOSUF))
all: $(TARGETS)

# rule to build lkl.o
$(OUTPUT)lib/lkl.o:
$(Q)$(MAKE) -C ../.. ARCH=lkl $(KOPT) defconfig
# this workaround is for arm32 linker (ld.gold)
$(Q)export PATH=$(srctree)/tools/lkl/bin/:${PATH} ;\
$(MAKE) -C ../.. ARCH=lkl $(KOPT) install INSTALL_PATH=$(OUTPUT)

$(OUTPUT)liblkl.a: $(OUTPUT)lib/lkl-in.o $(OUTPUT)lib/lkl.o
# rules to link libs
$(OUTPUT)%$(SOSUF): LDFLAGS += -shared
$(OUTPUT)%$(SOSUF): $(OUTPUT)%-in.o $(OUTPUT)liblkl.a
$(QUIET_LINK)$(CC) $(LDFLAGS) $(LDFLAGS_$*-y) -o $@ $^ $(LDLIBS) $(LDLIBS_$*-y)

# liblkl is special
$(OUTPUT)liblkl$(SOSUF): $(OUTPUT)%-in.o $(OUTPUT)lib/lkl.o
$(OUTPUT)liblkl.a: $(OUTPUT)lib/liblkl-in.o $(OUTPUT)lib/lkl.o
$(QUIET_AR)$(AR) -rc $@ $^

$(OUTPUT)liblkl$(SOSUF) $(OUTPUT)liblkl-hijack$(SOSUF) $(OUTPUT)lklfuse$(EXESUF) $(OUTPUT)fs2tar$(EXESUF) $(OUTPUT)cptofs$(EXESUF) $(OUTPUT)tests/boot $(OUTPUT)tests/net-test:
$(QUIET_LINK)$(CC) $(LDFLAGS) -o $@ $^ $(LDLIBS)
# rule to link programs
$(OUTPUT)%$(EXESUF): $(OUTPUT)%-in.o $(OUTPUT)liblkl.a
$(QUIET_LINK)$(CC) $(LDFLAGS) $(LDFLAGS_$*-y) -o $@ $^ $(LDLIBS) $(LDLIBS_$*-y)

# rule to build objects
$(OUTPUT)%-in.o: $(OUTPUT)lib/lkl.o FORCE
$(Q)$(MAKE) -f $(srctree)/tools/build/Makefile.build dir=$(patsubst %/,%,$(dir $*)) obj=$(notdir $*)


$(OUTPUT)cpfromfs$(EXESUF): cptofs$(EXESUF)
$(Q)if ! [ -e $@ ]; then ln -s $< $@; fi

# because of argp and fuse, none of the binaries will compile on windows
# because of libdl, liblkl-hijack will not compile on windows
# arm-android neither for the moment
ifneq (,$(filter $(OUTPUT_FORMAT),pe-i386))
all: $(filter-out $(OUTPUT)liblkl-hijack$(SOSUF), $(ALL_LIBRARIES))
else ifneq (,$(filter $(OUTPUT_DEF),__ANDROID__))
all: $(ALL_LIBRARIES)
else
all: $(ALL_PROGRAMS) $(ALL_LIBRARIES)
endif

clean:
$(call QUIET_CLEAN, objects)find $(OUTPUT) -name '*.o' -delete -o -name '\.*.cmd'\
-delete -o -name '\.*.d' -delete
$(call QUIET_CLEAN, headers)$(RM) -r $(OUTPUT)/include/lkl/
$(call QUIET_CLEAN, "host libraries")$(RM) $(OUTPUT)/liblkl.a liblkl$(SOSUF)
$(call QUIET_CLEAN, "hijack library")$(RM) $(OUTPUT)/liblkl-hijack$(SOSUF)
$(call QUIET_CLEAN, programs)$(RM) $(ALL_PROGRAMS)
$(call QUIET_CLEAN, tests)$(RM) tests/boot tests/net-test

$(TEST_TARGETS):
$(MAKE) -C tests $@
$(call QUIET_CLEAN, liblkl.a)$(RM) $(OUTPUT)/liblkl.a
$(call QUIET_CLEAN, targets)$(RM) $(TARGETS)

clean-conf: clean
$(call QUIET_CLEAN, Makefile.conf)$(RM) $(OUTPUT)/Makefile.conf

headers_install:
$(call QUIET_INSTALL, headers) \
Expand All @@ -208,7 +105,12 @@ programs_install: $(ALL_PROGRAMS)
install: headers_install libraries_install programs_install


run-tests:
./tests/run.py $(tests)

FORCE: ;
.PHONY: all clean $(TEST_TARGETS) FORCE
.PHONY: all clean FORCE run-tests
.PHONY: headers_install libraries_install programs_install install
.NOTPARALLEL : lib/lkl.o
.SECONDARY:

Loading

0 comments on commit 5058cad

Please sign in to comment.