def CompileProto(self, source): """Compiles a protocol buffer definition into C++/Python/Java code. Args: source: .proto file Path. """ proto_source = Path(self, source) assert proto_source.extension == 'proto', ( 'Expecting a .proto file path, got: %s' % source) proto_source.AssertExists() misc.MakeDirectories(self._output_dir) command = ([ self.vars.PROTO_COMPILER, '--proto_path=%s' % self._source_dir, '--proto_path=%s' % self._output_dir, '--cpp_out=%s' % self._output_dir, # '--java_out=%s' % os.path.join(self._output_dir, 'java') # '--python_out%s' % os.path.join(self._output_dir, 'python') ] + self.vars.PROTO_COMPILER_FLAGS + [proto_source.apath]) logging.info('Compiling proto: %s', source) self.Exec(command)
def __init__(self, base_dir, output_dir=None, source_dir=None, metadata_file=None): """Initializes the build environment. Args: base_dir: Absolute base directory path. output_dir: Output directory, relative to base_dir. source_dir: Source directory, relative to base_dir. metadata_file: Metadata file name, relative to base_dir. """ output_dir = output_dir or Environment.DEFAULT_OUTPUT_DIR source_dir = source_dir or Environment.DEFAULT_SOURCE_DIR metadata_file = metadata_file or Environment.METADATA_FILE self._base_dir = base_dir assert os.path.exists( self._base_dir), ('Base directory does not exist: %s' % base_dir) self._output_dir = os.path.join(self._base_dir, output_dir) misc.MakeDirectories(self._output_dir) self._source_dir = os.path.join(self._base_dir, source_dir) assert os.path.exists( self._source_dir), ('Source directory does not exist: %s' % self._source_dir) self._metadata_file = os.path.join(self._base_dir, metadata_file) self._metadata = Metadata(self._metadata_file) self._metadata.ReadFromFile() logging.info('Base directory: %s', self._base_dir) logging.info('Source directory: %s', self._source_dir) logging.info('Output directory: %s', self._output_dir) logging.info('Metadata file: %s', self._metadata_file) # ---------------------------------------------------------------------- self._vars = ConfigVars() self.vars.CXX_COMPILER = FindGCC() #CXX_COMPILER = '/usr/bin/clang' logging.info('Using gcc: %s', self.vars.CXX_COMPILER) self.vars.CXX_COMPILER_COMMAND = [self.vars.CXX_COMPILER] if FLAGS.use_distcc: self.vars.CXX_COMPILER_COMMAND.insert(0, 'distcc') self.vars.CXX_FLAGS = ['-Wall', '-g', '-fPIC', '-std=c++0x'] self.vars.AR = '/usr/bin/ar' self.vars.RANLIB = '/usr/bin/ranlib' self.vars.LINKER = self.vars.CXX_COMPILER self.vars.LINK_OPTIONS = [ '-g', '-std=c++0x', '-lstdc++', '-lboost_regex' ] self.vars.PROTO_COMPILER = '/usr/bin/protoc' self.vars.PROTO_COMPILER_FLAGS = [] # -------------------------------------- # External libraries self.vars.PKG_CONFIG = 'pkg-config' self.vars.GTEST_CONFIG = 'gtest-config' # Google flags GFLAGS_CXX_FLAGS = ( self.ShellOutput('{PKG_CONFIG} --cflags libgflags')).split() GFLAGS_LINK_OPTIONS = ( self.ShellOutput('{PKG_CONFIG} --libs libgflags')).split() self.vars.CXX_FLAGS.extend(GFLAGS_CXX_FLAGS) self.vars.LINK_OPTIONS.extend(GFLAGS_LINK_OPTIONS) # self.vars.CXX_FLAGS += ['-I/R/gflags/current/include/'] # self.vars.LINK_OPTIONS += ['-L/R/gflags/current/lib/', '-lgflags'] # Google logging GLOG_CXX_FLAGS = ( self.ShellOutput('{PKG_CONFIG} --cflags libglog')).split() GLOG_LINK_OPTIONS = ( self.ShellOutput('{PKG_CONFIG} --libs libglog')).split() self.vars.CXX_FLAGS.extend(GLOG_CXX_FLAGS) self.vars.LINK_OPTIONS.extend(GLOG_LINK_OPTIONS) # self.vars.CXX_FLAGS += ['-I/R/glog/current/include/'] # self.vars.LINK_OPTIONS += ['-L/R/glog/current/lib/', '-lglog'] # Protobuf self.vars.PROTOBUF_CXX_FLAGS = ( self.ShellOutput('{PKG_CONFIG} --cflags protobuf').split()) self.vars.PROTOBUF_LINK_OPTIONS = ( self.ShellOutput('{PKG_CONFIG} --libs protobuf').split()) self.vars.CXX_FLAGS.extend(self.vars.PROTOBUF_CXX_FLAGS) self.vars.LINK_OPTIONS.extend(self.vars.PROTOBUF_LINK_OPTIONS) # Google unit-tests self.vars.GTEST_CXX_FLAGS = ( self.ShellOutput('{GTEST_CONFIG} --cppflags --cxxflags').split()) self.vars.GTEST_LINK_OPTIONS = ( self.ShellOutput('{GTEST_CONFIG} --ldflags --libs').split()) self.vars.CXX_FLAGS.extend(self.vars.GTEST_CXX_FLAGS) #LINK_OPTIONS.extend(GTEST_LINK_OPTIONS) # Added for test binaries only # GMP / MPFR # GMP_LINK_OPTIONS = ['-lgmp', '-lgmpxx', '-lmpfr'] # LINK_OPTIONS.extend(GMP_LINK_OPTIONS) self.vars.CXX_FLAGS += ['-I/R/mpfr/current/include/'] self.vars.LINK_OPTIONS += ['-L/R/mpfr/current/lib/', '-lmpfr'] self.vars.CXX_FLAGS += ['-I/R/gmp/current/include/'] self.vars.LINK_OPTIONS += ['-L/R/gmp/current/lib/', '-lgmp', '-lgmpxx']