Как можно включить исходники вне дерева в проект Meson?

Немного предыстории: я использую Meson для встроенного проекта C. У меня он работает (пример), но он не очень чистый.

Конкретная проблема, которую я хотел бы решить, - это включение вневременного пакета поддержки платы (BSP) - дерева заголовков и файлов C, которые действуют как код инициализации и абстракции для конкретной платформы.

Раньше я копировал заголовки из BSP, предоставленного поставщиком, в свой проект по мере необходимости, что действительно работало, но у этого есть недостатки, наиболее важным из которых является отсутствие воспроизводимости. Кроме того, это вызывает дублирование кода и затрудняет отслеживание того, откуда возникла конкретная ошибка, если ошибка находится в BSP.

Способы, которые я пробовал:

  1. Используйте параметр в meson_options.txt, чтобы сообщить Meson, где находится BSP на диске через meson configure. Проблема с этим методом заключается в том, что Meson выдает ошибку во время установки, потому что параметры не могут быть установлены до тех пор, пока установка не будет завершена, и поэтому он не может найти необходимые каталоги и отказывается продолжить.

  2. Используйте подпроект и повторите описанное выше - это вызывает ту же проблему.

В идеале я хотел бы, чтобы конечный пользователь мог установить путь BSP с помощью meson configure, вместо того, чтобы когда-либо редактировать описание сборки (весь смысл Meson - быть удобным для пользователя!).

Это возможно? Если это невозможно, почему и существуют ли альтернативные / общепринятые способы сделать это, о которых я должен знать?


person PyroAVR    schedule 14.02.2021    source источник
comment
Я быстро взглянул, и первое, что меня задумало, почему вы используете какой-то скрипт init.py вместо того, чтобы помещать все это в кросс-файлы?   -  person pmod    schedule 17.02.2021


Ответы (1)


В своем вопросе вы заявляете, что

параметры не могут быть установлены до завершения настройки

Это неправда. Вы можете передать любую опцию, которую хотите, во время настройки мезона, используя следующий синтаксис:

$ meson <build dir> -D<option>=<value>

Итак, я думаю, что первый способ, которым вы пытались реализовать свой вариант, был правильным, вам просто нужно сказать пользователю, чтобы он установил его непосредственно во время установки.

person vvanpelt    schedule 20.02.2021