testsuite-targets.mk (8903B)
1 # This Source Code Form is subject to the terms of the Mozilla Public 2 # License, v. 2.0. If a copy of the MPL was not distributed with this 3 # file, You can obtain one at http://mozilla.org/MPL/2.0/. 4 5 # include automation-build.mk to get the path to the binary 6 TARGET_DEPTH = $(DEPTH) 7 include $(topsrcdir)/build/binary-location.mk 8 9 SYMBOLS_PATH := --symbols-path=$(DIST)/crashreporter-symbols 10 11 ifndef NO_FAIL_ON_TEST_ERRORS 12 define check_test_error_internal 13 @errors=`grep 'TEST-UNEXPECTED-' $@.log` ;\ 14 if test "$$errors" ; then \ 15 echo '$@ failed:'; \ 16 echo "$$errors"; \ 17 $(if $(1),echo $(1);) \ 18 exit 1; \ 19 fi 20 endef 21 CHECK_TEST_ERROR = $(call check_test_error_internal) 22 CHECK_TEST_ERROR_RERUN = $(call check_test_error_internal,'To rerun your failures please run "make $@-rerun-failures"') 23 endif 24 25 # Usage: |make [EXTRA_TEST_ARGS=...] *test|. 26 RUN_REFTEST = rm -f ./$@.log && $(PYTHON3) _tests/reftest/runreftest.py \ 27 --extra-profile-file=$(DIST)/plugins \ 28 $(SYMBOLS_PATH) $(EXTRA_TEST_ARGS) $(1) | tee ./$@.log 29 30 REMOTE_REFTEST = rm -f ./$@.log && $(PYTHON3) _tests/reftest/remotereftest.py \ 31 --ignore-window-size \ 32 --deviceIP=${TEST_DEVICE} --xre-path=${MOZ_HOST_BIN} \ 33 --httpd-path=_tests/modules --suite reftest \ 34 --extra-profile-file=$(topsrcdir)/mobile/android/fonts \ 35 $(SYMBOLS_PATH) $(EXTRA_TEST_ARGS) $(1) | tee ./$@.log 36 37 ifeq ($(OS_ARCH),WINNT) #{ 38 # GPU-rendered shadow layers are unsupported here 39 OOP_CONTENT = --setpref=layers.async-pan-zoom.enabled=true --setpref=layers.acceleration.disabled=true 40 GPU_RENDERING = 41 else 42 OOP_CONTENT = --setpref=layers.async-pan-zoom.enabled=true 43 GPU_RENDERING = --setpref=layers.acceleration.force-enabled=true 44 endif #} 45 46 reftest: TEST_PATH?=layout/reftests/reftest.list 47 reftest: 48 $(call RUN_REFTEST,'$(topsrcdir)/$(TEST_PATH)') 49 $(CHECK_TEST_ERROR) 50 51 reftest-remote: TEST_PATH?=layout/reftests/reftest.list 52 reftest-remote: 53 @if [ '${MOZ_HOST_BIN}' = '' ]; then \ 54 echo 'environment variable MOZ_HOST_BIN must be set to a directory containing host xpcshell'; \ 55 elif [ ! -d ${MOZ_HOST_BIN} ]; then \ 56 echo 'MOZ_HOST_BIN does not specify a directory'; \ 57 elif [ ! -f ${MOZ_HOST_BIN}/xpcshell ]; then \ 58 echo 'xpcshell not found in MOZ_HOST_BIN'; \ 59 else \ 60 ln -s $(abspath $(topsrcdir)) _tests/reftest/tests; \ 61 $(call REMOTE_REFTEST,'tests/$(TEST_PATH)'); \ 62 $(CHECK_TEST_ERROR); \ 63 fi 64 65 crashtest: TEST_PATH?=testing/crashtest/crashtests.list 66 crashtest: 67 $(call RUN_REFTEST,'$(topsrcdir)/$(TEST_PATH)') 68 $(CHECK_TEST_ERROR) 69 70 jstestbrowser: TESTS_PATH?=test-stage/jsreftest/tests/ 71 jstestbrowser: 72 $(MAKE) -C $(DEPTH)/config 73 $(MAKE) stage-jstests 74 $(call RUN_REFTEST,'$(DIST)/$(TESTS_PATH)/jstests.list' --extra-profile-file=$(DIST)/test-stage/jsreftest/tests/user.js) 75 $(CHECK_TEST_ERROR) 76 77 REMOTE_CPPUNITTESTS = \ 78 $(PYTHON3) -u $(topsrcdir)/testing/remotecppunittests.py \ 79 --xre-path=$(DEPTH)/dist/bin \ 80 --localLib=$(DEPTH)/dist/geckoview \ 81 --deviceIP=${TEST_DEVICE} \ 82 $(TEST_PATH) $(EXTRA_TEST_ARGS) 83 84 # Usage: |make [TEST_PATH=...] [EXTRA_TEST_ARGS=...] cppunittests-remote|. 85 cppunittests-remote: 86 $(call REMOTE_CPPUNITTESTS); 87 88 # Package up the tests and test harnesses 89 include $(topsrcdir)/toolkit/mozapps/installer/package-name.mk 90 91 PKG_STAGE = $(DIST)/test-stage 92 93 stage-all: \ 94 stage-config \ 95 stage-mach \ 96 stage-extensions \ 97 stage-mochitest \ 98 stage-jstests \ 99 test-packages-manifest \ 100 $(NULL) 101 102 ifdef COMPILE_ENVIRONMENT 103 stage-all: stage-cppunittests 104 endif 105 106 TEST_PKGS_TARZST := \ 107 common \ 108 condprof \ 109 cppunittest \ 110 mochitest \ 111 reftest \ 112 talos \ 113 raptor \ 114 awsy \ 115 xpcshell \ 116 web-platform \ 117 updater-dep \ 118 jsreftest \ 119 jittest \ 120 perftests \ 121 fuzztest \ 122 trainhop \ 123 $(NULL) 124 125 ifdef LINK_GTEST_DURING_COMPILE 126 stage-all: stage-gtest 127 TEST_PKGS_TARZST += gtest 128 endif 129 130 PKG_ARG = --$(1) '$(PKG_BASENAME).$(1).tests.$(2)' 131 132 test-packages-manifest: 133 @rm -f $(MOZ_TEST_PACKAGES_FILE) 134 $(NSINSTALL) -D $(dir $(MOZ_TEST_PACKAGES_FILE)) 135 $(PYTHON3) $(topsrcdir)/build/gen_test_packages_manifest.py \ 136 --jsshell $(JSSHELL_NAME) \ 137 --dest-file '$(MOZ_TEST_PACKAGES_FILE)' \ 138 $(call PKG_ARG,common,zip) \ 139 $(foreach pkg,$(TEST_PKGS_TARZST),$(call PKG_ARG,$(pkg),tar.zst)) 140 141 ifdef UPLOAD_PATH 142 test_archive_dir = $(UPLOAD_PATH) 143 else 144 test_archive_dir = $(DIST)/$(PKG_PATH) 145 endif 146 147 package-tests-prepare-dest: 148 $(NSINSTALL) -D $(test_archive_dir) 149 150 download-wpt-manifest: 151 $(call py_action,download_wpt_manifest) 152 153 define package_archive 154 package-tests-$(1): stage-all package-tests-prepare-dest 155 $$(call py_action,test_archive, \ 156 $(1) \ 157 '$$(abspath $$(test_archive_dir))/$$(PKG_BASENAME).$(1).tests.$(2)') 158 package-tests: package-tests-$(1) 159 endef 160 161 $(foreach name,$(TEST_PKGS_TARZST),$(eval $(call package_archive,$(name),tar.zst))) 162 163 ifeq ($(MOZ_BUILD_APP),mobile/android) 164 stage-all: stage-android 165 endif 166 167 # Prepare _tests before any of the other staging/packaging steps. 168 # make-stage-dir is a prerequisite to all the stage-* targets in testsuite-targets.mk. 169 make-stage-dir: install-test-files 170 rm -rf $(PKG_STAGE) 171 $(NSINSTALL) -D $(PKG_STAGE) 172 $(NSINSTALL) -D $(PKG_STAGE)/bin 173 $(NSINSTALL) -D $(PKG_STAGE)/bin/components 174 $(NSINSTALL) -D $(PKG_STAGE)/certs 175 $(NSINSTALL) -D $(PKG_STAGE)/config 176 $(NSINSTALL) -D $(PKG_STAGE)/modules 177 $(NSINSTALL) -D $(PKG_STAGE)/tools/mach 178 179 stage-config: make-stage-dir 180 $(NSINSTALL) -D $(PKG_STAGE)/config 181 @(cd $(topsrcdir)/testing/config && tar $(TAR_CREATE_FLAGS) - *) | (cd $(PKG_STAGE)/config && tar -xf -) 182 183 stage-mach: make-stage-dir 184 @(cd $(topsrcdir)/python/mach && tar $(TAR_CREATE_FLAGS) - *) | (cd $(PKG_STAGE)/tools/mach && tar -xf -) 185 cp $(topsrcdir)/testing/tools/mach_test_package_initialize.py $(PKG_STAGE)/tools/mach_initialize.py 186 cp $(topsrcdir)/mach $(PKG_STAGE) 187 188 stage-mochitest: make-stage-dir ; 189 190 stage-jstests: make-stage-dir 191 $(MAKE) -C $(DEPTH)/js/src/tests stage-package 192 193 ifdef OBJCOPY 194 ifneq ($(OBJCOPY), :) # see build/autoconf/toolchain.m4:102 for why this is necessary 195 ifdef PKG_STRIP 196 STRIP_COMPILED_TESTS := 1 197 endif 198 endif 199 endif 200 201 stage-gtest: make-stage-dir 202 $(NSINSTALL) -D $(PKG_STAGE)/gtest/gtest_bin/gtest 203 ifdef STRIP_COMPILED_TESTS 204 # The libxul file basename will vary per platform. Fortunately 205 # dependentlibs.list always lists the library name as its final line, so we 206 # can get the value from there. 207 LIBXUL_BASE=`tail -1 $(DIST)/bin/dependentlibs.list` && \ 208 $(OBJCOPY) $(or $(STRIP_FLAGS),--strip-unneeded) \ 209 $(DIST)/bin/gtest/$$LIBXUL_BASE $(PKG_STAGE)/gtest/gtest_bin/gtest/$$LIBXUL_BASE 210 else 211 cp -RL $(DIST)/bin/gtest $(PKG_STAGE)/gtest/gtest_bin 212 endif 213 cp -RL $(DIST)/bin/gtest/*buildid.* $(PKG_STAGE)/gtest/gtest_bin/gtest 214 cp -RL $(DEPTH)/_tests/gtest $(PKG_STAGE) 215 cp $(topsrcdir)/testing/gtest/gtest_filter_sets.py $(PKG_STAGE)/gtest 216 cp $(topsrcdir)/testing/gtest/gtest_filter_sets.yml $(PKG_STAGE)/gtest 217 cp $(topsrcdir)/testing/gtest/rungtests.py $(PKG_STAGE)/gtest 218 cp $(topsrcdir)/testing/gtest/remotegtests.py $(PKG_STAGE)/gtest 219 cp $(topsrcdir)/testing/gtest/mach_test_package_commands.py $(PKG_STAGE)/gtest 220 cp $(DIST)/bin/dependentlibs.list.gtest $(PKG_STAGE)/gtest 221 cp $(DEPTH)/mozinfo.json $(PKG_STAGE)/gtest 222 223 stage-android: make-stage-dir 224 $(NSINSTALL) $(topsrcdir)/mobile/android/fonts $(DEPTH)/_tests/reftest 225 $(NSINSTALL) $(topsrcdir)/mobile/android/fonts $(DEPTH)/_tests/testing/mochitest 226 227 ifdef MOZ_COPY_PDBS 228 CPP_UNIT_TEST_BINS=$(filter-out $(wildcard $(DIST)/cppunittests/*.pdb), $(wildcard $(DIST)/cppunittests/*)) 229 else 230 CPP_UNIT_TEST_BINS=$(wildcard $(DIST)/cppunittests/*) 231 endif 232 233 stage-cppunittests: make-stage-dir 234 $(NSINSTALL) -D $(PKG_STAGE)/cppunittest 235 ifdef STRIP_COMPILED_TESTS 236 $(foreach bin,$(CPP_UNIT_TEST_BINS),$(OBJCOPY) $(or $(STRIP_FLAGS),--strip-unneeded) $(bin) $(bin:$(DIST)/cppunittests/%=$(PKG_STAGE)/cppunittest/%);) 237 else 238 cp -RL $(CPP_UNIT_TEST_BINS) $(PKG_STAGE)/cppunittest 239 endif 240 ifdef MOZ_COPY_PDBS 241 cp -RL $(addsuffix .pdb,$(basename $(CPP_UNIT_TEST_BINS))) $(PKG_STAGE)/cppunittest 242 endif 243 ifdef STRIP_COMPILED_TESTS 244 $(OBJCOPY) $(or $(STRIP_FLAGS),--strip-unneeded) $(DIST)/bin/jsapi-tests$(BIN_SUFFIX) $(PKG_STAGE)/cppunittest/jsapi-tests$(BIN_SUFFIX) 245 else 246 cp -RL $(DIST)/bin/jsapi-tests$(BIN_SUFFIX) $(PKG_STAGE)/cppunittest 247 endif 248 ifdef MOZ_COPY_PDBS 249 cp -RL $(DIST)/bin/jsapi-tests.pdb $(PKG_STAGE)/cppunittest 250 endif 251 252 TEST_EXTENSIONS := \ 253 specialpowers@mozilla.org.xpi \ 254 $(NULL) 255 256 stage-extensions: make-stage-dir 257 $(NSINSTALL) -D $(PKG_STAGE)/extensions/ 258 @$(foreach ext,$(TEST_EXTENSIONS), cp -RL $(DIST)/xpi-stage/$(ext) $(PKG_STAGE)/extensions;) 259 260 261 .PHONY: \ 262 reftest \ 263 crashtest \ 264 xpcshell-tests \ 265 jstestbrowser \ 266 package-tests \ 267 download-wpt-manifest \ 268 package-tests-prepare-dest \ 269 package-tests-common \ 270 make-stage-dir \ 271 stage-all \ 272 stage-config \ 273 stage-mochitest \ 274 stage-jstests \ 275 stage-android \ 276 test-packages-manifest \ 277 check \ 278 $(NULL)