Фикс ошибок компиляции библиотек в Termux

При компиляции библиотек или утилит порой возникают ошибки, связанные с несовместимостью опций компилятора или их недостаточностью для сборки.

Внимание: этот метод не даёт возможность пользоваться результатами компиляции, даже при использовании -mcpu=native. Решения пока нет. Только для ознакомления. Следим за ситуацией: GitHub issue

Источник проблем

Когда собирал этот блог в среде Termux с использованием новой версии Jekyll 4.0, столкнулся с проблемой, что sassc не хочет компилироваться при помощи clang. Ошибка возникала следующая:

error: the clang compiler does not support '-march=native'

Оптимальный вариант конечно сделать issue на GitHub по этому вопросу и ждать у моря погоды, но есть способ быстрее устранить эту проблему.

Убираем опцию

Первый способ решить проблему, который пришёл в голову, — залезть в Makefile и убрать опцию. Но что делать, если компилировать придётся новые версии библиотек? Долго и муторно. Вторым решением представилось проксировать все вызовы clang через свой скрипт с обрезанием параметра march. Что собственно я и сделал. Создал файл ~/bin/clang:

#!/data/data/com.termux/files/usr/bin/env bash
~/../usr/bin/clang "${@/-march=native/}"

Конечно же нужно сделать файл исполняемым: chmod +x ~/bin/clang.

Подменяем используемый бинарник

Более-менее нормальный способ подмены — дописать в приоритетном порядке к переменной $PATH путь к папке bin в домашней директории. Создадим файл ~/../usr/etc/profile.d/set_path_home_bin.sh с содержанием:

export PATH=$HOME/bin:$PATH

После чего clang будет искаться сначала в ~/bin.

Этого оказалось недостаточно, пришлось ещё добавить симлинки для архитектурно специфичных clang:

cd ~/bin                              
ln -s clang aarch64-linux-android-clang
ln -s clang aarch64-linux-android-clang++

После чего перезапускаем сессию терминала и пробуем скомпилировать библиотеки снова.



Я фронтенд разработчик, веду блог о вёрстке сайтов, оптимизации веб-приложений. Улучшаю пользовательский опыт, собираю лучшие практики в области веб-разработки.

Чтобы не пропускать новости, можно подписаться на email рассылку.