Split protoc apart from libprotoc in our cmake configs.

This avoids installing every header required by protoc, and only installs the ones we've explicitly marked as public in bazel (and their transitive dependencies).

PiperOrigin-RevId: 709815861
pull/19782/head
Mike Kruskal 4 months ago committed by Copybara-Service
parent 5cf5e8688c
commit b4b93b3624
  1. 2
      cmake/install.cmake
  2. 109
      cmake/installed_include_golden.txt
  3. 14
      cmake/tests.cmake
  4. 18
      pkg/BUILD.bazel
  5. 1
      src/google/protobuf/compiler/rust/BUILD.bazel
  6. 28
      src/google/protobuf/compiler/rust/crate_mapping.cc
  7. 1
      src/google/protobuf/testing/BUILD.bazel

@ -87,7 +87,7 @@ endif ()
include(${protobuf_SOURCE_DIR}/src/file_lists.cmake)
set(protobuf_HEADERS
${libprotobuf_hdrs}
${libprotoc_hdrs}
${libprotoc_public_hdrs}
${wkt_protos_files}
${cpp_features_proto_proto_srcs}
${descriptor_proto_proto_srcs}

@ -12,130 +12,28 @@ google/protobuf/arenaz_sampler.h
google/protobuf/compiler/code_generator.h
google/protobuf/compiler/code_generator_lite.h
google/protobuf/compiler/command_line_interface.h
google/protobuf/compiler/cpp/enum.h
google/protobuf/compiler/cpp/extension.h
google/protobuf/compiler/cpp/field.h
google/protobuf/compiler/cpp/field_generators/generators.h
google/protobuf/compiler/cpp/file.h
google/protobuf/compiler/cpp/generator.h
google/protobuf/compiler/cpp/helpers.h
google/protobuf/compiler/cpp/ifndef_guard.h
google/protobuf/compiler/cpp/message.h
google/protobuf/compiler/cpp/message_layout_helper.h
google/protobuf/compiler/cpp/names.h
google/protobuf/compiler/cpp/namespace_printer.h
google/protobuf/compiler/cpp/options.h
google/protobuf/compiler/cpp/padding_optimizer.h
google/protobuf/compiler/cpp/parse_function_generator.h
google/protobuf/compiler/cpp/service.h
google/protobuf/compiler/cpp/tracker.h
google/protobuf/compiler/csharp/csharp_doc_comment.h
google/protobuf/compiler/csharp/csharp_enum.h
google/protobuf/compiler/csharp/csharp_enum_field.h
google/protobuf/compiler/csharp/csharp_field_base.h
google/protobuf/compiler/csharp/csharp_generator.h
google/protobuf/compiler/csharp/csharp_helpers.h
google/protobuf/compiler/csharp/csharp_map_field.h
google/protobuf/compiler/csharp/csharp_message.h
google/protobuf/compiler/csharp/csharp_message_field.h
google/protobuf/compiler/csharp/csharp_options.h
google/protobuf/compiler/csharp/csharp_primitive_field.h
google/protobuf/compiler/csharp/csharp_reflection_class.h
google/protobuf/compiler/csharp/csharp_repeated_enum_field.h
google/protobuf/compiler/csharp/csharp_repeated_message_field.h
google/protobuf/compiler/csharp/csharp_repeated_primitive_field.h
google/protobuf/compiler/csharp/csharp_source_generator_base.h
google/protobuf/compiler/csharp/csharp_wrapper_field.h
google/protobuf/compiler/csharp/names.h
google/protobuf/compiler/importer.h
google/protobuf/compiler/java/context.h
google/protobuf/compiler/java/doc_comment.h
google/protobuf/compiler/java/field_common.h
google/protobuf/compiler/java/file.h
google/protobuf/compiler/java/full/enum.h
google/protobuf/compiler/java/full/enum_field.h
google/protobuf/compiler/java/full/extension.h
google/protobuf/compiler/java/full/field_generator.h
google/protobuf/compiler/java/full/generator_factory.h
google/protobuf/compiler/java/full/make_field_gens.h
google/protobuf/compiler/java/full/map_field.h
google/protobuf/compiler/java/full/message.h
google/protobuf/compiler/java/full/message_builder.h
google/protobuf/compiler/java/full/message_field.h
google/protobuf/compiler/java/full/primitive_field.h
google/protobuf/compiler/java/full/service.h
google/protobuf/compiler/java/full/string_field.h
google/protobuf/compiler/java/generator.h
google/protobuf/compiler/java/generator_common.h
google/protobuf/compiler/java/generator_factory.h
google/protobuf/compiler/java/helpers.h
google/protobuf/compiler/java/java_features.pb.h
google/protobuf/compiler/java/lite/enum.h
google/protobuf/compiler/java/lite/enum_field.h
google/protobuf/compiler/java/lite/extension.h
google/protobuf/compiler/java/lite/field_generator.h
google/protobuf/compiler/java/lite/generator_factory.h
google/protobuf/compiler/java/lite/make_field_gens.h
google/protobuf/compiler/java/lite/map_field.h
google/protobuf/compiler/java/lite/message.h
google/protobuf/compiler/java/lite/message_builder.h
google/protobuf/compiler/java/lite/message_field.h
google/protobuf/compiler/java/lite/primitive_field.h
google/protobuf/compiler/java/lite/string_field.h
google/protobuf/compiler/java/message_serialization.h
google/protobuf/compiler/java/name_resolver.h
google/protobuf/compiler/java/names.h
google/protobuf/compiler/java/options.h
google/protobuf/compiler/java/shared_code_generator.h
google/protobuf/compiler/kotlin/field.h
google/protobuf/compiler/kotlin/file.h
google/protobuf/compiler/kotlin/generator.h
google/protobuf/compiler/kotlin/message.h
google/protobuf/compiler/objectivec/enum.h
google/protobuf/compiler/objectivec/enum_field.h
google/protobuf/compiler/objectivec/extension.h
google/protobuf/compiler/objectivec/field.h
google/protobuf/compiler/objectivec/file.h
google/protobuf/compiler/objectivec/generator.h
google/protobuf/compiler/objectivec/helpers.h
google/protobuf/compiler/objectivec/import_writer.h
google/protobuf/compiler/objectivec/line_consumer.h
google/protobuf/compiler/objectivec/map_field.h
google/protobuf/compiler/objectivec/message.h
google/protobuf/compiler/objectivec/message_field.h
google/protobuf/compiler/objectivec/names.h
google/protobuf/compiler/objectivec/nsobject_methods.h
google/protobuf/compiler/objectivec/oneof.h
google/protobuf/compiler/objectivec/options.h
google/protobuf/compiler/objectivec/primitive_field.h
google/protobuf/compiler/objectivec/tf_decode_data.h
google/protobuf/compiler/parser.h
google/protobuf/compiler/php/names.h
google/protobuf/compiler/php/php_generator.h
google/protobuf/compiler/plugin.h
google/protobuf/compiler/plugin.pb.h
google/protobuf/compiler/plugin.proto
google/protobuf/compiler/python/generator.h
google/protobuf/compiler/python/helpers.h
google/protobuf/compiler/python/pyi_generator.h
google/protobuf/compiler/retention.h
google/protobuf/compiler/ruby/ruby_generator.h
google/protobuf/compiler/rust/accessors/accessor_case.h
google/protobuf/compiler/rust/accessors/accessors.h
google/protobuf/compiler/rust/accessors/default_value.h
google/protobuf/compiler/rust/accessors/generator.h
google/protobuf/compiler/rust/accessors/with_presence.h
google/protobuf/compiler/rust/context.h
google/protobuf/compiler/rust/crate_mapping.h
google/protobuf/compiler/rust/enum.h
google/protobuf/compiler/rust/generator.h
google/protobuf/compiler/rust/message.h
google/protobuf/compiler/rust/naming.h
google/protobuf/compiler/rust/oneof.h
google/protobuf/compiler/rust/relative_path.h
google/protobuf/compiler/rust/rust_field_type.h
google/protobuf/compiler/rust/rust_keywords.h
google/protobuf/compiler/rust/upb_helpers.h
google/protobuf/compiler/scc.h
google/protobuf/compiler/subprocess.h
google/protobuf/compiler/versions.h
@ -224,7 +122,6 @@ google/protobuf/stubs/common.h
google/protobuf/stubs/platform_macros.h
google/protobuf/stubs/port.h
google/protobuf/stubs/status_macros.h
google/protobuf/testing/file.h
google/protobuf/text_format.h
google/protobuf/thread_safe_arena.h
google/protobuf/timestamp.pb.h
@ -285,12 +182,8 @@ upb/mini_table/file.h
upb/mini_table/message.h
upb/mini_table/sub.h
upb/port/atomic.h
upb/port/atomic.h
upb/port/def.inc
upb/port/def.inc
upb/port/undef.inc
upb/port/undef.inc
upb/port/vsnprintf_compat.h
upb/port/vsnprintf_compat.h
upb/reflection/common.h
upb/reflection/def.h
@ -322,7 +215,5 @@ upb/wire/encode.h
upb/wire/eps_copy_input_stream.h
upb/wire/reader.h
upb/wire/types.h
upb_generator/common/names.h
upb_generator/minitable/names.h
utf8_range.h
utf8_validity.h

@ -225,19 +225,23 @@ file(GLOB_RECURSE _local_upb_hdrs
"${PROJECT_SOURCE_DIR}/upb/*.h"
)
# Exclude test library headers.
list(APPEND _exclude_hdrs ${test_util_hdrs} ${lite_test_util_hdrs} ${common_test_hdrs}
${compiler_test_utils_hdrs} ${upb_test_util_files} ${libprotoc_hdrs})
foreach(_hdr ${_exclude_hdrs})
list(REMOVE_ITEM _local_hdrs ${_hdr})
list(REMOVE_ITEM _local_upb_hdrs ${_hdr})
endforeach()
list(APPEND _local_hdrs ${libprotoc_public_hdrs})
# Exclude the bootstrapping that are directly used by tests.
set(_exclude_hdrs
"${protobuf_SOURCE_DIR}/src/google/protobuf/cpp_features.pb.h"
"${protobuf_SOURCE_DIR}/src/google/protobuf/descriptor.pb.h"
"${protobuf_SOURCE_DIR}/src/google/protobuf/compiler/plugin.pb.h"
"${protobuf_SOURCE_DIR}/src/google/protobuf/compiler/java/java_features.pb.h")
# Exclude test library headers.
list(APPEND _exclude_hdrs ${test_util_hdrs} ${lite_test_util_hdrs} ${common_test_hdrs}
${compiler_test_utils_hdrs} ${upb_test_util_files})
foreach(_hdr ${_exclude_hdrs})
list(REMOVE_ITEM _local_hdrs ${_hdr})
list(REMOVE_ITEM _local_upb_hdrs ${_hdr})
endforeach()
foreach(_hdr ${_local_hdrs})

@ -110,6 +110,7 @@ gen_file_lists(
# Libraries:
":protobuf": "libprotobuf",
":protobuf_lite": "libprotobuf_lite",
":protoc_public": "libprotoc_public",
":protoc": "libprotoc",
":upb": "libupb",
":protoc-gen-upb": "protoc-gen-upb",
@ -209,6 +210,23 @@ cc_dist_library(
],
)
cc_dist_library(
name = "protoc_public",
dist_deps = [
":protobuf",
":protobuf_lite",
],
tags = ["manual"],
deps = [
"//src/google/protobuf/compiler:command_line_interface",
"//src/google/protobuf/compiler/cpp:names",
"//src/google/protobuf/compiler/csharp:names",
"//src/google/protobuf/compiler/java:names",
"//src/google/protobuf/compiler/objectivec:names",
"//src/google/protobuf/compiler/php:names",
],
)
cc_dist_library(
name = "upb",
tags = ["manual"],

@ -52,7 +52,6 @@ cc_library(
deps = [
":context",
"//src/google/protobuf",
"//src/google/protobuf/testing:file",
"@com_google_absl//absl/container:flat_hash_map",
"@com_google_absl//absl/status",
"@com_google_absl//absl/status:statusor",

@ -7,7 +7,6 @@
#include <string>
#include <vector>
#include "google/protobuf/testing/file.h"
#include "absl/container/flat_hash_map.h"
#include "absl/status/status.h"
#include "absl/status/statusor.h"
@ -22,6 +21,33 @@ namespace protobuf {
namespace compiler {
namespace rust {
// We would love to use //file/base here, but that creates a dependency cycle,
// since //file/base transitively depends on protoc.
namespace {
struct File {
static absl::Status ReadFileToString(const std::string& name,
std::string* output, bool text_mode) {
char buffer[1024];
FILE* file = fopen(name.c_str(), text_mode ? "rt" : "rb");
if (file == nullptr) return absl::NotFoundError("Could not open file");
while (true) {
size_t n = fread(buffer, 1, sizeof(buffer), file);
if (n <= 0) break;
output->append(buffer, n);
}
int error = ferror(file);
if (fclose(file) != 0) return absl::InternalError("Failed to close file");
if (error != 0) {
return absl::InternalError(absl::StrCat("Failed to read the file ", name,
". Error code: ", error));
}
return absl::OkStatus();
}
};
} // namespace
absl::StatusOr<absl::flat_hash_map<std::string, std::string>>
GetImportPathToCrateNameMap(const Options* opts) {
absl::flat_hash_map<std::string, std::string> mapping;

@ -11,6 +11,7 @@ package(
cc_library(
name = "file",
testonly = 1,
srcs = ["file.cc"],
hdrs = ["file.h"],
copts = COPTS,

Loading…
Cancel
Save