Что эквивалентно $ {ANDROID_ABI} при связывании stati c lib в Bazel? - PullRequest
0 голосов
/ 23 января 2020

В cmake вы можете указать $ {ANDROID_ABI} при компоновке библиотеки c C ++ для получения правильной версии библиотеки (например, arm64-v8a, armeabi-v7a, x86_64 и др. c)

target_link_libraries(mylib debug
        foo/lib/${ANDROID_ABI}/libfoo.a

Что эквивалентно этому в Базеле? Если у меня есть платформа с указанием c версий libfoo.a в foo / lib / arm64-v8a, foo / lib / arm64-v8a, foo / lib / arm64-v8a и др. c. Как мне правильно связать в Базеле?

1 Ответ

1 голос
/ 27 января 2020

Вы можете использовать select(), config_setting и --fat_apk_cpu для этого:

cc_library(
  name = "foo",
  srcs = select({
    "arm64-v8a": ["foo/lib/arm64-v8a/libfoo.a"],
    "armeabi-v7a": ["foo/lib/armeabi-v7a/libfoo.a"],
    "x86": ["foo/lib/x86/libfoo.a"],
    "x86_64": ["foo/lib/x86_64/libfoo.a"],
  }),
)

config_setting(
  name = "arm64-v8a",
  values = {
    "cpu": "arm64-v8a",
  },
)

config_setting(
  name = "armeabi-v7a",
  values = {
    "cpu": "armeabi-v7a",
  },
)

config_setting(
  name = "x86",
  values = {
    "cpu": "x86",
  },
)

config_setting(
  name = "x86_64",
  values = {
    "cpu": "x86_64",
  },
)

и ваши cc_library правила могут зависеть от foo.

Тогда укажите --fat_apk_cpu в командной строке, например, чтобы собрать и упаковать .so для каждой платформы, укажите --fat_apk_cpu=arm64-v8a,armeabi-v7a,x86,x86_64 или некоторое подмножество для того, на что вы нацеливаетесь, например, для эмулятора --fat_apk_cpu=x86_64

...