scons: Consolidate the ProtoBuf code.
authorGabe Black <gabeblack@google.com>
Sun, 8 Nov 2020 12:55:38 +0000 (04:55 -0800)
committerGabe Black <gabe.black@gmail.com>
Thu, 12 Nov 2020 22:08:02 +0000 (22:08 +0000)
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>
src/SConscript

index 9797be38e324c014dcc0781e5a926153fd159d19..9ac20eb5d6675db27e545b71a579f9c7aba646e5 100644 (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
 #