Add a test target with sharding support to the CMake build. Two major things going on here: - One target is created for each file in test-data.sha1 (testdata_N), and the testdata target now depends on all testdata_N targets. The testdata build rule can now run with as many jobs as there are input files to speed up test data download. - GTest sharding support has been added to the tests via a runtests custom build target. First, the number of processors is detected, and then a custom target is created for each processor (test_N). Once each test_N target is created, the runtests custom target is created, and then made to depend on each test_N target. When CMake is unable to detect the number of processors 10 test targets are created. Each custom target then sets the GTEST_SHARD_INDEX and GTEST_TOTAL_SHARDS environment variables, allowing GTest to handle sharding internally. BUG=aomedia:76,aomedia:469 Change-Id: Ib6b7974932396fbf44b735d37155fa57561027ab
diff --git a/test/test_runner.cmake b/test/test_runner.cmake new file mode 100644 index 0000000..b8176d7 --- /dev/null +++ b/test/test_runner.cmake
@@ -0,0 +1,20 @@ +## +## Copyright (c) 2017, Alliance for Open Media. All rights reserved +## +## This source code is subject to the terms of the BSD 2 Clause License and +## the Alliance for Open Media Patent License 1.0. If the BSD 2 Clause License +## was not distributed with this source code in the LICENSE file, you can +## obtain it at www.aomedia.org/license/software. If the Alliance for Open +## Media Patent License 1.0 was not distributed with this source code in the +## PATENTS file, you can obtain it at www.aomedia.org/license/patent. +## +if (NOT AOM_ROOT OR NOT AOM_CONFIG_DIR OR NOT AOM_TEST_TARGET + OR NOT GTEST_TOTAL_SHARDS OR "${GTEST_SHARD_INDEX}" STREQUAL "") + message(FATAL_ERROR + "The variables AOM_ROOT AOM_CONFIG_DIR AOM_TEST_TARGET + GTEST_SHARD_INDEX and GTEST_TOTAL_SHARDS must be defined.") +endif () + +set($ENV{GTEST_SHARD_INDEX} ${GTEST_SHARD_INDEX}) +set($ENV{GTEST_TOTAL_SHARDS} ${GTEST_TOTAL_SHARDS}) +execute_process(COMMAND ${AOM_CONFIG_DIR}/${AOM_TEST_TARGET})