LINUX.ORG.RU

Набор опций компилятора при кросс-компиляции с meson

 ,


0

1

Всем привет. Я использую meson для сборки моей программы под микроконтроллер. В соответствии с документацией мезона, у меня есть кросс-файл cross.txt, в котором прописаны все параметры под этот микроконтроллер, в частности опции компилятора:

[built-in options]
c_args  = [
  '-mcpu=cortex-m4',
  '-ffunction-sections',
  ...
  ]

Я хочу модифицировать эти опции в зависимости от условий, например, в главном файле meson.build я написал так:

if get_option('buildtype') == 'release'
  c_args += '-Os'
endif

Но это не работает, потому что этот c_args определяет параметры под машину сборки, а не хост-машину. Как обратиться к c_args хоста?

★★★

Если я правильно помню, при кросскомппиляции вообще не учитывается то что в c_args, а используется только то что вы укажете в cross файле. Это поведение by design (cross_c_args так и не сделали). Т.е. решение проблемы это костыль с пересборкой cross.txt на лету либо свой файл на каждый тип билда (во всяком случае так было несколько лет назад).

Obezyan
()

этот c_args определяет параметры под машину сборки, а не хост-машину

Нет, под хост машину. В терминологии meson, по крайней мере, т.е. под машину, на которой будет запущен бинарник.

А проблема я полагаю в строке

    c_args += '-Os'

Это присваивание к переменной c_args, которая не определена (опция c_args это НЕ переменная!). И даже если такую переменную создать, прокидываться в таргеты она не будет.

Надо либо вручную в таргетах прописывать нужные c_args: ['-Os'], либо использовать add_project_arguments.

https://mesonbuild.com/Adding-arguments.html#global-arguments

Siborgium ★★★★★
()
Последнее исправление: Siborgium (всего исправлений: 1)
Ответ на: комментарий от Siborgium

либо использовать add_project_arguments

Этот способ сработал, спасибо!

otto ★★★
() автор топика
Последнее исправление: otto (всего исправлений: 1)

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

anonymous
()
Для того чтобы оставить комментарий войдите или зарегистрируйтесь.