Doka avatar

Журнал Эмбеддед-Инженера

О микроэлектронике, радиотехнике и хобби

KiCad 6.0 on CentOS 7

Как собрать KiCad 6.0 под CentOS 7

Dmitry Murzinov

6 минут чтения

Преамбула

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

[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.

Использованные источники

Последние записи

Разделы