From d94fe9728087f905dbd8fc32bc5c4a096b4d28c5 Mon Sep 17 00:00:00 2001 From: Michael Jones Date: Mon, 27 Mar 2023 15:14:17 -0700 Subject: [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 --- utils/bazel/llvm-project-overlay/libc/BUILD.bazel | 135 ++++++++++++++++++++- .../llvm-project-overlay/libc/libc_build_rules.bzl | 14 +-- .../libc/test/UnitTest/BUILD.bazel | 2 + .../libc/test/src/stdio/BUILD.bazel | 38 ++++-- 4 files changed, 170 insertions(+), 19 deletions(-) (limited to 'utils') 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=`. # Flag documentation: https://bazel.build/extending/config @@ -153,6 +159,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"], @@ -170,6 +184,16 @@ libc_support_library( deps = [":libc_root"], ) +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"], @@ -244,6 +268,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 = [ @@ -398,6 +441,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"], @@ -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", @@ -2149,10 +2227,23 @@ 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", + ], +) -- cgit v1.2.1