Перейти к содержанию
    

Сборка из исходников

Вопрос по кросс-сборке.

Задача: на машине с 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, но возможно кто-то уже прошел по этим граблям?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Возможно кто-то уже имеет опыт такой кросс-сборки? Как его заставить? Я, конечно, могу полезть копать внутренности 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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

У меня получилась следующая последовательность действий:

Угу. Разница в указании пути к 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.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

добавил 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 его как бы находит, "нехай подавится". Собралось.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

добавил 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, который собран, но не был и не планируется быть установленным.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

А после сборки 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() у меня отрабатывает не так, как написано в его документации.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

То-то я удивлялся, что сделанный мной deb-пакет для wxWidgets не работает после установки на другую машину! (Потом обнаружил, что make install для wxWidgets отчасти игнорирует параметр --prefix и создаёт какие-то файлы за пределами указанной в --prefix директории.)

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Не, ну это несерьезно. Я собираю минимум под две архитектуры, и перед каждой сборокой я должен удалять/ставить очередной wxWidgets? Нет. У каждого из них есть свой --prefix и этого должно хватать.

В такой ситуации да, не удобно.

Я пробовал так собирать один раз, было интересно проверить саму идею, получится или нет.

 

Забыл еще прикрепить файл патча, который указан в последовательности действий.

Добавил файл к тому моему сообщению (путь к сообщению с патчем).

 

Не помню деталей уже (это было 2012-07-01). Видимо тоже что-то не получалось и правил руками файл CMakeModules/FindwxWidgets.cmake.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

До нового года в недалеком 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>

Все эти заголовочники есть, а чего он их вдруг перестал видеть, я не понимать.

 

Кто как собирает виджеты, с какими опциями? Есть ли уже где-то скомпилированные, чтобы самому не наделать дел?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

До нового года в недалеком 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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Если 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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Я на самом деле под винду делаю следующие простые действия:

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 (виджеты собираются нормально).

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

kicad-winbuilder

Этот скрипт ни разу не сработал. Виджеты скачивал и не мог их собрать. И причин тут много.

На компе еще WinAVR стоит и WinARM, а там есть файлики типа make.exe ld.exe.

 

Про CMake старше 2.8. Вроде ставил и там всплыли какие-то грабли. Вобщем он отказался собирать совсем у меня.

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

На компе еще WinAVR стоит и WinARM, а там есть файлики типа make.exe ld.exe.
ld.exe мешать не должен, потому что находится в директориях недоступных через PATH. А вот старый и глючный make от WinAVR удалите безжалостно вместе со всей директорией utils (и запить в PATH о ней тоже). Если есть такие же утилиты в комплекте WinARM - прибивайте и их. Используйте те, что идут в mingw/msys. Не уверен, что причина именно в этом, но make от WinAVR действительно глючный и вполне может быть причиной неправильной сборки.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

WinAVR действительно глючный и вполне может быть причиной неправильной сборки.

Если запускать cmake из консоли, то он не может сгенерировать makefile как раз из-за путей к WinAVR. В версии с GUI эти пути указываются. Но меня малость смущает тот факт, что make.exe берется из msys, а не mingw32-make.exe. Второй собирать отказывается на отрез.

Наверно самый лучший вариант поставить виртуалную машину и там играть в эти игры на чистой системе, ну или как Вы, попытаться сделать кросскомпиляцию.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...