From patchwork Fri May 25 14:19:11 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: =?utf-8?q?Alex_Benn=C3=A9e?= X-Patchwork-Id: 136937 Delivered-To: patch@linaro.org Received: by 2002:a2e:9706:0:0:0:0:0 with SMTP id r6-v6csp3682753lji; Fri, 25 May 2018 07:45:45 -0700 (PDT) X-Google-Smtp-Source: ADUXVKKYG0UrTB/eiLmdGcj0hqC+stFt4VYISxKNppWRXUj82ljmyxbDzeVeg3XbEggBxkFEBdy5 X-Received: by 2002:ac8:2c37:: with SMTP id d52-v6mr2482903qta.108.1527259545312; Fri, 25 May 2018 07:45:45 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1527259545; cv=none; d=google.com; s=arc-20160816; b=RJNgpa1Dv75y/6m1kT8od2U7QsdoGFB2Cs2FieJn32Nz2nS6TDLLLs2KOlFOsnHw0w RumcKG6AiTJubuwv6l5+DKRSoz9eUinJgj43gFh7hsn79wtwwEFzkYFkQgYUo1Nv7k8m RI7VT29qaeMjGzu+OpdKcniZ1AaXXnMxycsaPSNAY0V8QkFaHZJASSS134Yu4NM3oda6 9ynb0ucBKwGCzLg9yHtbKQe9KoV16GURepxEjUtXhnRRRzY8inCedGB3GWZgRqC72oU6 hwu19SJiU5afYzEMDzACqciXnYpRmqN54xs4ilJ0S9oW6oaj9mxhzIMTjNQlxGLP+PZ8 lDmg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=sender:errors-to:cc:list-subscribe:list-help:list-post:list-archive :list-unsubscribe:list-id:precedence:subject :content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:to:from:dkim-signature:arc-authentication-results; bh=/QDMbm1GQzLUH3tr3cBNp0UqMJN8CGOeovBcQqe02kE=; b=j3bi6xg2KYzydon23ln+jBlWq0fLxgQva7bPxzrnUsJ3ghCjdyToIBzkNsIMS/FYO9 ZLR21bBFaCuBwVaRBkxfez3YgeKGLXW+xIhU0PiUJan40gP6HS2Zv+UwQfS+8lWETQ1o MtbGP10ogDz/DEaJeA/MAU5cAOai9hGX88ERnfh98xas65oOj5s1kJn6Yf6O7TQdzjOx dDs7lGtxLfXx2ogdB8bCJMHjA0KNuP7mF9l/lNo3k6l5quIHhgZG3UMtglQfXB1l0kg5 KQ/OiMpKDks/KriPuky2g7N4FnDFqa7TsqaPgld7J0aoegLK6ACOOL2OQDZww3C0ouaH N9dA== ARC-Authentication-Results: i=1; mx.google.com; dkim=fail header.i=@linaro.org header.s=google header.b=DfHf1BIk; spf=pass (google.com: domain of qemu-devel-bounces+patch=linaro.org@nongnu.org designates 2001:4830:134:3::11 as permitted sender) smtp.mailfrom=qemu-devel-bounces+patch=linaro.org@nongnu.org; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=linaro.org Return-Path: Received: from lists.gnu.org (lists.gnu.org. [2001:4830:134:3::11]) by mx.google.com with ESMTPS id o25-v6si3627944qve.58.2018.05.25.07.45.45 for (version=TLS1 cipher=AES128-SHA bits=128/128); Fri, 25 May 2018 07:45:45 -0700 (PDT) Received-SPF: pass (google.com: domain of qemu-devel-bounces+patch=linaro.org@nongnu.org designates 2001:4830:134:3::11 as permitted sender) client-ip=2001:4830:134:3::11; Authentication-Results: mx.google.com; dkim=fail header.i=@linaro.org header.s=google header.b=DfHf1BIk; spf=pass (google.com: domain of qemu-devel-bounces+patch=linaro.org@nongnu.org designates 2001:4830:134:3::11 as permitted sender) smtp.mailfrom=qemu-devel-bounces+patch=linaro.org@nongnu.org; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=linaro.org Received: from localhost ([::1]:44456 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1fMDyS-00057h-Rj for patch@linaro.org; Fri, 25 May 2018 10:45:44 -0400 Received: from eggs.gnu.org ([2001:4830:134:3::10]:45466) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1fMDeJ-0005jm-BH for qemu-devel@nongnu.org; Fri, 25 May 2018 10:25:00 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1fMDeF-0003sL-Ki for qemu-devel@nongnu.org; Fri, 25 May 2018 10:24:55 -0400 Received: from mail-wr0-x244.google.com ([2a00:1450:400c:c0c::244]:39140) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1fMDeF-0003ru-Bh for qemu-devel@nongnu.org; Fri, 25 May 2018 10:24:51 -0400 Received: by mail-wr0-x244.google.com with SMTP id w18-v6so9584740wrn.6 for ; Fri, 25 May 2018 07:24:51 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=/QDMbm1GQzLUH3tr3cBNp0UqMJN8CGOeovBcQqe02kE=; b=DfHf1BIkOWVEfAEM2ZOo+ChcJ2KjXH7dXy/Y8yCIwDF5i7emySXfEtWahgOxkUGJzP 86X6cmb3YmyspFL4SStsXWdJV93//HVXKzq12GbaExlv+AMRBmxK+ZpGlW0j6Yts3QOg JXzlPUEPBNABKm5yghRSgCJ7zNyilBYaCboTM= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=/QDMbm1GQzLUH3tr3cBNp0UqMJN8CGOeovBcQqe02kE=; b=mjuk1Imvmm2jtHtw87Hsl4eVU1viEwojZjPTycvZkWQQB5xnjBRT0NJQOqTHBlcTxW JsDEI192pYSBEdBKf/DbSIeS2EKNAHSkw4mcpqgd+hlLwstgC+I0vlIqJ2Y5jN172nA3 axQphkeY7SXEte5YOqHcTgztNRYJBvOgOuHtNDy/MpGYF/DgDMcsqwY4uk2g9r5r0rl7 ooC9pnwyyUMGN1oNFxQocppAFwsUOiL9WHv1sjbzaIkVp/m5jeFswKcAIsyuk6OaXikm ev8jp6VumNFlsOnrhPQNQR/VUk6R/tRaAhb8NoHk9ogXOagXQ/ANdNQFYos/NGIO5+rq OXNw== X-Gm-Message-State: ALKqPwdziJjqcSMoLXY4935KnRG4ph0SUi9ThKF/SvePo+NL3HpPLfyE o7XYo3FClhUKuyTlK5RIi17mQA== X-Received: by 2002:adf:86ac:: with SMTP id 41-v6mr2269073wrx.260.1527258290159; Fri, 25 May 2018 07:24:50 -0700 (PDT) Received: from zen.linaro.local ([81.128.185.34]) by smtp.gmail.com with ESMTPSA id u8-v6sm6227431wmc.40.2018.05.25.07.24.48 (version=TLS1_2 cipher=ECDHE-RSA-CHACHA20-POLY1305 bits=256/256); Fri, 25 May 2018 07:24:49 -0700 (PDT) Received: from zen.linaroharston (localhost [127.0.0.1]) by zen.linaro.local (Postfix) with ESMTP id A599E3E08BF; Fri, 25 May 2018 15:19:15 +0100 (BST) From: =?utf-8?q?Alex_Benn=C3=A9e?= To: cota@braap.org, famz@redhat.com, berrange@redhat.com, f4bug@amsat.org, richard.henderson@linaro.org, balrogg@gmail.com, aurelien@aurel32.net, agraf@suse.de Date: Fri, 25 May 2018 15:19:11 +0100 Message-Id: <20180525141915.6497-6-alex.bennee@linaro.org> X-Mailer: git-send-email 2.17.0 In-Reply-To: <20180525141915.6497-1-alex.bennee@linaro.org> References: <20180525133851.27161-1-alex.bennee@linaro.org> <20180525141915.6497-1-alex.bennee@linaro.org> MIME-Version: 1.0 X-detected-operating-system: by eggs.gnu.org: Genre and OS details not recognized. X-Received-From: 2a00:1450:400c:c0c::244 Subject: [Qemu-devel] [PATCH v5 45/49] tests/tcg/Makefile: update to be called from Makefile.target X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.21 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: =?utf-8?q?Alex_Benn=C3=A9e?= , qemu-devel@nongnu.org Errors-To: qemu-devel-bounces+patch=linaro.org@nongnu.org Sender: "Qemu-devel" This make is now invoked from each individual target make with the appropriate CC and EXTRA_CFLAGS set for each guest. It then includes additional Makefile.targets from: - tests/tcg/multiarch (always) - tests/tcg/$(TARGET_BASE_ARCH) (if available) - tests/tcg/$(TARGET_NAME) The order is important as the later Makefile's may want to suppress TESTS from its base arch profile. Each included Makefile.target is responsible for adding TESTS as well as defining any special build instructions for individual tests. Signed-off-by: Alex Bennée Reviewed-by: Richard Henderson Reviewed-by: Philippe Mathieu-Daudé Tested-by: Philippe Mathieu-Daudé --- v2 - cleaner approach to include sub makefiles - move TESTS/VPATH manipulation into sub-makefile - avoid double inclusion when TARGET_BASE_ARCH==TARGET_NAME v4 - add timeout to default runner - clean-up comments about build flags - update to handle BUILD_STATIC - add MAINTAINERS entry v5 - support EXTRA_RUNS for run variants --- MAINTAINERS | 5 ++ tests/tcg/Makefile | 179 ++++++++++++++++++--------------------------- 2 files changed, 76 insertions(+), 108 deletions(-) -- 2.17.0 diff --git a/MAINTAINERS b/MAINTAINERS index ec385a15df..bfa8d0fb9c 100644 --- a/MAINTAINERS +++ b/MAINTAINERS @@ -2138,6 +2138,11 @@ W: https://travis-ci.org/qemu/qemu W: https://app.shippable.com/github/qemu/qemu W: http://patchew.org/QEMU/ +Guest Test Compilation Support +M: Alex Bennée +F: tests/tcg/Makefile +L: qemu-devel@nongnu.org + Documentation ------------- Build system architecture diff --git a/tests/tcg/Makefile b/tests/tcg/Makefile index e12395117a..8158c1f099 100644 --- a/tests/tcg/Makefile +++ b/tests/tcg/Makefile @@ -1,125 +1,88 @@ +# -*- Mode: makefile -*- +# +# TCG tests +# +# These are complicated by the fact we want to build them for guest +# systems. This requires knowing what guests we are building and which +# ones we have cross-compilers for or docker images with +# cross-compilers. +# +# The tests themselves should be as minimal as possible as +# cross-compilers don't always have a large amount of libraries +# available. +# +# We only include the host build system for SRC_PATH and we don't +# bother with the common rules.mk. We expect the following: +# +# CC - the C compiler command +# EXTRA_CFLAGS - any extra CFLAGS +# BUILD_STATIC - are we building static binaries +# +# By default all tests are statically compiled but some host systems +# may not package static libraries by default. If an external +# cross-compiler can only build dynamic libraries the user might need +# to make extra efforts to ensure ld.so can link at runtime when the +# tests are run. +# +# We also accept SPEED=slow to enable slower running tests +# +# We also expect to be in the tests build dir for the FOO-linux-user. +# + -include ../../config-host.mak --include $(SRC_PATH)/rules.mak +-include ../config-target.mak -$(call set-vpath, $(SRC_PATH)/tests/tcg) +quiet-command = $(if $(V),$1,$(if $(2),@printf " %-7s %s\n" $2 $3 && $1, @$1)) -QEMU=../../i386-linux-user/qemu-i386 -QEMU_X86_64=../../x86_64-linux-user/qemu-x86_64 -CC_X86_64=$(CC_I386) -m64 +# Tests we are building +TESTS= -QEMU_INCLUDES += -I../.. -CFLAGS=-Wall -O2 -g -fno-strict-aliasing -#CFLAGS+=-msse2 +# Start with a blank slate, the build targets get to add stuff first +CFLAGS= +QEMU_CFLAGS= LDFLAGS= -# TODO: automatically detect ARM and MIPS compilers, and run those too - -# runcom maps page 0, so it requires root privileges -# also, pi_10.com runs indefinitely - -I386_TESTS=hello-i386 \ - sha1-i386 \ - test-i386 \ - test-i386-fprem \ - # runcom +# The QEMU for this TARGET +QEMU=../qemu-$(TARGET_NAME) +TIMEOUT=15 -# native i386 compilers sometimes are not biarch. assume cross-compilers are -ifneq ($(ARCH),i386) -I386_TESTS+=run-test-x86_64 +# The order we include is important. We include multiarch, base arch +# and finally arch if it's not the same as base arch. +-include $(SRC_PATH)/tests/tcg/multiarch/Makefile.target +-include $(SRC_PATH)/tests/tcg/$(TARGET_BASE_ARCH)/Makefile.target +ifneq ($(TARGET_BASE_ARCH),$(TARGET_NAME)) +-include $(SRC_PATH)/tests/tcg/$(TARGET_NAME)/Makefile.target endif -TESTS = test_path -ifneq ($(call find-in-path, $(CC_I386)),) -TESTS += $(I386_TESTS) +# Add the common build options +CFLAGS+=-Wall -O0 -g -fno-strict-aliasing +ifeq ($(BUILD_STATIC),y) +LDFLAGS+=-static endif -all: $(patsubst %,run-%,$(TESTS)) -test: all - -# rules to run tests - -.PHONY: $(patsubst %,run-%,$(TESTS)) - -run-%: % - -$(QEMU) ./$* - -run-hello-i386: hello-i386 -run-sha1-i386: sha1-i386 - -run-test-i386: test-i386 - ./test-i386 > test-i386.ref - -$(QEMU) test-i386 > test-i386.out - @if diff -u test-i386.ref test-i386.out ; then echo "Auto Test OK"; fi - -run-test-i386-fprem: test-i386-fprem - ./test-i386-fprem > test-i386-fprem.ref - -$(QEMU) test-i386-fprem > test-i386-fprem.out - @if diff -u test-i386-fprem.ref test-i386-fprem.out ; then echo "Auto Test OK"; fi - -run-test-x86_64: test-x86_64 - ./test-x86_64 > test-x86_64.ref - -$(QEMU_X86_64) test-x86_64 > test-x86_64.out - @if diff -u test-x86_64.ref test-x86_64.out ; then echo "Auto Test OK"; fi - +%: %.c + $(CC) $(CFLAGS) $(EXTRA_CFLAGS) $< -o $@ $(LDFLAGS) -run-runcom: runcom - -$(QEMU) ./runcom $(SRC_PATH)/tests/pi_10.com +all: $(TESTS) -run-test_path: test_path - ./test_path +# +# Test Runners +# +# By default we just run the test with the appropriate QEMU for the +# target. More advanced tests may want to override the runner in their +# specific make rules. Additional runners for the same binary should +# be added to EXTRA_RUNS. +# -# rules to compile tests +RUN_TESTS=$(patsubst %,run-%, $(TESTS)) +RUN_TESTS+=$(EXTRA_RUNS) -hello-i386: hello-i386.c - $(CC_I386) -nostdlib $(CFLAGS) -static $(LDFLAGS) -o $@ $< - strip $@ - -# i386/x86_64 emulation test (test various opcodes) */ -test-i386: test-i386.c test-i386-code16.S test-i386-vm86.S \ - test-i386.h test-i386-shift.h test-i386-muldiv.h - $(CC_I386) $(QEMU_INCLUDES) $(CFLAGS) $(LDFLAGS) -o $@ \ - $( $<.out, \ + "TEST", "$< on $(TARGET_NAME)") -# testsuite for the LM32 port. -test-lm32: - $(MAKE) -C lm32 check +.PHONY: run +run: $(RUN_TESTS) -clean: - rm -f *~ *.o test-i386.out test-i386.ref \ - test-x86_64.log test-x86_64.ref qruncom $(TESTS) +# There is no clean target, the calling make just rm's the tests build dir