Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- from __future__ import print_function
- import json
- import os.path
- import buck_write
- import moc_rules
- # TODO - linkFlags
- SRC_DIR = '/Users/ilyaklyuchnikov/ovrsource/'
- SHARED_TGS = []
- START = """# BUILD FILE SYNTAX: PYTHON_DSL
- load(
- "//Tools/buck:configure_file.bzl",
- "configure_file",
- )
- load(
- "//Tools/buck:add_builtin_configs.bzl",
- "add_builtin_configs",
- )
- command_alias(
- name='moc',
- exe = "//third-party/qt/qt_5.10.0:moc",
- )
- """
- OVERRIDEN = {
- 'TelemetryConfig': {
- 'target.rule': 'configure_file',
- 'target': 'TelemetryConfig',
- 'input': 'Software/CoreTech/src/Libs/Telemetry/TelemetryConfig.h.in',
- 'output': 'TelemetryConfig.h',
- 'header_namespace': '',
- 'defs': {},
- },
- 'BuildFlags': {
- 'target.rule': 'configure_file',
- 'target': 'BuildFlags',
- 'input': 'Software/CoreTech/cmake/BuildFlags/BuildFlags.h.in',
- 'output': 'BuildFlags.h',
- 'header_namespace': '',
- 'defs': {},
- },
- 'BoltConfig': {
- 'target.rule': 'configure_file',
- 'target': 'BoltConfig',
- 'input': 'Software/CoreTech/bolt/CompileDefinitions.h.in',
- 'output': 'CompileDefinitions.h',
- 'header_namespace': '',
- 'defs': {},
- },
- 'ConstellationTrackingConfig': {
- 'target.rule': 'configure_file',
- 'target': 'ConstellationTrackingConfig',
- 'input': 'Software/CoreTech/src/Engines/Tracking/ConstellationTrackingConfig.h.in',
- 'output': 'ConstellationTrackingConfig.h',
- 'header_namespace': '',
- 'defs': {},
- },
- 'viper_core_CompileDefinitions': {
- 'target.rule': 'configure_file',
- 'target': 'viper_core_CompileDefinitions',
- 'input': 'Software/CoreTech/viper/viper/core/CompileDefinitions.h.in',
- 'output': 'CompileDefinitions.h',
- 'header_namespace': 'viper/core',
- 'defs': {},
- },
- 'RecordingCompileDefinitions': {
- 'target.rule': 'configure_file',
- 'target': 'RecordingCompileDefinitions',
- 'input': 'Software/CoreTech/src/Management/Recording/RecordingCompileDefinitions.h.in',
- 'output': 'RecordingCompileDefinitions.h',
- 'header_namespace': '',
- 'defs': {},
- },
- 'AthenaVersion': {
- 'target.rule': 'configure_file',
- 'target': 'AthenaVersion',
- 'input': 'Software/CoreTech/src/Loaders/Athena/version.h.in',
- 'output': 'version.h',
- 'header_namespace': '',
- 'defs': {},
- },
- 'Athena2Version': {
- 'target.rule': 'configure_file',
- 'target': 'Athena2Version',
- 'input': 'Software/CoreTech/src/Loaders/Athena2/version.h.in',
- 'output': 'version.h',
- 'header_namespace': '',
- 'defs': {},
- },
- 'TestConfig': {
- 'target.rule': 'configure_file',
- 'target': 'TestConfig',
- 'input': 'Software/CoreTech/cmake/TestConfig/TestConfig.h.in',
- 'output': 'TestConfig.h',
- 'header_namespace': '',
- 'defs': {},
- },
- 'ResourcesInterface': {
- 'target.rule': 'configure_file',
- 'target': 'ResourcesInterface',
- 'input': 'Software/CoreTech/src/Libs/Visualization/ResourcesInterface.h.in',
- 'output': 'ResourcesInterface.h',
- 'header_namespace': '',
- 'defs': {},
- },
- 'OptimizerCompileDefinitions': {
- 'target.rule': 'configure_file',
- 'target': 'OptimizerCompileDefinitions',
- 'input': 'Software/CoreTech/optimizer/CompileDefinitions.h.in',
- 'output': 'CompileDefinitions.h',
- 'header_namespace': 'optimizer',
- 'defs': {},
- },
- 'MixedrealityCompileDefinitions': {
- 'target.rule': 'configure_file',
- 'target': 'MixedrealityCompileDefinitions',
- 'input': 'Software/CoreTech/mixedreality/mr/core/CompileDefinitions.h.in',
- 'output': 'CompileDefinitions.h',
- 'header_namespace': 'mr/core',
- 'defs': {},
- },
- 'SourceCodeVersion_gen': {
- 'target.rule': 'genrule',
- 'name': 'SourceCodeVersion_gen',
- 'out': 'SourceCodeVersion.cpp',
- 'cmd': 'echo "#include <SourceCodeVersion/SourceCodeVersion.h>" > $OUT && '
- 'echo "const char* sourcecodeversion = \\\\"VERSIONHASH\\\\";" >> $OUT && '
- 'echo "const char* sourcecodebranch = \\\\"BRANCHNAME\\\\";" >> $OUT',
- },
- }
- IGNORED = {
- 'TracerExample-disabled',
- 'bolt_comet_interface-disabled',
- 'comet_app_patchsearch',
- 'comet_app_patchwarp',
- 'neon_app_pyramid',
- 'comet_app_pyramid',
- 'comet_app_corner',
- # complicated moc
- 'TrackLab',
- 'TrackLabOld',
- # doesn't work with ninja as well
- 'asterix_visual_debugger',
- # different versions of gtest
- 'unit_test_april_tag_detector',
- 'unit_test_viper_exposure_control_base',
- }
- def generate_target(cmake_target, mapping, out):
- name = cmake_target['name']
- if name == 'SourceCodeVersion':
- buck_write.print_json_target(out, OVERRIDEN['SourceCodeVersion_gen'])
- if name in OVERRIDEN:
- buck_write.print_json_target(out, OVERRIDEN[name])
- return
- if name in IGNORED:
- return
- source_directory = cmake_target['sourceDirectory']
- rel_dir = os.path.relpath(source_directory, start=SRC_DIR)
- file_groups = cmake_target.get('fileGroups', [])
- sources = []
- headers = []
- local_sources = []
- local_headers = []
- compiler_flags = []
- includes = []
- system_includes = []
- defines = []
- is_test = False
- # TODO - add headers here
- for file_group in file_groups:
- if 'language' in file_group:
- language = file_group['language']
- if language == 'CXX':
- if 'sources' in file_group:
- if len(sources) > 0:
- raise Exception('sources! {}'.format(name))
- local_sources.extend(file_group['sources'])
- if 'compileFlags' in file_group:
- compiler_flags = file_group['compileFlags'].split()
- if 'includePath' in file_group:
- for i in file_group['includePath']:
- p = i['path']
- if 'googletest' in p:
- is_test = True
- continue
- if p.startswith('/Users/ilyaklyuchnikov'):
- p = os.path.relpath(p, start=SRC_DIR)
- includes.append(p)
- if "isSystem" in i:
- system_includes.append(p)
- if 'defines' in file_group:
- defines = file_group['defines']
- elif file_group['isGenerated'] is False:
- local_headers.extend(file_group['sources'])
- for local_src in local_sources:
- if local_src.endswith('SourceCodeVersion.cpp'):
- continue
- if local_src.endswith('mocs_compilation.cpp'):
- continue
- if local_src.startswith('../'):
- # print('trying normalize {}'.format(local_src))
- abs_path = os.path.normpath(os.path.join(source_directory, local_src))
- if os.path.isfile(abs_path):
- # print('normalized to {}'.format(abs_path))
- src = os.path.relpath(abs_path, start=SRC_DIR)
- sources.append(src)
- else:
- print('skipping {}'.format(local_src))
- continue
- src = os.path.join(rel_dir, local_src)
- sources.append(src)
- for local_hdr in local_headers:
- if local_hdr.startswith('../'):
- print('skipping {}'.format(local_hdr))
- continue
- hdr = os.path.join(rel_dir, local_hdr)
- headers.append(hdr)
- deps = [':BuildFlags']
- linker_flags = []
- if 'linkLibraries' in cmake_target:
- _linker_flags = cmake_target['linkLibraries'].split()
- for lg in _linker_flags:
- if 'googletest' in lg:
- continue
- lg = lg.replace(SRC_DIR, '')
- if lg == '-lviper_test':
- continue
- if lg.startswith('-'):
- linker_flags.append(lg)
- continue
- i = lg.find("Software/CoreTech")
- if i != -1:
- lg = lg[i:]
- linker_flags.append(lg)
- continue
- i = lg.find("third-party/qt/")
- if i != -1:
- lg = lg[i:]
- linker_flags.append(lg)
- continue
- i = lg.find("third-party/realsense/")
- if i != -1:
- lg = lg[i:]
- linker_flags.append(lg)
- continue
- i = lg.rfind('/')
- if i != -1 and lg.endswith('.a'):
- lib = lg[i + 1:]
- if lib in mapping:
- dep = mapping[lib]
- deps.append(':{}'.format(dep))
- continue
- i = lg.rfind('/')
- if i != -1 and lg.endswith('.dylib'):
- lib = lg[i + 1:]
- if lib in mapping:
- dep = mapping[lib]
- deps.append(':{}'.format(dep))
- continue
- linker_flags.append(lg)
- if is_test:
- deps.append('//third-party/googletest:gtest')
- if name == 'MontereyRecorder':
- linker_flags.append('Software/CoreTech/vision-third-party-libs/lz4/1.8.1.2/libs/x64-macos/liblz4.a')
- preprocessor_flags = []
- for define in defines:
- if define.startswith('QT_TESTCASE_BUILDDIR'):
- continue
- preprocessor_flags.append('-D{}'.format(define))
- include_qt = False
- for include in includes:
- if include.startswith('third-party/qt/qt_5.10.0/macos-x64/lib'):
- include_qt = True
- if include.endswith('.framework'):
- continue
- if include == 'viper/viper/core/viper_core_BuiltInConfigs':
- if name != 'viper_core_BuiltInConfigs':
- deps.append(':viper_core_BuiltInConfigs')
- continue
- if include == 'viper/viper/core/viper_core_CompileDefinitions':
- deps.append(':viper_core_CompileDefinitions')
- continue
- if include == 'cmake/TestConfig/TestConfig':
- deps.append(':TestConfig')
- continue
- if include == 'TrackingComponents/Libs/Visualization/ResourcesInterface':
- deps.append(':ResourcesInterface')
- continue
- if include == 'src/Libs/Telemetry/TelemetryConfig':
- deps.append(':TelemetryConfig')
- continue
- if include == 'optimizer/OptimizerCompileDefinitions':
- deps.append(':OptimizerCompileDefinitions')
- continue
- if include == 'mixedreality':
- deps.append(':MixedrealityCompileDefinitions')
- continue
- if include == 'TrackingComponents/Engines/ConstellationTrackingConfig':
- deps.append(':ConstellationTrackingConfig')
- continue
- if include == 'TrackingComponents/Management/Recording/RecordingCompileDefinitions':
- deps.append(':RecordingCompileDefinitions')
- continue
- if include == 'bolt/include':
- deps.append(':BoltConfig')
- continue
- if include == 'TrackingComponents/Loaders/Athena/AthenaVersion':
- deps.append(':AthenaVersion')
- continue
- if include == 'TrackingComponents/Loaders/Athena2/Athena2Version':
- deps.append(':Athena2Version')
- continue
- if include in system_includes:
- preprocessor_flags.append('-isystem')
- preprocessor_flags.append(include)
- else:
- preprocessor_flags.append('-I')
- preprocessor_flags.append(include)
- if include_qt:
- preprocessor_flags.append('-iframework')
- preprocessor_flags.append('third-party/qt/qt_5.10.0/macos-x64/lib')
- if name == 'SourceCodeVersion':
- sources.append(':SourceCodeVersion_gen')
- # if name == 'bolt_lib':
- # print(BOLT_CONFIG, file=out)
- # deps.append(':BoltConfig')
- if name == 'VRSplayer':
- sources.append(':moc_FramePlayer')
- sources.append(':moc_FrameWidget')
- sources.append(':moc_PlayerUI')
- sources.append(':moc_VideoPlayer')
- preprocessor_flags.append('-ISoftware/CoreTech/src/Loaders/VRSplayer')
- if name == 'Athena':
- sources.append(':moc_Athena_fileutilities')
- sources.append(':moc_Athena_DataTreeInterface')
- sources.append(':moc_Athena_glbaseview')
- sources.append(':moc_Athena_visionlibinterface')
- preprocessor_flags.append('-ISoftware/CoreTech/src/Loaders/Athena')
- if name == 'Athena2':
- sources.append(':moc_Athena2_fileutilities')
- sources.append(':moc_Athena2_DataTreeInterface')
- sources.append(':moc_Athena2_glbaseview')
- sources.append(':moc_Athena2_ApolloAdapter')
- preprocessor_flags.append('-ISoftware/CoreTech/src/Loaders/Athena2')
- if name == 'Graphing':
- sources.append(':moc_Graphing_FPSDisplay')
- sources.append(':moc_Graphing_QtGraphRenderer')
- sources.append(':moc_Graphing_qcustomplot')
- preprocessor_flags.append('-ISoftware/CoreTech/src/Libs/Graphing')
- buck_target = {}
- buck_target['name'] = cmake_target['name']
- if len(sources) > 0:
- buck_target['srcs'] = sources
- if len(headers) > 0:
- buck_target['raw_headers'] = headers
- buck_target['preprocessor_flags'] = preprocessor_flags
- buck_target['compiler_flags'] = compiler_flags
- buck_target['deps'] = deps
- if len(linker_flags) > 0:
- buck_target['linker_flags'] = linker_flags
- if cmake_target['type'] == 'SHARED_LIBRARY':
- buck_target['link_style'] = 'static'
- buck_target['preferred_linkage'] = 'shared'
- SHARED_TGS.append(name)
- # pass
- if name == 'viper_core_BuiltInConfigs':
- buck_target['header_namespace'] = 'viper/core'
- buck_target['cpp_filename'] = 'BuiltInConfigs.cpp'
- buck_target['header_filename'] = 'BuiltInConfigs.h'
- buck_target['class_name'] = 'BuiltInConfigs'
- buck_target['namespace'] = 'viper'
- buck_target['config_files'] = buck_write.Glob('Software/CoreTech/viper/*.conf')
- buck_write.print_add_builtin_configs(out, **buck_target)
- return
- if name == 'TestConfigs':
- buck_target['header_namespace'] = ''
- buck_target['cpp_filename'] = 'TestConfigs.cpp'
- buck_target['header_filename'] = 'TestConfigs.h'
- buck_target['class_name'] = 'TestConfigs'
- buck_target['namespace'] = 'coretech::config'
- buck_target['config_files'] = [
- 'Software/CoreTech/src/Libs/Config/test/configs/default/test.conf',
- 'Software/CoreTech/src/Libs/Config/test/configs/default/additional.conf',
- ]
- buck_write.print_add_builtin_configs(out, **buck_target)
- return
- if name == 'DuplicateConfigs':
- buck_target['header_namespace'] = ''
- buck_target['cpp_filename'] = 'DuplicateConfigs.cpp'
- buck_target['header_filename'] = 'DuplicateConfigs.h'
- buck_target['class_name'] = 'DuplicateConfigs'
- buck_target['namespace'] = 'coretech::config'
- buck_target['config_files'] = [
- 'Software/CoreTech/src/Libs/Config/test/configs/duplicate/test.conf',
- ]
- buck_write.print_add_builtin_configs(out, **buck_target)
- return
- if name == 'IncompatibleSizeConfigs':
- buck_target['header_namespace'] = ''
- buck_target['cpp_filename'] = 'IncompatibleSizeConfigs.cpp'
- buck_target['header_filename'] = 'IncompatibleSizeConfigs.h'
- buck_target['class_name'] = 'IncompatibleSizeConfigs'
- buck_target['namespace'] = 'coretech::config'
- buck_target['config_files'] = [
- 'Software/CoreTech/src/Libs/Config/test/configs/incompatible_size/test.conf',
- ]
- buck_write.print_add_builtin_configs(out, **buck_target)
- return
- if name == 'IncompatibleElementConfigs':
- buck_target['header_namespace'] = ''
- buck_target['cpp_filename'] = 'IncompatibleElementConfigs.cpp'
- buck_target['header_filename'] = 'IncompatibleElementConfigs.h'
- buck_target['class_name'] = 'IncompatibleElementConfigs'
- buck_target['namespace'] = 'coretech::config'
- buck_target['config_files'] = [
- 'Software/CoreTech/src/Libs/Config/test/configs/incompatible_element/test.conf',
- ]
- buck_write.print_add_builtin_configs(out, **buck_target)
- return
- if cmake_target['type'] == 'EXECUTABLE':
- buck_write.print_cxx_binary(out, **buck_target)
- else:
- buck_write.print_cxx_library(out, **buck_target)
- def generate_targets(cmake_targets, buck_out):
- mapping = {}
- for cmake_target in cmake_targets:
- type = cmake_target['type']
- if type == 'STATIC_LIBRARY':
- mapping[cmake_target['fullName']] = cmake_target['name']
- if type == 'SHARED_LIBRARY':
- mapping[cmake_target['fullName']] = cmake_target['name']
- print(START, file=buck_out)
- print(moc_rules.MOC_RULES, file=buck_out)
- buck_write.print_json_target(buck_out, OVERRIDEN['BoltConfig'])
- buck_write.print_json_target(buck_out, OVERRIDEN['MixedrealityCompileDefinitions'])
- for cmake_target in cmake_targets:
- generate_target(cmake_target, mapping, buck_out)
- def generate1(input):
- with open(input, 'r') as infile:
- codemodel_json = json.load(infile)
- codemodel = codemodel_json[0]
- generate(codemodel)
- def generate(cmake_code_model):
- projects = cmake_code_model['configurations'][0]['projects']
- for project in projects:
- if project['name'] == 'CoreTech':
- top_project = project
- targets = top_project['targets']
- targets.sort(key=lambda r: r['name'])
- # with open('/Users/ilyaklyuchnikov/ovrsource/BUCK_CORETECH_MAC_10', 'w') as buck_out:
- with open('BUCK_CORETECH_MAC1', 'w') as buck_out:
- generate_targets(targets, buck_out)
- stgs = ''
- for tg in SHARED_TGS:
- stgs = stgs + '//:{}#default,shared '.format(tg)
- print(stgs)
- def main():
- # import sys
- # print(sys.argv)
- with open('export/01/codemodel.json') as f:
- generate(json.load(f)[0])
- if __name__ == '__main__':
- main()
Add Comment
Please, Sign In to add comment