Skip to content

Make top-level rules usable with Bazel's layering_check #12760

@coryan

Description

@coryan

Bazel enforces "Header inclusion rules": https://bazel.build/reference/be/c-cpp#hdrs

When the layering_check feature is enabled, none of the top-level targets are usable. They have no hdrs value:

[cc_library(
name = "{library}".format(library = library),
deps = [
"//google/cloud/{library_dir}:google_cloud_cpp_{library}".format(
library = library,
library_dir = google_cloud_cpp_library_dir_name(library),
),
],
) for library in GA_LIBRARIES + TRANSITION_LIBRARIES]

  • I think we need to change the code to something like:
 [cc_library( 
     name = "{library}".format(library = library), 
     hdrs = ["//google/cloud/{dir}:hdrs".format(dir=google_cloud_cpp_library_dir_name(library)],
     deps = [ 
         "//google/cloud/{library_dir}:google_cloud_cpp_{library}".format( 
             library = library, 
             library_dir = google_cloud_cpp_library_dir_name(library), 
         ), 
     ], 
 ) for library in GA_LIBRARIES + TRANSITION_LIBRARIES] 
  • Verify all libraries, specially the hand-crafted libraries, have a filegroup defined for the headers.
  • It might be desirable to remove anything with /internal/ in the name from this filegroup too.
  • We should enable layering_check in the package once this is working
  • We should verify the quickstart programs compile with layering_check once this is working

Metadata

Metadata

Assignees

No one assigned

    Labels

    cpp: operatorGood things for the operator to fixtype: feature request‘Nice-to-have’ improvement, new feature or different behavior or design.

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions