targets_cfg.py 5.3 KB
Newer Older
1
# Copyright (c) Facebook, Inc. and its affiliates. All Rights Reserved.
2 3 4 5
from __future__ import absolute_import
from __future__ import division
from __future__ import print_function
from __future__ import unicode_literals
6

7
rocksdb_target_header_template = \
8
    """# This file \100generated by `python3 buckifier/buckify_rocksdb.py`
9 10 11 12 13
# --> DO NOT EDIT MANUALLY <--
# This file is a Facebook-specific integration for buck builds, so can
# only be validated by Facebook employees.
#
load("@fbcode_macros//build_defs:auto_headers.bzl", "AutoHeaders")
14
load("@fbcode_macros//build_defs:cpp_library.bzl", "cpp_library")
15
load(":defs.bzl", "test_binary")
16 17

REPO_PATH = package_name() + "/"
Y
Yi Wu 已提交
18

19
ROCKSDB_COMPILER_FLAGS = [
Y
Yi Wu 已提交
20 21 22
    "-fno-builtin-memcmp",
    # Needed to compile in fbcode
    "-Wno-expansion-to-defined",
F
Fosco Marotto 已提交
23
    # Added missing flags from output of build_detect_platform
Y
Yi Wu 已提交
24
    "-Wnarrowing",
25
    "-DROCKSDB_NO_DYNAMIC_EXTENSION",
26 27
]

28
ROCKSDB_EXTERNAL_DEPS = [
Y
Yi Wu 已提交
29 30 31 32 33 34 35
    ("bzip2", None, "bz2"),
    ("snappy", None, "snappy"),
    ("zlib", None, "z"),
    ("gflags", None, "gflags"),
    ("lz4", None, "lz4"),
    ("zstd", None),
    ("tbb", None),
36 37
]

Y
Yanqin Jin 已提交
38 39 40
ROCKSDB_OS_DEPS = [
    (
        "linux",
C
Chad Austin 已提交
41
        ["third-party//numa:numa", "third-party//liburing:uring"],
Y
Yanqin Jin 已提交
42 43 44 45 46 47 48 49 50 51 52 53 54
    ),
]

ROCKSDB_OS_PREPROCESSOR_FLAGS = [
    (
        "linux",
        [
            "-DOS_LINUX",
            "-DROCKSDB_FALLOCATE_PRESENT",
            "-DROCKSDB_MALLOC_USABLE_SIZE",
            "-DROCKSDB_PTHREAD_ADAPTIVE_MUTEX",
            "-DROCKSDB_RANGESYNC_PRESENT",
            "-DROCKSDB_SCHED_GETCPU_PRESENT",
55
            "-DROCKSDB_IOURING_PRESENT",
Y
Yanqin Jin 已提交
56
            "-DHAVE_SSE42",
57
            "-DLIBURING",
Y
Yanqin Jin 已提交
58 59 60 61 62 63 64 65 66
            "-DNUMA",
        ],
    ),
    (
        "macos",
        ["-DOS_MACOSX"],
    ),
]

67
ROCKSDB_PREPROCESSOR_FLAGS = [
Y
Yanqin Jin 已提交
68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84
    "-DROCKSDB_PLATFORM_POSIX",
    "-DROCKSDB_LIB_IO_POSIX",
    "-DROCKSDB_SUPPORT_THREAD_LOCAL",

    # Flags to enable libs we include
    "-DSNAPPY",
    "-DZLIB",
    "-DBZIP2",
    "-DLZ4",
    "-DZSTD",
    "-DZSTD_STATIC_LINKING_ONLY",
    "-DGFLAGS=gflags",
    "-DTBB",

    # Added missing flags from output of build_detect_platform
    "-DROCKSDB_BACKTRACE",

Y
Yi Wu 已提交
85 86 87
    # Directories with files for #include
    "-I" + REPO_PATH + "include/",
    "-I" + REPO_PATH,
88
    "-I" + REPO_PATH + "{gtest_dir}",
89
]
90

91
ROCKSDB_ARCH_PREPROCESSOR_FLAGS = {{
S
Siying Dong 已提交
92 93 94
    "x86_64": [
        "-DHAVE_PCLMUL",
    ],
95
}}
Y
Yi Wu 已提交
96 97 98 99 100 101 102

build_mode = read_config("fbcode", "build_mode")

is_opt_mode = build_mode.startswith("opt")

# -DNDEBUG is added by default in opt mode in fbcode. But adding it twice
# doesn't harm and avoid forgetting to add it.
103
ROCKSDB_COMPILER_FLAGS += (["-DNDEBUG"] if is_opt_mode else [])
104 105 106

sanitizer = read_config("fbcode", "sanitizer")

107 108
# Do not enable jemalloc if sanitizer presents. RocksDB will further detect
# whether the binary is linked with jemalloc at runtime.
Y
Yanqin Jin 已提交
109 110 111 112 113 114 115 116 117
ROCKSDB_OS_PREPROCESSOR_FLAGS += ([(
    "linux",
    ["-DROCKSDB_JEMALLOC"],
)] if sanitizer == "" else [])

ROCKSDB_OS_DEPS += ([(
    "linux",
    ["third-party//jemalloc:headers"],
)] if sanitizer == "" else [])
118 119 120 121 122

ROCKSDB_LIB_DEPS = [
    ":rocksdb_lib",
    ":rocksdb_test_lib",
] if not is_opt_mode else [":rocksdb_lib"]
123 124 125 126 127
"""


library_template = """
cpp_library(
128 129 130
    name = "{name}",
    srcs = [{srcs}],
    {headers_attr_prefix}headers = {headers},
131 132
    arch_preprocessor_flags = ROCKSDB_ARCH_PREPROCESSOR_FLAGS,
    compiler_flags = ROCKSDB_COMPILER_FLAGS,
Y
Yanqin Jin 已提交
133 134
    os_deps = ROCKSDB_OS_DEPS,
    os_preprocessor_flags = ROCKSDB_OS_PREPROCESSOR_FLAGS,
135
    preprocessor_flags = ROCKSDB_PREPROCESSOR_FLAGS,
136
    deps = [{deps}],
137
    external_deps = ROCKSDB_EXTERNAL_DEPS,
138 139 140
)
"""

141 142 143 144 145 146 147 148 149 150 151 152 153 154 155
rocksdb_library_template = """
cpp_library(
    name = "{name}",
    srcs = [{srcs}],
    {headers_attr_prefix}headers = {headers},
    arch_preprocessor_flags = ROCKSDB_ARCH_PREPROCESSOR_FLAGS,
    compiler_flags = ROCKSDB_COMPILER_FLAGS,
    os_deps = ROCKSDB_OS_DEPS,
    os_preprocessor_flags = ROCKSDB_OS_PREPROCESSOR_FLAGS,
    preprocessor_flags = ROCKSDB_PREPROCESSOR_FLAGS,
    deps = ROCKSDB_LIB_DEPS,
    external_deps = ROCKSDB_EXTERNAL_DEPS,
)
"""

156 157
binary_template = """
cpp_binary(
Y
Yi Wu 已提交
158 159
    name = "%s",
    srcs = [%s],
160 161 162
    arch_preprocessor_flags = ROCKSDB_ARCH_PREPROCESSOR_FLAGS,
    compiler_flags = ROCKSDB_COMPILER_FLAGS,
    preprocessor_flags = ROCKSDB_PREPROCESSOR_FLAGS,
Y
Yi Wu 已提交
163
    deps = [%s],
164
    external_deps = ROCKSDB_EXTERNAL_DEPS,
165 166 167
)
"""

Y
Yi Wu 已提交
168 169 170 171
test_cfg_template = """    [
        "%s",
        "%s",
        "%s",
172 173
        %s,
        %s,
Y
Yi Wu 已提交
174 175 176
    ],
"""

177
unittests_template = """
178
# [test_name, test_src, test_type, extra_deps, extra_compiler_flags]
Y
Yi Wu 已提交
179 180
ROCKS_TESTS = [
%s]
181 182

# Generate a test rule for each entry in ROCKS_TESTS
Y
Yi Wu 已提交
183 184
# Do not build the tests in opt mode, since SyncPoint and other test code
# will not be included.
185 186
[
    test_binary(
187 188
        extra_compiler_flags = extra_compiler_flags,
        extra_deps = extra_deps,
189 190 191 192
        parallelism = parallelism,
        rocksdb_arch_preprocessor_flags = ROCKSDB_ARCH_PREPROCESSOR_FLAGS,
        rocksdb_compiler_flags = ROCKSDB_COMPILER_FLAGS,
        rocksdb_external_deps = ROCKSDB_EXTERNAL_DEPS,
Y
Yanqin Jin 已提交
193 194
        rocksdb_os_deps = ROCKSDB_OS_DEPS,
        rocksdb_os_preprocessor_flags = ROCKSDB_OS_PREPROCESSOR_FLAGS,
195 196 197 198
        rocksdb_preprocessor_flags = ROCKSDB_PREPROCESSOR_FLAGS,
        test_cc = test_cc,
        test_name = test_name,
    )
199
    for test_name, test_cc, parallelism, extra_deps, extra_compiler_flags in ROCKS_TESTS
200 201
    if not is_opt_mode
]
202
"""