Сергей Борщ 141 17 мая, 2013 Опубликовано 17 мая, 2013 · Жалоба Вопрос по кросс-сборке. Задача: на машине с Linux Mint 14 (64 бита) собрать КиКАД для 32-битного виндовса. С wxWidgets проблем нет, указал --host=i686-w64-mingw32 --prefix=$BUILD_DIR/../install/wx-win, все собралось и установилось. Теперь сборка собственно КиКАДа. В доке такой вариант сборки не описан или я его не нашел. Гуглением выяснил, что надо создать файл (win-cross.cmake) примерно следующего содержания # 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, но возможно кто-то уже прошел по этим граблям? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
AVL 0 17 мая, 2013 Опубликовано 17 мая, 2013 · Жалоба Возможно кто-то уже имеет опыт такой кросс-сборки? Как его заставить? Я, конечно, могу полезть копать внутренности 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 kicad_mingw.patch.zip Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Сергей Борщ 141 17 мая, 2013 Опубликовано 17 мая, 2013 · Жалоба У меня получилась следующая последовательность действий: Угу. Разница в указании пути к 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. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Сергей Борщ 141 17 мая, 2013 Опубликовано 17 мая, 2013 · Жалоба добавил 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 его как бы находит, "нехай подавится". Собралось. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
AVL 0 17 мая, 2013 Опубликовано 17 мая, 2013 · Жалоба добавил 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, который собран, но не был и не планируется быть установленным. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Сергей Борщ 141 17 мая, 2013 Опубликовано 17 мая, 2013 · Жалоба А после сборки wxWidgets делали sudo make install ?Поскольку папка, указанная как --prefix при конфигурировании wx находится в моей домашней директории и у меня есть права на запись в нее без sudo, то я делал просто make install. После данной команды в /usr/local/bin должен появиться symlink на wx-config, который cmake по идее должен найти.Нелогично. А если у меня несколько сборок, каждая следующая своим symlink будет переписывать предыдущий? Зачем тогда --prefix и все эти рассуждения о типа-chroot в cmake? Да и искать она должна согласно описанию _только_ в указанных в CMAKE_FIND_ROOT_PATH папках. И по идее должна найти. А вместо этого возвращает полный путь в совсем другую директорию, где ее некто искать не просил и где искомого файла нет. То есть на сколько я понимаю, необходимо деинсталлировать (sudo make uninstall) установленные ранее версии wxWidgets.Не, ну это несерьезно. Я собираю минимум под две архитектуры, и перед каждой сборокой я должен удалять/ставить очередной wxWidgets? Нет. У каждого из них есть свой --prefix и этого должно хватать. Просто конкретно тут cmake споткнулся. После чего собрать с помощью mingw желаемую версию wxWidgets и выполнить ее установку:Это я делаю. Только без ldconfig. Я пока слабо понимаю его смысл. Если так не делать, то нужно при сборке KiCad передать в качестве параметра путь к wxWidgets, который собран, но не был и не планируется быть установленным.Там как бы два "путя", которыми идет поиск - либо Виндовс-путь, когда местоположение wxWidgets передается в качестве параметра, и он предполагает, что wx был собран при помощи прилагающихся к нему готовых makefiles, без configure. И уних-путь, когда местоположение установленного wx прописывается в path или, как у вас, в CMAKE_FIND_ROOT_PATH и его поиск и вытягиваение параметров происходит через вызов wx-config, которую в моем случае cmake найти не смог. Я же пишу, что cmake-вский FIND_PROGRAM() у меня отрабатывает не так, как написано в его документации. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
AHTOXA 18 17 мая, 2013 Опубликовано 17 мая, 2013 · Жалоба То-то я удивлялся, что сделанный мной deb-пакет для wxWidgets не работает после установки на другую машину! (Потом обнаружил, что make install для wxWidgets отчасти игнорирует параметр --prefix и создаёт какие-то файлы за пределами указанной в --prefix директории.) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
AVL 0 17 мая, 2013 Опубликовано 17 мая, 2013 · Жалоба Не, ну это несерьезно. Я собираю минимум под две архитектуры, и перед каждой сборокой я должен удалять/ставить очередной wxWidgets? Нет. У каждого из них есть свой --prefix и этого должно хватать. В такой ситуации да, не удобно. Я пробовал так собирать один раз, было интересно проверить саму идею, получится или нет. Забыл еще прикрепить файл патча, который указан в последовательности действий. Добавил файл к тому моему сообщению (путь к сообщению с патчем). Не помню деталей уже (это было 2012-07-01). Видимо тоже что-то не получалось и правил руками файл CMakeModules/FindwxWidgets.cmake. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
tema-electric 0 22 мая, 2013 Опубликовано 22 мая, 2013 · Жалоба До нового года в недалеком 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> Все эти заголовочники есть, а чего он их вдруг перестал видеть, я не понимать. Кто как собирает виджеты, с какими опциями? Есть ли уже где-то скомпилированные, чтобы самому не наделать дел? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
AVL 0 22 мая, 2013 Опубликовано 22 мая, 2013 · Жалоба До нового года в недалеком 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 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
tema-electric 0 22 мая, 2013 Опубликовано 22 мая, 2013 · Жалоба Если 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 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
AVL 0 22 мая, 2013 Опубликовано 22 мая, 2013 · Жалоба Я на самом деле под винду делаю следующие простые действия: download and install http://www.cmake.org/files/v2.8/cmake-2.8.8-win32-x86.exe download and install https://launchpad.net/bzr/2.5/2.5.1/+downlo...5.1-1-setup.exe bzr branch lp:kicad-winbuilder cd kicad-winbuilder правлю KiCadWinbuilder.cmake (заменяю в двух местах lp:kicad на lp:~kicad-gost-committers/kicad/kicad) cmake -P KiCadWinbuilder.cmake версии cmake и bzr могут быть не обязательно как указаны, просто на тот момент когда я делал такую установку, были доступны для скачивания указанные версии этих программ. AVL, может опишете вкратце как виджеты собираете? Под винду собирал либо с помощью MSVC, либо посредством автоматизированного скрипта, который на lp:kicad-winbuilder С помощью MSVC (пробовал разные версии) я потратил несколько дней, так и не смог собрать KiCad (виджеты собираются нормально). Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
tema-electric 0 23 мая, 2013 Опубликовано 23 мая, 2013 · Жалоба kicad-winbuilder Этот скрипт ни разу не сработал. Виджеты скачивал и не мог их собрать. И причин тут много. На компе еще WinAVR стоит и WinARM, а там есть файлики типа make.exe ld.exe. Про CMake старше 2.8. Вроде ставил и там всплыли какие-то грабли. Вобщем он отказался собирать совсем у меня. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Сергей Борщ 141 23 мая, 2013 Опубликовано 23 мая, 2013 · Жалоба На компе еще WinAVR стоит и WinARM, а там есть файлики типа make.exe ld.exe.ld.exe мешать не должен, потому что находится в директориях недоступных через PATH. А вот старый и глючный make от WinAVR удалите безжалостно вместе со всей директорией utils (и запить в PATH о ней тоже). Если есть такие же утилиты в комплекте WinARM - прибивайте и их. Используйте те, что идут в mingw/msys. Не уверен, что причина именно в этом, но make от WinAVR действительно глючный и вполне может быть причиной неправильной сборки. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
tema-electric 0 23 мая, 2013 Опубликовано 23 мая, 2013 · Жалоба WinAVR действительно глючный и вполне может быть причиной неправильной сборки. Если запускать cmake из консоли, то он не может сгенерировать makefile как раз из-за путей к WinAVR. В версии с GUI эти пути указываются. Но меня малость смущает тот факт, что make.exe берется из msys, а не mingw32-make.exe. Второй собирать отказывается на отрез. Наверно самый лучший вариант поставить виртуалную машину и там играть в эти игры на чистой системе, ну или как Вы, попытаться сделать кросскомпиляцию. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться