mirror of
https://github.com/facebook/sapling.git
synced 2024-10-10 08:47:12 +03:00
097bc477de
Summary: Update the DEFS and .buckconfig files so that the C++ code can be built successfully with buck in our github repository. Reviewed By: wez Differential Revision: D4633749 fbshipit-source-id: a07a6e664471237fcc2d13a8be8b92efa3a101bf
212 lines
4.9 KiB
Plaintext
212 lines
4.9 KiB
Plaintext
# Copyright (c) 2016-present, Facebook, Inc.
|
|
# All rights reserved.
|
|
#
|
|
# This source code is licensed under the BSD-style license found in the
|
|
# LICENSE file in the root directory of this source tree. An additional grant
|
|
# of patent rights can be found in the PATENTS file in the same directory.
|
|
|
|
# This file creates an adapter between some internal Facebook-isms and the
|
|
# public version of Buck. Over time, this adapter should be unnecesary.
|
|
|
|
|
|
def cpp_library(
|
|
name,
|
|
srcs=None,
|
|
headers=None,
|
|
deps=None,
|
|
output_subdir=None,
|
|
external_deps=None,
|
|
):
|
|
# TODO: Handle output_subdir.
|
|
cxx_library(
|
|
name=name,
|
|
srcs=srcs,
|
|
exported_headers=headers,
|
|
deps=_translate_deps(deps, external_deps),
|
|
visibility=[
|
|
'PUBLIC',
|
|
],
|
|
)
|
|
|
|
|
|
def cpp_binary(
|
|
name,
|
|
output_subdir=None,
|
|
srcs=None,
|
|
deps=None,
|
|
external_deps=None,
|
|
):
|
|
# TODO: Handle output_subdir.
|
|
cxx_binary(
|
|
name=name,
|
|
srcs=srcs,
|
|
deps=_translate_deps(deps, external_deps),
|
|
)
|
|
|
|
|
|
def cpp_unittest(
|
|
name,
|
|
srcs=None,
|
|
headers=None,
|
|
deps=None,
|
|
external_deps=None,
|
|
):
|
|
cxx_test(
|
|
name=name,
|
|
srcs=srcs,
|
|
headers=None,
|
|
deps=_translate_deps(deps, external_deps),
|
|
)
|
|
|
|
def cpp_benchmark(
|
|
name,
|
|
srcs=None,
|
|
deps=None,
|
|
external_deps=None,
|
|
):
|
|
cxx_binary(
|
|
name=name,
|
|
srcs=srcs,
|
|
deps=_translate_deps(deps, external_deps),
|
|
)
|
|
|
|
|
|
original_python_binary = python_binary
|
|
def python_binary(
|
|
name,
|
|
srcs=None,
|
|
gen_srcs=None,
|
|
main_module=None,
|
|
deps=None,
|
|
):
|
|
# TODO: Handle gen_srcs.
|
|
original_python_library(
|
|
name=name + '.lib',
|
|
deps=_translate_deps(deps),
|
|
)
|
|
original_python_binary(
|
|
name=name,
|
|
main_module=main_module,
|
|
visibility=[
|
|
'PUBLIC',
|
|
],
|
|
deps=[':%s.lib' % (name,)]
|
|
)
|
|
|
|
|
|
original_thrift_library = thrift_library
|
|
def thrift_library(
|
|
name,
|
|
thrift_srcs=None,
|
|
languages=None,
|
|
deps=None,
|
|
thrift_args=None,
|
|
py_base_module=None,
|
|
):
|
|
original_thrift_library(
|
|
name=name,
|
|
srcs=thrift_srcs,
|
|
deps=_translate_deps(deps),
|
|
visibility=['PUBLIC'],
|
|
)
|
|
|
|
original_python_library = python_library
|
|
def python_library(name, deps=None, **kwargs):
|
|
original_python_library(
|
|
name=name,
|
|
deps=_translate_deps(deps),
|
|
visibility=kwargs.pop('visibility', ['PUBLIC']),
|
|
**kwargs
|
|
)
|
|
|
|
|
|
def python_unittest(**kwargs):
|
|
# TODO
|
|
pass
|
|
|
|
def buck_genrule(**kwargs):
|
|
# TODO
|
|
pass
|
|
|
|
|
|
def _translate_deps(deps, external_deps=None):
|
|
# The translation process may result in duplicates, so use a set
|
|
# to make sure we filter out duplicates.
|
|
translated_deps = set()
|
|
for dep in (deps or ()):
|
|
translated = _translate_dep(dep)
|
|
if translated is not None:
|
|
translated_deps.add(translated)
|
|
|
|
for dep in (external_deps or ()):
|
|
translated = _translate_external_dep(dep)
|
|
if translated is not None:
|
|
translated_deps.add(translated)
|
|
|
|
if not translated_deps:
|
|
return None
|
|
return list(translated_deps)
|
|
|
|
|
|
def _translate_dep(dep):
|
|
import re
|
|
dep = re.sub('^@/', '//', dep)
|
|
|
|
# Translate thrift_library() suffixes
|
|
dep = re.sub('-cpp2$', '#cpp2', dep)
|
|
dep = re.sub('-py$', '#py', dep)
|
|
dep = re.sub('-java$', '#java', dep)
|
|
|
|
m = re.match('//(folly|rocksdb|wangle|thrift)[/:]', dep)
|
|
if m:
|
|
libname = m.group(1)
|
|
if libname == 'thrift':
|
|
dep = '//external:thriftcpp2'
|
|
else:
|
|
dep = '//external:%s' % libname
|
|
return dep
|
|
|
|
|
|
def _translate_external_dep(dep):
|
|
if isinstance(dep, tuple):
|
|
# This is a 2-tuple or 3-tuple of
|
|
# project, version constraints, library
|
|
project = dep[0]
|
|
if len(dep) == 3:
|
|
lib = dep[2]
|
|
else:
|
|
lib = project
|
|
else:
|
|
project = dep
|
|
lib = dep
|
|
|
|
if project == 'glog':
|
|
return '//external:glog'
|
|
elif project == 'openssl':
|
|
if lib == 'ssl':
|
|
return '//external:openssl_ssl'
|
|
elif lib == 'crypto':
|
|
return '//external:openssl_crypto'
|
|
else:
|
|
raise Exception('unknown openssl lib %r' % lib)
|
|
elif project == 'fuse':
|
|
return '//external:fuse'
|
|
elif project == 'libgit2':
|
|
return '//external:libgit2'
|
|
elif project == 'boost':
|
|
if lib == 'boost':
|
|
# This is headers-only, nothing to add for now.
|
|
return None
|
|
elif lib == 'boost_filesystem':
|
|
return '//external:boost_filesystem'
|
|
else:
|
|
raise Exception('unknown boost lib %r' % lib)
|
|
elif project == 'gtest':
|
|
# buck will add this dependency automatically for
|
|
# cxx_test() rules
|
|
return None
|
|
elif project == 'gmock':
|
|
return '//external:gmock'
|
|
else:
|
|
raise Exception('unhandled external dependency: %r' % project)
|