Принуждение системы сборки GCC кросс-компиляции или кросс-компиляции - PullRequest
0 голосов
/ 07 мая 2019

Рассмотрим две связанные задачи, касающиеся построения GCC (самой цепочки инструментов компилятора, включая целевые библиотеки):

  1. Сборка кросс-компилятора из любой системы, на которой вы работаете ($build = $host), до фиксированной $target.

  2. Кросс-компиляция собственного компилятора для запуска на $host = $target (независимо от того, на каком $build вы работаете).

Случай 2, в частности, относится к воспроизводимым сборкам. В идеале выходные двоичные файлы в этом случае должны быть детерминированными, полностью независимыми от того, на какой системе вы их строите ($build). Тем не менее, поскольку GCC решает, следует ли выполнять кросс-компиляцию, сравнивая значения $build и $host, вы получите неожиданно иной процесс сборки и результаты, если $build окажется равным $host.

Аналогично, случай 1 ведет себя по-разному при разных условиях: ложное равенство $host и $target (и, следовательно, всех трех - $build также). В некотором смысле это менее проблематично, поскольку не нарушено свойство воспроизводимости (по крайней мере, я об этом не знаю), но оно оказывает незначительное влияние на работу sysroot, которое я до сих пор не до конца понимаю.

Итак, мой вопрос: есть ли способ при сборке GCC заставить его создать кросс-компилятор (случай 1) или кросс-компиляцию (случай 2) вместо того, чтобы иметь поведение зависеть от того, отличаются ли $host и $target друг от друга или от $build? Передача --with-sysroot частично достигает этого, но некоторые действия при сборке все еще отличаются. Один очевидный глупый подход, о котором я подумал, - это взять вывод config.guess и вручную добавить к нему ненужную информацию, просто чтобы гарантировать несоответствие, но я не уверен, что это надежно, чтобы не сломаться.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...