parent
fdd9d3c8b5
commit
bcb791a9d0
1 changed files with 236 additions and 0 deletions
@ -0,0 +1,236 @@ |
||||
# **EXPERIMENTAL** |
||||
# |
||||
# See http://sebs.googlecode.com |
||||
# |
||||
# This is an experimental build definition file using the SEBS build system. |
||||
# I (Kenton Varda, maintainer of Protocol Buffers) happen to be the author of |
||||
# SEBS, though SEBS is not a Google project. I'm sticking this file in |
||||
# protobuf's SVN because that's the easiest place for me to put it, and it |
||||
# shouldn't harm anyone. This file is not included in the distribution. |
||||
# |
||||
# Currently, to use this file, you must generate config.h and put it at the |
||||
# top level of the source tree. |
||||
|
||||
_cpp = sebs.import_("//sebs/cpp.sebs") |
||||
|
||||
# ==================================================================== |
||||
# Public targets |
||||
|
||||
protobuf_lite = _cpp.Library( |
||||
name = "protobuf-lite", |
||||
srcs = [ "stubs/common.cc", |
||||
"stubs/once.cc", |
||||
"stubs/hash.cc", |
||||
"stubs/hash.h", |
||||
"stubs/map-util.h", |
||||
"stubs/stl_util-inl.h", |
||||
"extension_set.cc", |
||||
"generated_message_util.cc", |
||||
"message_lite.cc", |
||||
"repeated_field.cc", |
||||
"wire_format_lite.cc", |
||||
"io/coded_stream.cc", |
||||
"io/zero_copy_stream.cc", |
||||
"io/zero_copy_stream_impl_lite.cc" ], |
||||
deps = [ _cpp.SystemLibrary(name = "pthread") ]) |
||||
|
||||
protobuf = _cpp.Library( |
||||
name = "protobuf", |
||||
srcs = [ "stubs/strutil.cc", |
||||
"stubs/strutil.h", |
||||
"stubs/substitute.cc", |
||||
"stubs/substitute.h", |
||||
"stubs/structurally_valid.cc", |
||||
"descriptor.cc", |
||||
"descriptor.pb.cc", |
||||
"descriptor_database.cc", |
||||
"dynamic_message.cc", |
||||
"extension_set_heavy.cc", |
||||
"generated_message_reflection.cc", |
||||
"message.cc", |
||||
"reflection_ops.cc", |
||||
"service.cc", |
||||
"text_format.cc", |
||||
"unknown_field_set.cc", |
||||
"wire_format.cc", |
||||
"io/gzip_stream.cc", |
||||
"io/printer.cc", |
||||
"io/tokenizer.cc", |
||||
"io/zero_copy_stream_impl.cc", |
||||
"compiler/importer.cc", |
||||
"compiler/parser.cc" ], |
||||
deps = [ protobuf_lite, |
||||
_cpp.SystemLibrary(name = "z") ]) |
||||
|
||||
libprotoc = _cpp.Library( |
||||
name = "protoc", |
||||
srcs = [ "compiler/code_generator.cc", |
||||
"compiler/command_line_interface.cc", |
||||
"compiler/cpp/cpp_enum.cc", |
||||
"compiler/cpp/cpp_enum.h", |
||||
"compiler/cpp/cpp_enum_field.cc", |
||||
"compiler/cpp/cpp_enum_field.h", |
||||
"compiler/cpp/cpp_extension.cc", |
||||
"compiler/cpp/cpp_extension.h", |
||||
"compiler/cpp/cpp_field.cc", |
||||
"compiler/cpp/cpp_field.h", |
||||
"compiler/cpp/cpp_file.cc", |
||||
"compiler/cpp/cpp_file.h", |
||||
"compiler/cpp/cpp_generator.cc", |
||||
"compiler/cpp/cpp_helpers.cc", |
||||
"compiler/cpp/cpp_helpers.h", |
||||
"compiler/cpp/cpp_message.cc", |
||||
"compiler/cpp/cpp_message.h", |
||||
"compiler/cpp/cpp_message_field.cc", |
||||
"compiler/cpp/cpp_message_field.h", |
||||
"compiler/cpp/cpp_primitive_field.cc", |
||||
"compiler/cpp/cpp_primitive_field.h", |
||||
"compiler/cpp/cpp_service.cc", |
||||
"compiler/cpp/cpp_service.h", |
||||
"compiler/cpp/cpp_string_field.cc", |
||||
"compiler/cpp/cpp_string_field.h", |
||||
"compiler/java/java_enum.cc", |
||||
"compiler/java/java_enum.h", |
||||
"compiler/java/java_enum_field.cc", |
||||
"compiler/java/java_enum_field.h", |
||||
"compiler/java/java_extension.cc", |
||||
"compiler/java/java_extension.h", |
||||
"compiler/java/java_field.cc", |
||||
"compiler/java/java_field.h", |
||||
"compiler/java/java_file.cc", |
||||
"compiler/java/java_file.h", |
||||
"compiler/java/java_generator.cc", |
||||
"compiler/java/java_helpers.cc", |
||||
"compiler/java/java_helpers.h", |
||||
"compiler/java/java_message.cc", |
||||
"compiler/java/java_message.h", |
||||
"compiler/java/java_message_field.cc", |
||||
"compiler/java/java_message_field.h", |
||||
"compiler/java/java_primitive_field.cc", |
||||
"compiler/java/java_primitive_field.h", |
||||
"compiler/java/java_service.cc", |
||||
"compiler/java/java_service.h", |
||||
"compiler/python/python_generator.cc" ], |
||||
deps = [ protobuf ]) |
||||
|
||||
protoc = _cpp.Binary( |
||||
name = "protoc", |
||||
srcs = [ "compiler/main.cc" ], |
||||
deps = [ libprotoc ]) |
||||
|
||||
# ==================================================================== |
||||
# ProtobufLibrary rule class |
||||
|
||||
class ProtobufLibrary(sebs.Rule): |
||||
argument_spec = sebs.ArgumentSpec(srcs = [sebs.Artifact], |
||||
deps = ([sebs.Rule], []), |
||||
lite = (bool, False)) |
||||
|
||||
def _expand(self, args): |
||||
for dep in args.deps: |
||||
if not isinstance(dep, ProtobufLibrary): |
||||
raise sebs.DefinitionError( |
||||
"Dependency of ProtobufLibrary is not a ProtobufLibrary: %s" % dep) |
||||
|
||||
protoc.expand_once() |
||||
|
||||
protoc_action = self.context.action(self, "protobuf") |
||||
protoc_args = [protoc.binary, "-Isrc", "-Itmp", "-Iinclude","--cpp_out=tmp"] |
||||
|
||||
cpp_srcs = [] |
||||
for src in args.srcs: |
||||
protoc_args.append(src) |
||||
|
||||
# We cannot build .proto files from other packages because the .pb.cc |
||||
# and .pb.h files would be written to that package, and we aren't allowed |
||||
# to write to other packages. |
||||
if self.context.local_filename(src) is None: |
||||
raise sebs.DefinitionError( |
||||
"Source file is not in this package: %s" % src) |
||||
|
||||
cc_artifact = self.context.derived_artifact(src, ".pb.cc", protoc_action) |
||||
header_artifact = self.context.derived_artifact( |
||||
src, ".pb.h", protoc_action) |
||||
|
||||
cpp_srcs.append(cc_artifact) |
||||
cpp_srcs.append(header_artifact) |
||||
|
||||
protoc_action.set_command( |
||||
sebs.SubprocessCommand(protoc_action, protoc_args, implicit = cpp_srcs)) |
||||
|
||||
deps = list(args.deps) |
||||
if args.lite: |
||||
deps.append(protobuf_lite) |
||||
else: |
||||
deps.append(protobuf) |
||||
|
||||
self.__cpp_library = _cpp.Library(srcs = cpp_srcs, deps = deps, |
||||
context = self.context) |
||||
self.outputs = [] |
||||
|
||||
def as_cpp_library(self): |
||||
self.expand_once() |
||||
return self.__cpp_library |
||||
|
||||
# ==================================================================== |
||||
# Tests |
||||
|
||||
_lite_test_protos = ProtobufLibrary( |
||||
srcs = [ "unittest_lite.proto", |
||||
"unittest_import_lite.proto" ], |
||||
lite = True) |
||||
_test_protos = ProtobufLibrary( |
||||
srcs = [ "unittest.proto", |
||||
"unittest_empty.proto", |
||||
"unittest_import.proto", |
||||
"unittest_mset.proto", |
||||
"unittest_optimize_for.proto", |
||||
"unittest_embed_optimize_for.proto", |
||||
"unittest_custom_options.proto", |
||||
"unittest_lite_imports_nonlite.proto", |
||||
"compiler/cpp/cpp_test_bad_identifiers.proto" ], |
||||
deps = [ _lite_test_protos ]) |
||||
|
||||
_test_util = _cpp.Library( |
||||
name = "test_util", |
||||
srcs = [ "test_util.cc", |
||||
"test_util.h", |
||||
"testing/googletest.cc", |
||||
"testing/googletest.h", |
||||
"testing/file.cc", |
||||
"testing/file.h" ], |
||||
deps = [ protobuf, _test_protos, _cpp.SystemLibrary(name = "gtest")] ) |
||||
|
||||
protobuf_lite_test = _cpp.Test( |
||||
srcs = [ "lite_unittest.cc", |
||||
"test_util_lite.cc", |
||||
"test_util_lite.h" ], |
||||
deps = [ _lite_test_protos ]) |
||||
|
||||
protobuf_test = _cpp.Test( |
||||
srcs = [ "stubs/common_unittest.cc", |
||||
"stubs/once_unittest.cc", |
||||
"stubs/strutil_unittest.cc", |
||||
"stubs/structurally_valid_unittest.cc", |
||||
"descriptor_database_unittest.cc", |
||||
"descriptor_unittest.cc", |
||||
"dynamic_message_unittest.cc", |
||||
"extension_set_unittest.cc", |
||||
"generated_message_reflection_unittest.cc", |
||||
"message_unittest.cc", |
||||
"reflection_ops_unittest.cc", |
||||
"repeated_field_unittest.cc", |
||||
"text_format_unittest.cc", |
||||
"unknown_field_set_unittest.cc", |
||||
"wire_format_unittest.cc", |
||||
"io/coded_stream_unittest.cc", |
||||
"io/printer_unittest.cc", |
||||
"io/tokenizer_unittest.cc", |
||||
"io/zero_copy_stream_unittest.cc", |
||||
"compiler/command_line_interface_unittest.cc", |
||||
"compiler/importer_unittest.cc", |
||||
"compiler/parser_unittest.cc", |
||||
"compiler/cpp/cpp_bootstrap_unittest.cc", |
||||
"compiler/cpp/cpp_unittest.cc" ], |
||||
deps = [ protobuf, libprotoc, _test_util, |
||||
_cpp.SystemLibrary(name = "gtest_main") ]) |
Loading…
Reference in new issue