LINUX.ORG.RU

Как правильно передать флаг компилятору при сборке пакета для Debian?

 , , , ,


1

1

Всем привет! Пытаюсь собрать пакет с Yuzu - экспериментальным эмулятором Nintendo Switch для Debian 9. Программа требует C++17 совместимый компилятор, потому предварительно в репозиторий добавил Clang 5.0. Но вот беда: при сборке задействуется libsdtc++, которая ссылается на GCC 6.3, который в свою очередь не поддерживает C++17. Нужно использовать флаг -stdlib=libc++, чтобы использовалась clang'овская библиотека. Но не могу понять как правильно передать этот флаг. debian/rules файл сейчас выглядит следующим образом:

#!/usr/bin/make -f

export DEB_LDFLAGS_MAINT_APPEND = -Wl,--as-needed

export CC=clang-5.0
export CXX=clang++-5.0
export CXX_FLAGS+=-stdlib=libc++

%:
	dh $@ --parallel


override_dh_auto_configure:
	dh_auto_configure -- \
	-DCMAKE_INSTALL_PREFIX=/usr \
	-DCMAKE_BUILD_TYPE=Release \
	-DUSE_SYSTEM_CURL=1

но так не работает, компиляция валится с ошибкой:
[  194s] /usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/type_traits:1517:12: note: 'is_same' declared here
[  194s]     struct is_same
[  194s]            ^
Помогите разобраться, пожалуйста.

DEB_CXXFLAGS_MAINT_APPEND=-stdlib=libc++?

anonymous
()

Там CMake ниже вижу. Попробуй что-то вроде

-DCMAKE_CXX_STANDARD=17 \
-DCMAKE_CXX_COMPILER:STRING="clang++" \
-DCMAKE_EXE_LINKER_FLAGS:STRING="-stdlib=libc++ -lc++abi" \
EXL ★★★★★
()
Ответ на: комментарий от EXL

Выдаёт

CMake Error at /usr/share/cmake-3.9/Modules/CMakeTestCCompiler.cmake:51 (message):
[  129s]   The C compiler "/usr/bin/clang-5.0" is not able to compile a simple test
[  129s]   program.
, способ из первого коммента выдаёт тоже самое, но про clang++

Sunderland93 ★★★★★
() автор топика

export CXX_FLAGS+=-stdlib=libc++

А указать пути к заголовкам?

LebedevRI
()

Кажется понял в чём ещё может быть косяк. Версия libc++ не совпадает с версией Clang. Попробую обновить

Sunderland93 ★★★★★
() автор топика
Ответ на: комментарий от Sunderland93

-DCMAKE_C_COMPILER:STRING="clang"

Добавь ещё.

И ошибку запости, которую выдала тестовая программа. Типа:

Run Build Command:"/usr/bin/make" "cmTC_362c9/fast"
/usr/bin/make -f CMakeFiles/cmTC_362c9.dir/build.make CMakeFiles/cmTC_362c9.dir/build
make[1]: Entering directory '/home/exl/Projects/yuzu/build/CMakeFiles/CMakeTmp'
Building CXX object CMakeFiles/cmTC_362c9.dir/testCXXCompiler.cxx.o
/usr/bin/clang++     -o CMakeFiles/cmTC_362c9.dir/testCXXCompiler.cxx.o -c /home/exl/Projects/yuzu/build/CMakeFiles/CMakeTmp/testCXXCompiler.cxx
Linking CXX executable cmTC_362c9
/usr/bin/cmake -E cmake_link_script CMakeFiles/cmTC_362c9.dir/link.txt --verbose=1
/usr/bin/clang++     -stdlib=libc++  CMakeFiles/cmTC_362c9.dir/testCXXCompiler.cxx.o  -o cmTC_362c9 
/usr/bin/ld: cannot find -lc++
clang-5.0: error: linker command failed with exit code 1 (use -v to see invocation)
make[1]: *** [CMakeFiles/cmTC_362c9.dir/build.make:98: cmTC_362c9] Error 1
make[1]: Leaving directory '/home/exl/Projects/yuzu/build/CMakeFiles/CMakeTmp'
make: *** [Makefile:126: cmTC_362c9/fast] Error 2
EXL ★★★★★
()
Ответ на: комментарий от Sunderland93

Это по путям gcc-шных хедеров бьёт ошибка:

Добавь ещё

-DCMAKE_CPP_FLAGS:STRING="-stdlib=libc++"

И вообще проверь, есть ли необходимые пути для заголовочных файлов libc++:

$ clang++ -stdlib=libc++ -E -x c++ - -v < /dev/null

Если в «#include <...> search starts here» нужного пути нет, добавляй его так:

-DCMAKE_CPP_FLAGS:STRING="-stdlib=libc++ -I/usr/include/<путь до libc++>"
EXL ★★★★★
()
Последнее исправление: EXL (всего исправлений: 1)
Ответ на: комментарий от EXL

К сожалению, нет. Я не могу понять как GCC 7 собирается в Debian, тут странные сборочные зависимости прописаны. Потому и избрал Clang.

Sunderland93 ★★★★★
() автор топика
Ответ на: комментарий от EXL

Всё, решил проблему. Нужно сделать вот так:

export DEB_LDFLAGS_MAINT_APPEND = -Wl,--as-needed
export DEB_CXXFLAGS_MAINT_APPEND = -stdlib=libc++ -I/usr/include/c++/v1

export CC=clang-5.0
export CXX=clang++-5.0

%:
	dh $@ --parallel


override_dh_auto_configure:
	dh_auto_configure -- \
	-DCMAKE_INSTALL_PREFIX=/usr \
	-DCMAKE_BUILD_TYPE=Release \
	-DUSE_SYSTEM_CURL=1
то есть прописать ещё путь до заголовков

Sunderland93 ★★★★★
() автор топика
Ответ на: комментарий от Sunderland93

Я не могу понять как GCC 7 собирается в Debian, тут странные сборочные зависимости прописаны. Потому и избрал Clang.

Программа требует C++17 совместимый компилятор, потому предварительно в репозиторий добавил Clang 5.0.

А так же добавить GCC 7 нельзя?

gag ★★★★★
()
Ответ на: комментарий от Sunderland93

Молодец, что не поменял dh_auto_configure!

gag ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.