summaryrefslogtreecommitdiff
path: root/utils
diff options
context:
space:
mode:
authorMichael Jones <michaelrj@google.com>2023-03-27 15:14:17 -0700
committerMichael Jones <michaelrj@google.com>2023-04-26 14:30:48 -0700
commitd94fe9728087f905dbd8fc32bc5c4a096b4d28c5 (patch)
tree63f883df09d61ed6ba61bc0f754acc37753edc36 /utils
parentbbc7b30fbf52c0f0b5383b9b9f5ebdb45db98b55 (diff)
downloadllvm-d94fe9728087f905dbd8fc32bc5c4a096b4d28c5.tar.gz
[libc][bazel] add file printf targets and support
This patch adds targets for printf and fprintf to the bazel build. Additionally, it adds support for the build system to specify where files should be written for testing purposes. This was necessary to enable the fprintf test under bazel. Reviewed By: sivachandra Differential Revision: https://reviews.llvm.org/D147008
Diffstat (limited to 'utils')
-rw-r--r--utils/bazel/llvm-project-overlay/libc/BUILD.bazel135
-rw-r--r--utils/bazel/llvm-project-overlay/libc/libc_build_rules.bzl14
-rw-r--r--utils/bazel/llvm-project-overlay/libc/test/UnitTest/BUILD.bazel2
-rw-r--r--utils/bazel/llvm-project-overlay/libc/test/src/stdio/BUILD.bazel38
4 files changed, 170 insertions, 19 deletions
diff --git a/utils/bazel/llvm-project-overlay/libc/BUILD.bazel b/utils/bazel/llvm-project-overlay/libc/BUILD.bazel
index e156614473f7..6e6953ef94fc 100644
--- a/utils/bazel/llvm-project-overlay/libc/BUILD.bazel
+++ b/utils/bazel/llvm-project-overlay/libc/BUILD.bazel
@@ -20,6 +20,12 @@ package(
licenses(["notice"])
+PRINTF_COPTS = [
+ "LIBC_COPT_PRINTF_USE_SYSTEM_FILE",
+ "LIBC_COPT_PRINTF_DISABLE_INDEX_MODE",
+ "LIBC_COPT_PRINTF_DISABLE_WRITE_INT",
+]
+
# A flag to pick which `mpfr` to use for math tests.
# Usage: `--@llvm-project//libc:mpfr=<disable|external|system>`.
# Flag documentation: https://bazel.build/extending/config
@@ -154,6 +160,14 @@ libc_support_library(
)
libc_support_library(
+ name = "__support_cpp_expected",
+ hdrs = ["src/__support/CPP/expected.h"],
+ deps = [
+ ":libc_root",
+ ],
+)
+
+libc_support_library(
name = "__support_cpp_functional",
hdrs = ["src/__support/CPP/functional.h"],
deps = [
@@ -171,6 +185,16 @@ libc_support_library(
)
libc_support_library(
+ name = "__support_cpp_new",
+ srcs = ["src/__support/CPP/new.cpp"],
+ hdrs = ["src/__support/CPP/new.h"],
+ deps = [
+ ":__support_common",
+ ":libc_root",
+ ],
+)
+
+libc_support_library(
name = "__support_cpp_optional",
hdrs = ["src/__support/CPP/optional.h"],
deps = [":libc_root"],
@@ -245,6 +269,25 @@ libc_support_library(
)
libc_support_library(
+ name = "__support_c_string",
+ hdrs = ["src/__support/c_string.h"],
+ deps = [
+ ":__support_cpp_string",
+ ":libc_root",
+ ],
+)
+
+libc_support_library(
+ name = "__support_error_or",
+ hdrs = ["src/__support/error_or.h"],
+ deps = [
+ ":__support_common",
+ ":__support_cpp_expected",
+ ":libc_root",
+ ],
+)
+
+libc_support_library(
name = "__support_float_to_string",
hdrs = [
"src/__support/float_to_string.h",
@@ -399,6 +442,20 @@ libc_support_library(
)
libc_support_library(
+ name = "__support_file_file",
+ srcs = ["src/__support/File/file.cpp"],
+ hdrs = ["src/__support/File/file.h"],
+ deps = [
+ ":__support_cpp_new",
+ ":__support_cpp_span",
+ ":__support_error_or",
+ ":__support_threads_mutex",
+ ":errno",
+ ":libc_root",
+ ],
+)
+
+libc_support_library(
name = "__support_named_pair",
hdrs = ["src/__support/named_pair.h"],
deps = [":libc_root"],
@@ -701,6 +758,23 @@ libc_support_library(
],
)
+libc_support_library(
+ name = "__support_threads_mutex",
+ hdrs = [
+ "src/__support/threads/mutex.h",
+ "src/__support/threads/mutex_common.h",
+ ],
+ textual_hdrs = [
+ "src/__support/threads/linux/mutex.h",
+ "src/__support/threads/linux/futex_word.h",
+ ],
+ deps = [
+ ":__support_cpp_atomic",
+ ":__support_osutil_syscall",
+ ":libc_root",
+ ],
+)
+
############################### errno targets ################################
libc_function(
@@ -2080,6 +2154,7 @@ libc_function(
libc_support_library(
name = "printf_core_structs",
hdrs = ["src/stdio/printf_core/core_structs.h"],
+ defines = PRINTF_COPTS,
deps = [
":__support_cpp_string_view",
":__support_fputil_fp_bits",
@@ -2090,6 +2165,7 @@ libc_support_library(
libc_support_library(
name = "printf_config",
hdrs = ["src/stdio/printf_core/printf_config.h"],
+ defines = PRINTF_COPTS,
deps = [
":libc_root",
],
@@ -2099,6 +2175,7 @@ libc_support_library(
name = "printf_parser",
srcs = ["src/stdio/printf_core/parser.cpp"],
hdrs = ["src/stdio/printf_core/parser.h"],
+ defines = PRINTF_COPTS,
deps = [
":__support_arg_list",
":__support_common",
@@ -2120,7 +2197,7 @@ libc_support_library(
name = "printf_mock_parser",
srcs = ["src/stdio/printf_core/parser.cpp"],
hdrs = ["src/stdio/printf_core/parser.h"],
- copts = ["-DLIBC_COPT_MOCK_ARG_LIST"],
+ defines = PRINTF_COPTS + ["LIBC_COPT_MOCK_ARG_LIST"],
deps = [
":__support_arg_list",
":__support_common",
@@ -2141,6 +2218,7 @@ libc_support_library(
name = "printf_string_writer",
srcs = ["src/stdio/printf_core/string_writer.cpp"],
hdrs = ["src/stdio/printf_core/string_writer.h"],
+ defines = PRINTF_COPTS,
deps = [
":__support_cpp_string_view",
":libc_root",
@@ -2150,9 +2228,22 @@ libc_support_library(
)
libc_support_library(
+ name = "printf_file_writer",
+ hdrs = ["src/stdio/printf_core/file_writer.h"],
+ defines = PRINTF_COPTS,
+ deps = [
+ ":__support_cpp_string_view",
+ ":__support_file_file",
+ ":libc_root",
+ ":printf_core_structs",
+ ],
+)
+
+libc_support_library(
name = "printf_writer",
srcs = ["src/stdio/printf_core/writer.cpp"],
hdrs = ["src/stdio/printf_core/writer.h"],
+ defines = PRINTF_COPTS,
deps = [
":__support_cpp_string_view",
":libc_root",
@@ -2175,6 +2266,7 @@ libc_support_library(
"src/stdio/printf_core/string_converter.h",
"src/stdio/printf_core/write_int_converter.h",
],
+ defines = PRINTF_COPTS,
deps = [
":__support_common",
":__support_cpp_limits",
@@ -2197,6 +2289,7 @@ libc_support_library(
name = "printf_main",
srcs = ["src/stdio/printf_core/printf_main.cpp"],
hdrs = ["src/stdio/printf_core/printf_main.h"],
+ defines = PRINTF_COPTS,
deps = [
":__support_arg_list",
":libc_root",
@@ -2211,6 +2304,7 @@ libc_function(
name = "sprintf",
srcs = ["src/stdio/sprintf.cpp"],
hdrs = ["src/stdio/sprintf.h"],
+ defines = PRINTF_COPTS,
deps = [
":__support_arg_list",
":errno",
@@ -2224,6 +2318,7 @@ libc_function(
name = "snprintf",
srcs = ["src/stdio/snprintf.cpp"],
hdrs = ["src/stdio/snprintf.h"],
+ defines = PRINTF_COPTS,
deps = [
":__support_arg_list",
":errno",
@@ -2232,3 +2327,41 @@ libc_function(
":printf_writer",
],
)
+
+libc_support_library(
+ name = "vfprintf_internal",
+ hdrs = ["src/stdio/printf_core/vfprintf_internal.h"],
+ defines = PRINTF_COPTS,
+ deps = [
+ ":__support_arg_list",
+ ":__support_file_file",
+ ":__support_macros_attributes",
+ ":printf_file_writer",
+ ":printf_main",
+ ":printf_writer",
+ ],
+)
+
+libc_function(
+ name = "printf",
+ srcs = ["src/stdio/printf.cpp"],
+ hdrs = ["src/stdio/printf.h"],
+ defines = PRINTF_COPTS,
+ deps = [
+ ":__support_arg_list",
+ ":errno",
+ ":vfprintf_internal",
+ ],
+)
+
+libc_function(
+ name = "fprintf",
+ srcs = ["src/stdio/fprintf.cpp"],
+ hdrs = ["src/stdio/fprintf.h"],
+ defines = PRINTF_COPTS,
+ deps = [
+ ":__support_arg_list",
+ ":errno",
+ ":vfprintf_internal",
+ ],
+)
diff --git a/utils/bazel/llvm-project-overlay/libc/libc_build_rules.bzl b/utils/bazel/llvm-project-overlay/libc/libc_build_rules.bzl
index b4506c33603f..83dff3fbd56a 100644
--- a/utils/bazel/llvm-project-overlay/libc/libc_build_rules.bzl
+++ b/utils/bazel/llvm-project-overlay/libc/libc_build_rules.bzl
@@ -23,7 +23,7 @@ def _libc_library(name, copts = None, **kwargs):
# We want all libc sources to be compiled with "hidden" visibility.
# The public symbols will be given "default" visibility explicitly.
# See src/__support/common.h for more information.
- copts.append("-fvisibility=hidden")
+ copts = copts + ["-fvisibility=hidden"]
native.cc_library(
name = name,
copts = copts,
@@ -65,11 +65,11 @@ def libc_function(
**kwargs: Other attributes relevant for a cc_library. For example, deps.
"""
deps = deps or []
- deps.append(LIBC_ROOT_TARGET)
+ # We use the explicit equals pattern here because append and += mutate the
+ # original list, where this creates a new list and stores it in deps.
+ deps = deps + [LIBC_ROOT_TARGET]
copts = copts or []
- copts.append("-O3")
- copts.append("-fno-builtin")
- copts.append("-fno-lax-vector-conversions")
+ copts = copts + ["-O3", "-fno-builtin", "-fno-lax-vector-conversions"]
# We compile the code twice, the first target is suffixed with ".__internal__" and contains the
# C++ functions in the "__llvm_libc" namespace. This allows us to test the function in the
@@ -87,9 +87,9 @@ def libc_function(
func_attrs = ["__attribute__((visibility(\"default\")))"]
if weak:
- func_attrs.append("__attribute__((weak))")
+ func_attrs = func_attrs + ["__attribute__((weak))"]
local_defines = local_defines or ["LIBC_COPT_PUBLIC_PACKAGING"]
- local_defines.append("LLVM_LIBC_FUNCTION_ATTR='%s'" % " ".join(func_attrs))
+ local_defines = local_defines + ["LLVM_LIBC_FUNCTION_ATTR='%s'" % " ".join(func_attrs)]
_libc_library(
name = name,
srcs = srcs,
diff --git a/utils/bazel/llvm-project-overlay/libc/test/UnitTest/BUILD.bazel b/utils/bazel/llvm-project-overlay/libc/test/UnitTest/BUILD.bazel
index 319f60b34f62..7ab3fe1b6b54 100644
--- a/utils/bazel/llvm-project-overlay/libc/test/UnitTest/BUILD.bazel
+++ b/utils/bazel/llvm-project-overlay/libc/test/UnitTest/BUILD.bazel
@@ -23,6 +23,7 @@ cc_library(
cc_library(
name = "LibcUnitTest",
srcs = [
+ "BazelFilePath.cpp",
"ExecuteFunctionUnix.cpp",
"LibcTest.cpp",
"LibcTestMain.cpp",
@@ -35,6 +36,7 @@ cc_library(
],
deps = [
":test_logger",
+ "//libc:__support_c_string",
"//libc:__support_cpp_bit",
"//libc:__support_cpp_bitset",
"//libc:__support_cpp_span",
diff --git a/utils/bazel/llvm-project-overlay/libc/test/src/stdio/BUILD.bazel b/utils/bazel/llvm-project-overlay/libc/test/src/stdio/BUILD.bazel
index f64607942973..07ffd21dc673 100644
--- a/utils/bazel/llvm-project-overlay/libc/test/src/stdio/BUILD.bazel
+++ b/utils/bazel/llvm-project-overlay/libc/test/src/stdio/BUILD.bazel
@@ -31,11 +31,11 @@ libc_test(
libc_function_deps = [
],
deps = [
- "//libc:printf_string_writer",
- "//libc:printf_writer",
- "//libc:printf_core_structs",
- "//libc:__support_cpp_string_view",
- "//libc:__support_arg_list",
+ "//libc:__support_arg_list",
+ "//libc:__support_cpp_string_view",
+ "//libc:printf_core_structs",
+ "//libc:printf_string_writer",
+ "//libc:printf_writer",
],
)
@@ -45,12 +45,12 @@ libc_test(
libc_function_deps = [
],
deps = [
- "//libc:printf_converter",
- "//libc:printf_string_writer",
- "//libc:printf_writer",
- "//libc:printf_core_structs",
- "//libc:__support_cpp_string_view",
- "//libc:__support_arg_list",
+ "//libc:__support_arg_list",
+ "//libc:__support_cpp_string_view",
+ "//libc:printf_converter",
+ "//libc:printf_core_structs",
+ "//libc:printf_string_writer",
+ "//libc:printf_writer",
],
)
@@ -74,3 +74,19 @@ libc_test(
"//libc:snprintf",
],
)
+
+libc_test(
+ name = "printf_test",
+ srcs = ["printf_test.cpp"],
+ libc_function_deps = [
+ "//libc:printf",
+ ],
+)
+
+libc_test(
+ name = "fprintf_test",
+ srcs = ["fprintf_test.cpp"],
+ libc_function_deps = [
+ "//libc:fprintf",
+ ],
+)