blob: 41a706d2d92fb0ffafed8bfc9b5772500531febd [file] [log] [blame]
# This file is 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
"""LLVM libc starlark rules for tests.
libc functions are created though the libc_build_rules.bzl:libc_function.
They come in two flavors:
- the internal one that is scoped into the `LIBC_NAMESPACE` namespace.
- the libc one that is the regular C function.
When performing tests we make sure to always use the internal version.
"""
load("//libc:libc_build_rules.bzl", "libc_common_copts")
load("//libc:libc_configure_options.bzl", "LIBC_CONFIGURE_OPTIONS")
_FULL_BUILD_COPTS = [
"-nostdlib++",
"-nostdlib",
"-DLIBC_FULL_BUILD",
"-DLIBC_COPT_USE_C_ASSERT",
]
def libc_test(
name,
copts = [],
deps = [],
local_defines = [],
use_test_framework = True,
full_build = False,
**kwargs):
"""Add target for a libc test.
Args:
name: Test target name
copts: The list of options to add to the C++ compilation command.
deps: The list of libc functions and libraries to be linked in.
local_defines: The list of target local_defines if any.
use_test_framework: Whether to use the libc unit test `main` function.
full_build: Whether to compile with LIBC_FULL_BUILD and disallow
use of system headers. This is useful for tests that include both
LLVM libc headers and proxy headers to avoid conflicting definitions.
**kwargs: Attributes relevant for a cc_test.
"""
deps = deps + [
"//libc:__support_macros_config",
"//libc:__support_libc_errno",
"//libc:errno",
"//libc:func_aligned_alloc",
"//libc:func_free",
"//libc:func_malloc",
"//libc:func_realloc",
]
if use_test_framework:
deps = deps + ["//libc/test/UnitTest:LibcUnitTest"]
if full_build:
copts = copts + _FULL_BUILD_COPTS
native.cc_test(
name = name,
local_defines = local_defines + LIBC_CONFIGURE_OPTIONS,
deps = deps,
copts = copts + libc_common_copts(),
linkstatic = 1,
**kwargs
)
def libc_test_library(name, copts = [], local_defines = [], **kwargs):
"""Add target for library used in libc tests.
Args:
name: Library target name.
copts: See cc_library.copts.
local_defines: See cc_library.local_defines.
**kwargs: Other attributes relevant to cc_library (e.g. "deps").
"""
native.cc_library(
name = name,
testonly = True,
copts = copts + libc_common_copts(),
local_defines = local_defines + LIBC_CONFIGURE_OPTIONS,
linkstatic = 1,
**kwargs
)