|
Сборка из исходников, вопросы по сборке будут жить здесь. |
|
|
|
May 17 2013, 07:35
|

Гуру
     
Группа: Модераторы
Сообщений: 8 455
Регистрация: 15-05-06
Из: Рига, Латвия
Пользователь №: 17 095

|
Вопрос по кросс-сборке. Задача: на машине с Linux Mint 14 (64 бита) собрать КиКАД для 32-битного виндовса. С wxWidgets проблем нет, указал --host=i686-w64-mingw32 --prefix=$BUILD_DIR/../install/wx-win, все собралось и установилось. Теперь сборка собственно КиКАДа. В доке такой вариант сборки не описан или я его не нашел. Гуглением выяснил, что надо создать файл (win-cross.cmake) примерно следующего содержания CODE # the name of the target operating system SET(CMAKE_SYSTEM_NAME Windows)
# which compilers to use for C and C++ SET(CMAKE_RC_COMPILER i686-w64-mingw32-windres) SET(CMAKE_C_COMPILER i686-w64-mingw32-gcc) SET(CMAKE_CXX_COMPILER i686-w64-mingw32-g++)
# here is the target environment located SET(CMAKE_FIND_ROOT_PATH /usr/i686-w64-mingw32)
# adjust the default behaviour of the FIND_XXX() commands: # search headers and libraries in the target environment, search # programs in the host environment set(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER) set(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY) set(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY) и указать его cmake ключем -DCMAKE_TOOLCHAIN_FILE=../win-cross.cmake. Также указал путь к wx согласно инструкции: -DwxWidgets_ROOT_DIR=$BUILD_DIR/../install/wx-win" Теперь cmake находит работающий компилятор и OpenGL но вылетает на поиске wxWidgets. Возможно кто-то уже имеет опыт такой кросс-сборки? Как его заставить? Я, конечно, могу полезть копать внутренности CMakeModules/FindwxWidgets.cmake, но возможно кто-то уже прошел по этим граблям?
--------------------
На любой вопрос даю любой ответ"Write code that is guaranteed to work, not code that doesn’t seem to break" ( C++ FAQ)
|
|
|
|
|
May 17 2013, 08:18
|
Местный
  
Группа: Свой
Сообщений: 392
Регистрация: 29-05-07
Из: Москва
Пользователь №: 28 020

|
Цитата(Сергей Борщ @ May 17 2013, 11:35)  Возможно кто-то уже имеет опыт такой кросс-сборки? Как его заставить? Я, конечно, могу полезть копать внутренности CMakeModules/FindwxWidgets.cmake, но возможно кто-то уже прошел по этим граблям? Делал такую сборку в Linux Debian 6.0.5. У меня получилась следующая последовательность действий: Код sudo apt-get install mingw32
----------------------------------------- mkdir /home/a-lunev/bzr/toolchain-mingw touch /home/a-lunev/bzr/toolchain-mingw/TC-mingw.cmake < # the name of the target operating system set(CMAKE_SYSTEM_NAME Windows)
# which compilers to use for C, C++ and resource files set(CMAKE_C_COMPILER i586-mingw32msvc-gcc) set(CMAKE_CXX_COMPILER i586-mingw32msvc-g++) set(CMAKE_RC_COMPILER i586-mingw32msvc-windres)
# where is the target environment located set(CMAKE_FIND_ROOT_PATH /usr/i586-mingw32msvc /home/a-lunev/bzr/toolchain-mingw)
# adjust the default bahaviour of the FIND_XXX() commands: # search programs in the host environment set(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER)
# search headers and libraries in the target environment set(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY) set(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY)
-----------------------------------------
https://sourceforge.net/projects/wxwindows/files/2.9.3/wxWidgets-2.9.3.tar.bz2/download
cd wxWidgets-2.9.3/include/wx/msw cp setup.h setup0.h
mkdir wxWidgets-2.9.3/build_msw cd wxWidgets-2.9.3/build_msw ../configure --enable-unicode --enable-monolithic --enable-shared --enable-aui --with-msw --with-opengl --prefix=/home/a-lunev/bzr/toolchain-mingw --host=i586-mingw32msvc --build=x86_64-linux make sudo make install sudo ldconfig cd /home/a-lunev/bzr/toolchain-mingw/include/wx-2.9/wx/msw sudo cp setup0.h ../setup.h
bzr branch lp:kicad cd kicad bzr patch mingw_kicad.patch
mkdir Release_win32 cd Release_win32 mkdir /home/a-lunev/bzr/kicad-win cmake -DCMAKE_BUILD_TYPE=Release -DKICAD_TESTING_VERSION=ON -DCMAKE_TOOLCHAIN_FILE=/home/a-lunev/bzr/toolchain-mingw/TC-mingw.cmake -DCMAKE_INSTALL_PREFIX=/home/a-lunev/bzr/kicad-win ../ make sudo make install
cp /usr/share/doc/mingw32-runtime/mingwm10.dll.gz . gzip -d mingwm10.dll.gz mv mingwm10.dll /home/a-lunev/bzr/kicad-win/bin cp /home/a-lunev/bzr/toolchain-mingw/lib/wxmsw293u_gcc_custom.dll /home/a-lunev/bzr/kicad-win/bin cp /home/a-lunev/bzr/toolchain-mingw/lib/wxmsw293u_gl_gcc_custom.dll /home/a-lunev/bzr/kicad-win/bin
|
|
|
|
|
May 17 2013, 10:10
|

Гуру
     
Группа: Модераторы
Сообщений: 8 455
Регистрация: 15-05-06
Из: Рига, Латвия
Пользователь №: 17 095

|
QUOTE (AVL @ May 17 2013, 11:18)  У меня получилась следующая последовательность действий: Угу. Разница в указании пути к wx через CMAKE_FIND_ROOT_PATH вместо рекомендованного wxWidgets_ROOT_DIR. Попробовал. Не помогло. setup.h у меня оказался в lib/wx/include/i686-w64-mingw32-msw-unicode-static-2.9/wx. Его копирование в include/wx-2.9/wx тоже не помогло. Версия wx отличатеся - у меня 2.9.4. Придется ковырять FindwxWidgets.cmake, смотреть на чем спотыкается. Какая-то, простите, бяка. Судя по всему, благодаря set(CMAKE_SYSTEM_NAME Windows) для cmake определен символ WIN32. который заставляет FindwxWidgets.cmake искать файл msw/wx/setup.h в директории lib/gcc_lib. Но у меня setup.h живет в lib/wx/include/i686-w64-mingw32-msw-unicode-static-2.9/wx.
--------------------
На любой вопрос даю любой ответ"Write code that is guaranteed to work, not code that doesn’t seem to break" ( C++ FAQ)
|
|
|
|
|
May 17 2013, 13:00
|

Гуру
     
Группа: Модераторы
Сообщений: 8 455
Регистрация: 15-05-06
Из: Рига, Латвия
Пользователь №: 17 095

|
добавил SET(MSYS). Еще веселее: после выполнения CODE FIND_PROGRAM(wxWidgets_CONFIG_EXECUTABLE wx-config ONLY_CMAKE_FIND_ROOT_PATH ) в wxWidgets_CONFIG_EXECUTABLE находится ${BUILD_DIR}/wx-config, где никакого wx-config нет (${BUILD_DIR} - место, где запускается cmake). wx-config живет по адресу /home/serzh/build/kicad/install/wx-win/bin/wx-config, при этом CMAKE_FIND_ROOT_PATH содержит /usr/i686-w64-mingw32;/home/serzh/build/kicad/install/wx-win (проверял выводом), и cmake нифига его там не находит. Проблема в cmake? Сделал ему символическую ссылку оттуда, где wx-config есть туда, где cmake его как бы находит, "нехай подавится". Собралось.
--------------------
На любой вопрос даю любой ответ"Write code that is guaranteed to work, not code that doesn’t seem to break" ( C++ FAQ)
|
|
|
|
|
May 17 2013, 14:45
|
Местный
  
Группа: Свой
Сообщений: 392
Регистрация: 29-05-07
Из: Москва
Пользователь №: 28 020

|
Цитата(Сергей Борщ @ May 17 2013, 17:00)  добавил SET(MSYS). Еще веселее: после выполнения Код FIND_PROGRAM(wxWidgets_CONFIG_EXECUTABLE wx-config ONLY_CMAKE_FIND_ROOT_PATH ) в wxWidgets_CONFIG_EXECUTABLE находится ${BUILD_DIR}/wx-config, где никакого wx-config нет (${BUILD_DIR} - место, где запускается cmake). wx-config живет по адресу /home/serzh/build/kicad/install/wx-win/bin/wx-config, при этом CMAKE_FIND_ROOT_PATH содержит /usr/i686-w64-mingw32;/home/serzh/build/kicad/install/wx-win (проверял выводом), и cmake нифига его там не находит. Проблема в cmake? Сделал ему символическую ссылку оттуда, где wx-config есть туда, где cmake его как бы находит, "нехай подавится". Собралось. А после сборки wxWidgets делали sudo make install ? После данной команды в /usr/local/bin должен появиться symlink на wx-config, который cmake по идее должен найти. То есть на сколько я понимаю, необходимо деинсталлировать (sudo make uninstall) установленные ранее версии wxWidgets. (Скорее всего нужно деинсталлировать также wxWidgets, если был установлен с помощью sudo apt-get install). После чего собрать с помощью mingw желаемую версию wxWidgets и выполнить ее установку: sudo make install sudo ldconfig Если так не делать, то нужно при сборке KiCad передать в качестве параметра путь к wxWidgets, который собран, но не был и не планируется быть установленным.
|
|
|
|
|
May 17 2013, 17:58
|

Гуру
     
Группа: Модераторы
Сообщений: 8 455
Регистрация: 15-05-06
Из: Рига, Латвия
Пользователь №: 17 095

|
QUOTE (AVL @ May 17 2013, 17:45)  А после сборки wxWidgets делали sudo make install ? Поскольку папка, указанная как --prefix при конфигурировании wx находится в моей домашней директории и у меня есть права на запись в нее без sudo, то я делал просто make install. QUOTE (AVL @ May 17 2013, 17:45)  После данной команды в /usr/local/bin должен появиться symlink на wx-config, который cmake по идее должен найти. Нелогично. А если у меня несколько сборок, каждая следующая своим symlink будет переписывать предыдущий? Зачем тогда --prefix и все эти рассуждения о типа-chroot в cmake? Да и искать она должна согласно описанию _только_ в указанных в CMAKE_FIND_ROOT_PATH папках. И по идее должна найти. А вместо этого возвращает полный путь в совсем другую директорию, где ее некто искать не просил и где искомого файла нет. QUOTE (AVL @ May 17 2013, 17:45)  То есть на сколько я понимаю, необходимо деинсталлировать (sudo make uninstall) установленные ранее версии wxWidgets. Не, ну это несерьезно. Я собираю минимум под две архитектуры, и перед каждой сборокой я должен удалять/ставить очередной wxWidgets? Нет. У каждого из них есть свой --prefix и этого должно хватать. Просто конкретно тут cmake споткнулся. QUOTE (AVL @ May 17 2013, 17:45)  После чего собрать с помощью mingw желаемую версию wxWidgets и выполнить ее установку: Это я делаю. Только без ldconfig. Я пока слабо понимаю его смысл. QUOTE (AVL @ May 17 2013, 17:45)  Если так не делать, то нужно при сборке KiCad передать в качестве параметра путь к wxWidgets, который собран, но не был и не планируется быть установленным. Там как бы два "путя", которыми идет поиск - либо Виндовс-путь, когда местоположение wxWidgets передается в качестве параметра, и он предполагает, что wx был собран при помощи прилагающихся к нему готовых makefiles, без configure. И уних-путь, когда местоположение установленного wx прописывается в path или, как у вас, в CMAKE_FIND_ROOT_PATH и его поиск и вытягиваение параметров происходит через вызов wx-config, которую в моем случае cmake найти не смог. Я же пишу, что cmake-вский FIND_PROGRAM() у меня отрабатывает не так, как написано в его документации.
--------------------
На любой вопрос даю любой ответ"Write code that is guaranteed to work, not code that doesn’t seem to break" ( C++ FAQ)
|
|
|
|
|
May 17 2013, 19:51
|
Местный
  
Группа: Свой
Сообщений: 392
Регистрация: 29-05-07
Из: Москва
Пользователь №: 28 020

|
Цитата(Сергей Борщ @ May 17 2013, 21:58)  Не, ну это несерьезно. Я собираю минимум под две архитектуры, и перед каждой сборокой я должен удалять/ставить очередной wxWidgets? Нет. У каждого из них есть свой --prefix и этого должно хватать. В такой ситуации да, не удобно. Я пробовал так собирать один раз, было интересно проверить саму идею, получится или нет. Забыл еще прикрепить файл патча, который указан в последовательности действий. Добавил файл к тому моему сообщению ( путь к сообщению с патчем). Не помню деталей уже (это было 2012-07-01). Видимо тоже что-то не получалось и правил руками файл CMakeModules/FindwxWidgets.cmake.
|
|
|
|
|
May 22 2013, 16:04
|

Местный
  
Группа: Свой
Сообщений: 309
Регистрация: 18-04-08
Из: Томск
Пользователь №: 36 887

|
До нового года в недалеком 2012 спокойно собирал кикад под WinXP. Однако после очередного обновления не смог собрать исходники. И это тянется по сей день. Пробовал MinGW обновить, виджеты ... и как-то все бестолку. Может кто натолкнет, куда копать. Сборка заканчивается примерно таким сообщением: Код I:\temp\tmpKiCADSource\kicad-gost\build>make -j2 [ 41%] Built target bitmaps [ 41%] Building CXX object common/CMakeFiles/common.dir/dialog_about/AboutDialog_main.cpp.obj In file included from i:/temp/tmpKiCADSource/kicad-gost/common/dialog_about/AboutDialog_main.cpp:9:0: I:/temp/tmpKiCADSource/kicad-gost/common/./dialog_about/dialog_about.h:13:29: fatal error: wx/html/htmlwin.h: No such file or directory compilation terminated. make[2]: *** [common/CMakeFiles/common.dir/dialog_about/AboutDialog_main.cpp.obj] Error 1 make[1]: *** [common/CMakeFiles/common.dir/all] Error 2 make[1]: *** Waiting for unfinished jobs.... [ 41%] [ 42%] Building CXX object common/CMakeFiles/pcbcommon.dir/base_screen.cpp.obj Building CXX object common/CMakeFiles/pcbcommon.dir/eda_text.cpp.obj In file included from i:/temp/tmpKiCADSource/kicad-gost/common/base_screen.cpp:32:0: I:/temp/tmpKiCADSource/kicad-gost/include/fctsys.h:7:19: fatal error: wx/wx.h: No such file or directory compilation terminated. make[2]: *** [common/CMakeFiles/pcbcommon.dir/base_screen.cpp.obj] Error 1 make[2]: *** Waiting for unfinished jobs.... In file included from I:/temp/tmpKiCADSource/kicad-gost/include/eda_text.h:33:0, from i:/temp/tmpKiCADSource/kicad-gost/common/eda_text.cpp:30: I:/temp/tmpKiCADSource/kicad-gost/include/trigo.h:32:38: fatal error: wx/gdicmn.h: No such file or directory compilation terminated. make[2]: *** [common/CMakeFiles/pcbcommon.dir/eda_text.cpp.obj] Error 1 make[1]: *** [common/CMakeFiles/pcbcommon.dir/all] Error 2 make: *** [all] Error 2
I:\temp\tmpKiCADSource\kicad-gost\build> Все эти заголовочники есть, а чего он их вдруг перестал видеть, я не понимать. Кто как собирает виджеты, с какими опциями? Есть ли уже где-то скомпилированные, чтобы самому не наделать дел?
--------------------
Кто сказал МЯУ?
|
|
|
|
|
May 22 2013, 16:30
|
Местный
  
Группа: Свой
Сообщений: 392
Регистрация: 29-05-07
Из: Москва
Пользователь №: 28 020

|
Цитата(tema-electric @ May 22 2013, 20:04)  До нового года в недалеком 2012 спокойно собирал кикад под WinXP. Однако после очередного обновления не смог собрать исходники. И это тянется по сей день. Пробовал MinGW обновить, виджеты ... и как-то все бестолку. Может кто натолкнет, куда копать. Сборка заканчивается примерно таким сообщением: Код I:\temp\tmpKiCADSource\kicad-gost\build>make -j2 [ 41%] Built target bitmaps [ 41%] Building CXX object common/CMakeFiles/common.dir/dialog_about/AboutDialog_main.cpp.obj In file included from i:/temp/tmpKiCADSource/kicad-gost/common/dialog_about/AboutDialog_main.cpp:9:0: I:/temp/tmpKiCADSource/kicad-gost/common/./dialog_about/dialog_about.h:13:29: fatal error: wx/html/htmlwin.h: No such file or directory compilation terminated. make[2]: *** [common/CMakeFiles/common.dir/dialog_about/AboutDialog_main.cpp.obj] Error 1 make[1]: *** [common/CMakeFiles/common.dir/all] Error 2 make[1]: *** Waiting for unfinished jobs.... [ 41%] [ 42%] Building CXX object common/CMakeFiles/pcbcommon.dir/base_screen.cpp.obj Building CXX object common/CMakeFiles/pcbcommon.dir/eda_text.cpp.obj In file included from i:/temp/tmpKiCADSource/kicad-gost/common/base_screen.cpp:32:0: I:/temp/tmpKiCADSource/kicad-gost/include/fctsys.h:7:19: fatal error: wx/wx.h: No such file or directory compilation terminated. make[2]: *** [common/CMakeFiles/pcbcommon.dir/base_screen.cpp.obj] Error 1 make[2]: *** Waiting for unfinished jobs.... In file included from I:/temp/tmpKiCADSource/kicad-gost/include/eda_text.h:33:0, from i:/temp/tmpKiCADSource/kicad-gost/common/eda_text.cpp:30: I:/temp/tmpKiCADSource/kicad-gost/include/trigo.h:32:38: fatal error: wx/gdicmn.h: No such file or directory compilation terminated. make[2]: *** [common/CMakeFiles/pcbcommon.dir/eda_text.cpp.obj] Error 1 make[1]: *** [common/CMakeFiles/pcbcommon.dir/all] Error 2 make: *** [all] Error 2
I:\temp\tmpKiCADSource\kicad-gost\build> Все эти заголовочники есть, а чего он их вдруг перестал видеть, я не понимать. Кто как собирает виджеты, с какими опциями? Есть ли уже где-то скомпилированные, чтобы самому не наделать дел? Судя по ошибкам, не может найти wxWidgets на компе. Либо директория с wxWidgets снеслась, либо cmake заглючил. Если wxWidgets на месте, то предлагаю: 1) удалить содержимое директории I:\temp\tmpKiCADSource\kicad-gost\build 2) удалить файл CMakeCache.txt (если имеется) в директории I:\temp\tmpKiCADSource\kicad-gost 3) заново запустить cmake с нужной конфигурацией Если cmake успешно найдет wxWidgets, то заново запустить компиляцию с помощью make
|
|
|
|
|
May 22 2013, 16:43
|

Местный
  
Группа: Свой
Сообщений: 309
Регистрация: 18-04-08
Из: Томск
Пользователь №: 36 887

|
Цитата(AVL @ May 22 2013, 23:30)  Если cmake успешно найдет wxWidgets, то заново запустить компиляцию с помощью make Делал уже раз 30 такое. Виджеты есть. CMake их находит. Конфиг сделал только что, папка build была чистой. Код I:/PF/MinGW/msys/1.0/local/bin/wx-config I:/PF/MinGW/msys/1.0/local/bin/wxrc.exe AVL, может опишете вкратце как виджеты собираете? У меня есть что-то такое в записках. Собирал через консоль Msys, вроде. Код cd wxWidgets-2.9.1 cd build-release ../configure --enable-unicode --disable-debuge --disable-shared --enable-monolithic --with-opengl --with-odbc --with-aui --without-subdirs make make install
--------------------
Кто сказал МЯУ?
|
|
|
|
|
May 22 2013, 17:25
|
Местный
  
Группа: Свой
Сообщений: 392
Регистрация: 29-05-07
Из: Москва
Пользователь №: 28 020

|
Я на самом деле под винду делаю следующие простые действия: download and install http://www.cmake.org/files/v2.8/cmake-2.8.8-win32-x86.exedownload and install https://launchpad.net/bzr/2.5/2.5.1/+downlo...5.1-1-setup.exebzr branch lp:kicad-winbuilder cd kicad-winbuilder правлю KiCadWinbuilder.cmake (заменяю в двух местах lp:kicad на lp:~kicad-gost-committers/kicad/kicad) cmake -P KiCadWinbuilder.cmake версии cmake и bzr могут быть не обязательно как указаны, просто на тот момент когда я делал такую установку, были доступны для скачивания указанные версии этих программ. Цитата(tema-electric @ May 22 2013, 20:43)  AVL, может опишете вкратце как виджеты собираете? Под винду собирал либо с помощью MSVC, либо посредством автоматизированного скрипта, который на lp:kicad-winbuilder С помощью MSVC (пробовал разные версии) я потратил несколько дней, так и не смог собрать KiCad (виджеты собираются нормально).
|
|
|
|
|
May 23 2013, 02:24
|

Местный
  
Группа: Свой
Сообщений: 309
Регистрация: 18-04-08
Из: Томск
Пользователь №: 36 887

|
Цитата(AVL @ May 23 2013, 00:25)  kicad-winbuilder Этот скрипт ни разу не сработал. Виджеты скачивал и не мог их собрать. И причин тут много. На компе еще WinAVR стоит и WinARM, а там есть файлики типа make.exe ld.exe. Про CMake старше 2.8. Вроде ставил и там всплыли какие-то грабли. Вобщем он отказался собирать совсем у меня.
--------------------
Кто сказал МЯУ?
|
|
|
|
|
May 23 2013, 09:03
|

Местный
  
Группа: Свой
Сообщений: 309
Регистрация: 18-04-08
Из: Томск
Пользователь №: 36 887

|
Цитата(Сергей Борщ @ May 23 2013, 12:54)  WinAVR действительно глючный и вполне может быть причиной неправильной сборки. Если запускать cmake из консоли, то он не может сгенерировать makefile как раз из-за путей к WinAVR. В версии с GUI эти пути указываются. Но меня малость смущает тот факт, что make.exe берется из msys, а не mingw32-make.exe. Второй собирать отказывается на отрез. Наверно самый лучший вариант поставить виртуалную машину и там играть в эти игры на чистой системе, ну или как Вы, попытаться сделать кросскомпиляцию.
--------------------
Кто сказал МЯУ?
|
|
|
|
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|