sapling/DEFS
Adam Simpkins 097bc477de get the open source build working
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
2017-03-06 20:28:48 -08:00

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)