CROSSTOOL путь к http_archive восстановленному расположению цепочки инструментов - PullRequest
0 голосов
/ 06 марта 2019

Написание сборки с использованием bazel, ориентированной на архитектуру процессора LM32 в CentOS 7. Итак, мне нужно создать кросс-компилятор (следуя этому руководству: https://docs.bazel.build/versions/0.23.0/tutorial/crosstool.html). Кроме того, я автоматически загружаю цепочку инструментов, используя http_archive. Iу меня есть файл CROSSTOOL в моем пакете инструментов, который должен ссылаться на этот загруженный пакет, и я, кажется, не понимаю, как этого добиться.

У меня есть следующая схема рабочего пространства:

.
|-- external
|   `-- lm32-toolchain.BUILD
|-- main
|   |-- BUILD
|   `-- helloworld.c
|-- README.md
|-- toolchain
|   |-- BUILD
|   `-- CROSSTOOL
`-- WORKSPACE

РАБОЧЕЕ МЕСТО:

load("@bazel_tools//tools/build_defs/repo:http.bzl", "http_archive", "http_file")

http_archive(
  name = 'lm32_toolchain',
  url = 'https://www.ohwr.org/project/wr-cores/uploads  /2776ce0ba43503d1486ae205b48fb450/lm32_host_64bit.tar.xz',
  build_file = 'lm32-toolchain.BUILD',
  strip_prefix = 'lm32-gcc-4.5.3'
)

Я вижу, что загружен набор инструментов:

$ ls $(bazel info output_base)/external/lm32_toolchain
bin  BUILD.bazel  include  lib  libexec  lm32-elf  share  WORKSPACE

Однако он не может скомпилироваться, так как не может найти компилятор.

toolchain / CROSSTOOL:

major_version: "1"
minor_version: "0"
default_target_cpu: "lm32"

toolchain {
   toolchain_identifier: "lm32-toolchain"
   host_system_name: "i686-unknown-linux"
   target_system_name: "lm32-elf"
   target_cpu: "lm32"
   target_libc: "unknown"
   compiler: "lm32-elf-gcc"
   abi_version: "unknown"
   abi_libc_version: "unknown"

   tool_path { name: "gcc"        path: "???/lm32-elf-gcc" }
   tool_path { name: "ld"         path: "???/lm32-elf-ld" }
   tool_path { name: "ar"         path: "???/lm32-elf-ar" }
   tool_path { name: "cpp"        path: "???/lm32-elf-cpp" }
   tool_path { name: "gcov"       path: "???/lm32-elf-gcov" }
   tool_path { name: "nm"         path: "???/lm32-elf-nm" }
   tool_path { name: "objdump"    path: "???/lm32-elf-objdump" }
   tool_path { name: "strip"      path: "???/lm32-elf-strip" }
}

Мой вопрос заключается в том, что должно быть размещено в ??? /? Я пробовал несколько вещей, но ничего не работает. Любые ссылки на пакеты копируются дословно вк команде execvp, например:

src/main/tools/process-wrapper-legacy.cc:58: "execvp(toolchain/@lm32_toolchain/bin/lm32-elf-gcc, ...)": No such file or directory

И относительные пути недопустимы.

Или есть лучший способ сделать это? Я довольно плохо знаком с bazel, поэтому любые указателиблагодарныТед.

Спасибо, Винсент

...