Skip to content

Conversation

@michaelrj-google
Copy link
Contributor

Now that scanf is a little cleaner, this patch adds rules to build it
via bazel.

Now that scanf is a little cleaner, this patch adds rules to build it
via bazel.
@llvmbot llvmbot added libc bazel "Peripheral" support tier build system: utils/bazel labels Feb 20, 2025
@llvmbot
Copy link
Member

llvmbot commented Feb 20, 2025

@llvm/pr-subscribers-libc

Author: Michael Jones (michaelrj-google)

Changes

Now that scanf is a little cleaner, this patch adds rules to build it
via bazel.


Full diff: https://github.com/llvm/llvm-project/pull/128082.diff

2 Files Affected:

  • (modified) utils/bazel/llvm-project-overlay/libc/BUILD.bazel (+172)
  • (modified) utils/bazel/llvm-project-overlay/libc/test/src/stdio/BUILD.bazel (+40)
diff --git a/utils/bazel/llvm-project-overlay/libc/BUILD.bazel b/utils/bazel/llvm-project-overlay/libc/BUILD.bazel
index b9847caa94f58..fb68144302c0e 100644
--- a/utils/bazel/llvm-project-overlay/libc/BUILD.bazel
+++ b/utils/bazel/llvm-project-overlay/libc/BUILD.bazel
@@ -4611,6 +4611,178 @@ libc_function(
     ],
 )
 
+libc_support_library(
+    name = "scanf_config",
+    hdrs = ["src/stdio/scanf_core/scanf_config.h"],
+    deps = [
+    ],
+)
+
+libc_support_library(
+    name = "scanf_core_structs",
+    hdrs = ["src/stdio/scanf_core/core_structs.h"],
+    deps = [
+        ":__support_cpp_bitset",
+        ":__support_cpp_string_view",
+        ":__support_fputil_fp_bits",
+        ":scanf_config",
+    ],
+)
+
+libc_support_library(
+    name = "scanf_parser",
+    hdrs = ["src/stdio/scanf_core/parser.h"],
+    deps = [
+        ":__support_arg_list",
+        ":__support_cpp_bitset",
+        ":__support_ctype_utils",
+        ":__support_str_to_integer",
+        ":scanf_config",
+        ":scanf_core_structs",
+    ],
+)
+
+libc_support_library(
+    name = "scanf_reader",
+    hdrs = ["src/stdio/scanf_core/reader.h"],
+    deps = [
+        ":__support_cpp_string_view",
+        ":__support_macros_attributes",
+        ":types_FILE",
+    ],
+)
+
+libc_support_library(
+    name = "scanf_converter",
+    srcs = [
+        "src/stdio/scanf_core/converter.cpp",
+        "src/stdio/scanf_core/float_converter.cpp",
+        "src/stdio/scanf_core/int_converter.cpp",
+        "src/stdio/scanf_core/ptr_converter.cpp",
+        "src/stdio/scanf_core/string_converter.cpp",
+    ],
+    hdrs = [
+        "src/stdio/scanf_core/converter.h",
+        "src/stdio/scanf_core/converter_utils.h",
+        "src/stdio/scanf_core/current_pos_converter.h",
+        "src/stdio/scanf_core/float_converter.h",
+        "src/stdio/scanf_core/int_converter.h",
+        "src/stdio/scanf_core/ptr_converter.h",
+        "src/stdio/scanf_core/string_converter.h",
+    ],
+    deps = [
+        ":__support_char_vector",
+        ":__support_cpp_bitset",
+        ":__support_cpp_limits",
+        ":__support_cpp_string_view",
+        ":__support_ctype_utils",
+        ":__support_str_to_float",
+        ":scanf_core_structs",
+        ":scanf_reader",
+    ],
+)
+
+libc_support_library(
+    name = "scanf_main",
+    srcs = ["src/stdio/scanf_core/scanf_main.cpp"],
+    hdrs = ["src/stdio/scanf_core/scanf_main.h"],
+    deps = [
+        ":__support_arg_list",
+        ":scanf_config",
+        ":scanf_converter",
+        ":scanf_core_structs",
+        ":scanf_parser",
+        ":scanf_reader",
+    ],
+)
+
+libc_support_library(
+    name = "vfscanf_internal",
+    hdrs = ["src/stdio/scanf_core/vfscanf_internal.h"],
+    deps = [
+        ":__support_arg_list",
+        ":__support_file_file",
+        ":__support_macros_attributes",
+        ":scanf_main",
+        ":scanf_reader",
+        ":types_FILE",
+    ],
+)
+
+libc_function(
+    name = "scanf",
+    srcs = ["src/stdio/scanf.cpp"],
+    hdrs = ["src/stdio/scanf.h"],
+    deps = [
+        ":__support_arg_list",
+        ":__support_file_file",
+        ":types_FILE",
+        ":vfscanf_internal",
+    ],
+)
+
+libc_function(
+    name = "vscanf",
+    srcs = ["src/stdio/vscanf.cpp"],
+    hdrs = ["src/stdio/vscanf.h"],
+    deps = [
+        ":__support_arg_list",
+        ":__support_file_file",
+        ":types_FILE",
+        ":vfscanf_internal",
+    ],
+)
+
+libc_function(
+    name = "fscanf",
+    srcs = ["src/stdio/fscanf.cpp"],
+    hdrs = ["src/stdio/fscanf.h"],
+    deps = [
+        ":__support_arg_list",
+        ":__support_file_file",
+        ":types_FILE",
+        ":vfscanf_internal",
+    ],
+)
+
+libc_function(
+    name = "vfscanf",
+    srcs = ["src/stdio/vfscanf.cpp"],
+    hdrs = ["src/stdio/vfscanf.h"],
+    deps = [
+        ":__support_arg_list",
+        ":__support_file_file",
+        ":types_FILE",
+        ":vfscanf_internal",
+    ],
+)
+
+libc_function(
+    name = "sscanf",
+    srcs = ["src/stdio/sscanf.cpp"],
+    hdrs = ["src/stdio/sscanf.h"],
+    deps = [
+        ":__support_arg_list",
+        ":__support_file_file",
+        ":scanf_main",
+        ":scanf_reader",
+        ":types_FILE",
+    ],
+)
+
+libc_function(
+    name = "vsscanf",
+    srcs = ["src/stdio/vsscanf.cpp"],
+    hdrs = ["src/stdio/vsscanf.h"],
+    deps = [
+        ":__support_arg_list",
+        ":__support_file_file",
+        ":scanf_main",
+        ":scanf_reader",
+        ":types_FILE",
+    ],
+)
+
 libc_function(
     name = "remove",
     srcs = ["src/stdio/linux/remove.cpp"],
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 145ef86380b62..c3865ea07ea91 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
@@ -132,3 +132,43 @@ libc_test(
         "//libc:close",
     ],
 )
+
+libc_test(
+    name = "sscanf_test",
+    srcs = ["sscanf_test.cpp"],
+    libc_function_deps = [
+        "//libc:sscanf",
+    ],
+    deps = [
+        "//libc:__support_cpp_limits",
+        "//libc:__support_fputil_fp_bits",
+        "//libc:hdr_stdio_macros",
+        "//libc/test/UnitTest:fp_test_helpers",
+    ],
+)
+
+libc_test(
+    name = "fscanf_test",
+    srcs = ["fscanf_test.cpp"],
+    libc_function_deps = [
+        "//libc:fscanf",
+    ],
+    deps = ["//libc:__support_cpp_string_view"],
+)
+
+libc_test(
+    name = "vsscanf_test",
+    srcs = ["vsscanf_test.cpp"],
+    libc_function_deps = [
+        "//libc:vsscanf",
+    ],
+)
+
+libc_test(
+    name = "vfscanf_test",
+    srcs = ["vfscanf_test.cpp"],
+    libc_function_deps = [
+        "//libc:vfscanf",
+    ],
+    deps = ["//libc:__support_cpp_string_view"],
+)

Copy link
Member

@aaronmondal aaronmondal left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

You might want to use the term targets instead of rules in the PR title. A rule would be something like the implementation of the binary_alias:

The libc_support_library is in fact not a rule but a macro. You can see this because there is no rule keyword anywhere in its definition and instead it's effectively just a regular function defined via def:

def libc_support_library(name, **kwargs):

Ultimately this macro expands to targets, i.e. instantiations of the cc_library rule:

@michaelrj-google michaelrj-google changed the title [libc][bazel] add rules to build the scanf family [libc][bazel] add targets to build the scanf family Feb 21, 2025
@michaelrj-google
Copy link
Contributor Author

Thanks for the clarification

@michaelrj-google michaelrj-google merged commit 7f5a2cb into llvm:main Feb 21, 2025
9 checks passed
@michaelrj-google michaelrj-google deleted the libcScanfBazel branch February 21, 2025 22:27
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

bazel "Peripheral" support tier build system: utils/bazel libc

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants