scons: Consolidate the ProtoBuf code.

The ProtoBuf support in src/SConscript was split into two parts, one
where the ProtoBuf sources were declared, and the other where scons was
told how to buld the .cc and .hh files and the .cc was added to the
build.

As far as I can tell, there was no real reason to have things split up
like that, at least not currently. This change moves everything into
the ProtoBuf class definition, and this should behave the same as
before but be a little easier to understand and maintain.

Change-Id: I02320f50ece53d90c14b5062bd6b1167210f46c3
Reviewed-on: https://gem5-review.googlesource.com/c/public/gem5/+/37275
Reviewed-by: Nikos Nikoleris <nikos.nikoleris@arm.com>
Maintainer: Gabe Black <gabe.black@gmail.com>
Tested-by: kokoro <noreply+kokoro@google.com>
This commit is contained in:
Gabe Black
2020-11-08 04:55:38 -08:00
committed by Gabe Black
parent 598f15cf24
commit 0957ab118c

View File

@@ -393,6 +393,9 @@ class ProtoBuf(SourceFile):
'''Specify the source file, and any tags'''
super(ProtoBuf, self).__init__(source, tags, add_tags)
if not env['HAVE_PROTOC'] or not env['HAVE_PROTOBUF']:
error('Got protobuf to build, but lacks support!')
# Get the file name and the extension
modname,ext = self.extname
assert ext == 'proto'
@@ -402,6 +405,20 @@ class ProtoBuf(SourceFile):
self.cc_file = self.tnode.dir.File(modname + '.pb.cc')
self.hh_file = self.tnode.dir.File(modname + '.pb.h')
# Use both the source and header as the target, and the .proto
# file as the source. When executing the protoc compiler, also
# specify the proto_path to avoid having the generated files
# include the path.
env.Command([self.cc_file, self.hh_file], self.tnode,
MakeAction('${PROTOC} --cpp_out ${BUILDDIR} '
'--proto_path ${BUILDDIR} '
'${SOURCE.get_abspath()}',
Transform("PROTOC")))
# Add the C++ source file
Source(self.cc_file, tags=self.tags,
append={'CXXFLAGS': '-Wno-array-bounds'})
exectuable_classes = []
class ExecutableMeta(type):
@@ -1016,25 +1033,6 @@ if env['USE_PYTHON']:
env.Depends(cc_file, depends + extra_deps)
Source(cc_file)
# Build all protocol buffers if we have got protoc and protobuf available
if env['HAVE_PROTOC'] and env['HAVE_PROTOBUF']:
for proto in ProtoBuf.all:
# Use both the source and header as the target, and the .proto
# file as the source. When executing the protoc compiler, also
# specify the proto_path to avoid having the generated files
# include the path.
env.Command([proto.cc_file, proto.hh_file], proto.tnode,
MakeAction('${PROTOC} --cpp_out ${BUILDDIR} '
'--proto_path ${BUILDDIR} '
'${SOURCE.get_abspath()}',
Transform("PROTOC")))
# Add the C++ source file
Source(proto.cc_file, tags=proto.tags,
append={'CXXFLAGS': '-Wno-array-bounds'})
elif ProtoBuf.all:
error('Got protobuf to build, but lacks support!')
#
# Handle debug flags
#