blob: 13e230ab8d1e1c2e96282634b2e60b587781c955 [file] [log] [blame]
# Copyright 2022 The IREE Authors
#
# Licensed under the Apache License v2.0 with LLVM Exceptions.
# See https://llvm.org/LICENSE.txt for license information.
# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
include(CMakeParseArguments)
# iree_cc_binary_benchmarks()
#
# Creates a binary and a test for a cc benchmark target.
#
# It's good to test that benchmarks run, but it's really annoying to run a
# billion iterations of them every time you try to run tests. So we create these
# as binaries and then invoke them as tests with `--benchmark_min_time=0`.
#
# Mirrors the bzl function of the same name. See iree_cc_binary and iree_cc_test
# for more details on those rules
#
# Parameters:
# NAME: name for the binary target. The test target will be "${NAME}_test"
# SRCS: List of source files for the binary
# DATA: List of other targets and files required for the binary
# DEPS: List of other libraries to be linked in to the binary
# COPTS: List of private compile options for the binary
# DEFINES: List of public defines for the binary
# LINKOPTS: List of link options for the binary
# TESTONLY: whether the binary should only be compiled for tests
# HOSTONLY: whether the binary should be compiled using host toolchain when
# cross-compiling
# LABELS: Additional labels to apply to the test. The package path is added
# automatically.
#
# )
function(iree_cc_binary_benchmark)
cmake_parse_arguments(
_RULE
"HOSTONLY;TESTONLY"
"NAME"
"SRCS;COPTS;DEFINES;LINKOPTS;DATA;DEPS;LABELS"
${ARGN}
)
set(_MAYBE_TESTONLY "")
if(_RULE_TESTONLY)
set(_MAYBE_TESTONLY "TESTONLY")
endif()
set(_MAYBE_HOSTONLY "")
if(_RULE_HOSTONLY)
set(_MAYBE_HOSTONLY "HOSTONLY")
endif()
iree_cc_binary(
NAME
${_RULE_NAME}
SRCS
${_RULE_SRCS}
DEPS
${_RULE_DEPS}
COPTS
${_RULE_COPTS}
DEFINES
${_RULE_DEFINES}
LINKOPTS
${_RULE_LINKOPTS}
${_MAYBE_TESTONLY}
${_MAYBE_HOSTONLY}
)
iree_native_test(
NAME
${_RULE_NAME}_test
ARGS
"--benchmark_min_time=0"
SRC
::${_RULE_NAME}
LABELS
${_RULE_LABELS}
)
endfunction()