KiCad 6.0 on CentOS 7
Как собрать KiCad 6.0 под CentOS 7
Преамбула
Пишу в первую очередь для себя - чтобы не забыть что и как делал.
[UPD] Мануал теперь законченный.
Сборка Кикада
Чтобы понять чего не хватает - сначала пытаемся собрать “как есть”, а потом идём по заивисимостям.
git clone https://gitlab.com/kicad/code/kicad.git
cd kicad
git tag
git checkout 6.0.0
mkdir -p build/release
cd build/release
cmake -DCMAKE_BUILD_TYPE=RelWithDebInfo ../../
Установка зависимостей
Из Юма
sudo yum install -y glew glew-devel libGLEW libGLEWmx glew-devel compat-glew swig openjpeg2 openjpeg2-devel
sudo yum install -y libcurl libcurl-devel mesa-libGL-devel cmake-data boost boost-devel opengl
sudo yum install -y zlib zlib-devel cairo cairo-devel python36-cairo python36-cairo-devel
sudo yum install -y gtk3 gtk3-devel wxGTK3 wxGTK3-devel wxGTK3-gl wxGTK3-media wxGTK3-i18n wxBase3 wxBase3-devel
sudo yum install -y glm-devel
glm
Тут важное примечание: если установлена версия из yum - её надо удалить (она слишком старая).
sudo yum remove -y glm-devel
git clone https://github.com/g-truc/glm
cd glm
git checkout 0.9.8
sudo cp -a glm /usr/include
Boost
Во избежании казусов с “системным” бустом указываем вручную директорию в которую будем ставить и экспортируем переменную для системы сборки кикада.
wget https://boostorg.jfrog.io/artifactory/main/release/1.78.0/source/boost_1_78_0.tar.bz2
tar --bzip2 -xf boost_1_78_0.tar.bz2
cd boost_1_78_0
./bootstrap.sh --prefix=/usr/local/boost_1_78_0
sudo ./b2 install
export BOOST_ROOT=/usr/local/boost_1_78_0
Для справки https://www.boost.org/doc/libs/1_78_0/more/getting_started/unix-variants.html
OpenCascade
Если появляется такое сообщение, то надо установить OpenCascade:
*** OpenCascade library missing ***
Verify your OpenCascade installation or pass CMake the library directory as '-DOCC_LIBRARY_DIR=<path>'
Инфа по сборке тут: https://github.com/Open-Cascade-SAS/OCCT/blob/master/dox/build/build_occt/building_occt.md
wget https://github.com/Open-Cascade-SAS/OCCT/archive/refs/tags/V7_6_0.tar.gz
tar xzf V7_6_0.tar.gz
cd OCCT-7_6_0
mkdir build
cd build
cmake -DINSTALL_DIR=/opt/OCCT-7_6_0 ..
make -j6
sudo make install
cat "/opt/OCCT-7_6_0/lib" > /etc/ld.so.conf.d/OCTT.conf
sudo ldconfig
NGspice
Could NOT find ngspice (missing: NGSPICE_INCLUDE_DIR NGSPICE_LIBRARY NGSPICE_DLL)
Зависимости:
sudo yum install -y bison bison-devel flex flex-devel libXaw-devel libXaw libXmu libXmu-devel
sudo yum install -y libXext-devel libXext libXft-devel libXft libX11-devel readline readline-devel libXrender-devel libXrender fontconfig-devel fontconfig
В исходниках Кикада есть скрипт для установки NGspice, для этого переходим в папку, куда склонировали KiCad 6.0
cd ./scripting/build_tools
chmod +x get_libngspice_so.sh
./get_libngspice_so.sh
sudo ./get_libngspice_so.sh install
SWIG
wget https://github.com/swig/swig/archive/refs/tags/v4.0.2.tar.gz
tar xzf v4.0.2.tar.gz
cd swig-4.0.2
./autogen.sh
./configure
make -j6
sudo make install
sudo ln -s /usr/local/bin/swig /usr/bin/swig
Решение проблемы с libcairo
Конкретно в моём дистрибутиве вылезла проблема с libcairo:
ImportError: /lib64/libcairo.so.2: undefined symbol: FT_Get_Var_Design_Coordinates
Притом штатным путём не удалось установить источник проблемы:
rpm -q --whatprovides /lib64/libcairo.so.2
cairo-1.15.12-4.el7.x86_64
yum --showduplicates list cairo
cairo.i686
cairo.x86_64
На помощь как всегда пришёл гугл (во всём виноват пакет freetype-infinality, но сносить его не очень хорошая идея, просто “отключил” его версию libcairo.so
):
sudo mv /etc/ld.so.conf.d/freetype-infinality-x86_64.conf /etc/ld.so.conf.d/freetype-infinality-x86_64.conf.disable
sudo ldconfig
wxWidgets
Также понадобится свежая wxWidgets. Справка по сборке: https://wiki.wxwidgets.org/Compiling_and_getting_started
wget https://github.com/wxWidgets/wxWidgets/releases/download/v3.0.5/wxWidgets-3.0.5.tar.bz2
tar xjf wxWidgets-3.0.5.tar.bz2
cd wxWidgets-3.0.5
mkdir gtk-build
cd gtk-build
../configure --with-opengl --with-gtk=3 --prefix=/opt/wxWidgets-3.0.5
make -j6
sudo make install
make clean
sudo ldconfig
export PATH=$PATH:/opt/wxWidgets-3.0.5/bin
И вот на этой ноте всё заканчивается при выполнении configure
:
checking for GTK+ version...
checking for pkg-config... /usr/bin/pkg-config
checking for GTK+ - version >= 3.0.0... Package gtk+-3.0 was not found in the pkg-config search path.
Perhaps you should add the directory containing `gtk+-3.0.pc'
to the PKG_CONFIG_PATH environment variable
No package 'gtk+-3.0' found
Package gthread-2.0 was not found in the pkg-config search path.
Perhaps you should add the directory containing `gthread-2.0.pc'
to the PKG_CONFIG_PATH environment variable
No package 'gthread-2.0' found
no
*** Could not run GTK+ test program, checking why...
*** The test program failed to compile or link. See the file config.log for the
*** exact error that occured. This usually means GTK+ is incorrectly installed.
configure: error:
The development files for GTK+ were not found. For GTK+ 2, please ensure that pkg-config is in the path and that gtk+-2.0.pc is
installed. For GTK+ 1.2 please check that gtk-config is in the path, and that the version is 1.2.3 or above. Also check that the
libraries returned by 'pkg-config gtk+-2.0 --libs' or 'gtk-config --libs' are in the LD_LIBRARY_PATH or equivalent.
Увы, где брать этот ‘gtk+-3.0’ непонятно. На CentOS8 всё собирается без сучка и задоринки, а на CentOS7 какой-то ступор - куда двигаться дальше непонятно: уже поставил из yum
все пакеты в названии которых встречался бы ‘gtk’, но безрезультатно.
BTW, вот вывод ‘pkg-config gtk+-2.0 –libs’ or ‘gtk-config –libs’:
$ pkg-config gtk+-2.0 --libs
Package gtk+-2.0 was not found in the pkg-config search path.
Perhaps you should add the directory containing `gtk+-2.0.pc'
to the PKG_CONFIG_PATH environment variable
No package 'gtk+-2.0' found
[UPD] По какой-то причине слетел PKG_CONFIG_PATH
(ОС эксплуатируется в 2017г), чтож.. устаналиваем:
export PKG_CONFIG_PATH="/usr/lib64/pkgconfig:/usr/share/pkgconfig"
Собираем wxWidgets повторно. При проблемах с либами свежесобранного wxWidgets создаём файл с содержимым:
cat /etc/ld.so.conf.d/wxWidgets-3.0.5.conf
/opt/wxWidgets-3.0.5/lib
Затем:
sudo ldconfig
Повторная сборка Кикада
Точнее - повторная попытка (тут прописываем пути куда ставили OpenCascade):
git clone https://gitlab.com/kicad/code/kicad.git
cd kicad
git tag
git checkout 6.0.5
mkdir -p build/release
cd build/release
cmake -DCMAKE_BUILD_TYPE=Release \
-DBUILD_TESTING=OFF \
-DOCC_LIBRARY_DIR=/opt/OCCT-7_6_0 \
-DOCC_INCLUDE_DIR=/opt/OCCT-7_6_0/include/opencascade \
-DCMAKE_INSTALL_PREFIX=/opt/KiCad-6.0.5 \
-DDEFAULT_INSTALL_PATH=/opt/KiCad-6.0.5/kidata \
-DwxWidgets_CONFIG_EXECUTABLE=/opt/wxWidgets-3.0.5/bin/wx-config \
-DwxWidgets_ROOT_DIR=/opt/wxWidgets-3.0.5 \
-DwxWidgets_LIBRARIES=/opt/wxWidgets-3.0.5/lib \
-DwxWidgets_INCLUDE_DIRS=/opt/wxWidgets-3.0.5/include/wx-3.0/wx \
-DKICAD_BUILD_I18N=ON \
-DKICAD_INSTALL_DEMOS=ON \
-DKICAD_PCM=ON \
-DKICAD_SPICE=ON \
-DKICAD_STDLIB_DEBUG=OFF \
-DKICAD_VERSION_EXTRA=custom \
../../
make -j6
sudo make install
На этот раз всё успешно собирается и устанавливается, но в итоге kicad
не запускается с такой формулировкой:
$ kicad
Fatal Error: Mismatch between the program and library build versions detected.
The library used 3.0 (wchar_t,compiler with C++ ABI 1002,wx containers,compatible with 2.8),
and your program used 3.0 (wchar_t,compiler with C++ ABI 1013,wx containers,compatible with 2.8).
Aborted
Эта ошибка попила много крови, потому как ошибочно интерпретировал как то, что версия wxWidgets 3.0.5 не подхватилась системой сборки и что проблемы с wxWidgets. По факту оказалось, что проблемы с тем, что не стоковым gcc 4.8.5 собирается проект, а gcc-11 из devtoolset-11. Надо было сразу гуглить текст ошибки (не сразу догадался). В Итоге рещение такое - в файл CMakeLists.txt
добавить строку:
add_definitions(-fabi-version=2)
Теперь уже “окончательно-повторно” собираем Кикад. С одним нюансом: devtoolset-11 (gcc-11) не совместим с опцией -fabi-version=2
и пришлось даунгрейдиться до devtoolset-9 (gcc-9), на всякий случай команда для этого:
scl enable devtoolset-9 bash
После этого всё успешно собралось, установилось и запустилось! Победа!
О Flatpak замолвите слово
На CentOS 7 есть возможность установить Кикад через Flatpak (это как Snap только для RPM-based дистрибутивов). Я даже проделал этот путь по наводке чатланина и от отчаяния:
sudo yum install -y flatpak
flatpak install --from https://flathub.org/repo/appstream/org.kicad.KiCad.flatpakref
запуск (почему-то нигде не прописалось):
exec /usr/bin/flatpak run --branch=stable --arch=x86_64 org.kicad.KiCad "$@"
И даже сравнил размер двух установок:
$ du -hs /var/lib/flatpak/*
515M /var/lib/flatpak/app
7,4G /var/lib/flatpak/repo
du -hs /var/lib/flatpak/app/org.kicad.KiCad
515M /var/lib/flatpak/app/org.kicad.KiCad
du -hs /opt/KiCad-6.0.5
242M /opt/KiCad-6.0.5
du -hs /opt/OCCT-7_6_0
179M /opt/OCCT-7_6_0
du -hs /usr/local/boost_1_78_0
219M /usr/local/boost_1_78_0
du -hs /opt/wxWidgets-3.0.5
33M /opt/wxWidgets-3.0.5
- Flatpak: 8ГБ (Кикад + обслуживающие либы)
- From scratch: 250MБ Кикад + 430МБ свежесобранные зависимости
PS: Вот тут можно подсмотреть с какими опциями собирается кикад для Flatpak: вызывает недоумение опция CMAKE_BUILD_TYPE=RelWithDebInfo
которая видимо сохранилась со времён многолетней беты шестой версии кикада, если вы не мейнтейнер и не тесрировщик ПО лучше собрать с CMAKE_BUILD_TYPE=Release
.