Jump to content

Programming Reference:Building Qt for BCI2000 (obsolete): Difference between revisions

From BCI2000 Wiki
Mellinger (talk | contribs)
No edit summary
Mellinger (talk | contribs)
Line 14: Line 14:
  -fast  
  -fast  
  -qt-zlib
  -qt-zlib
-qt-gif
  -qt-libpng  
  -qt-libpng  
  -qt-libmng  
  -qt-libmng  
Line 26: Line 25:
  -no-style-cde  
  -no-style-cde  
For convenience, the same options on a single line:
For convenience, the same options on a single line:
  -platform win32-msvc2008 -static -no-sql-sqlite -no-qt3support -fast -qt-zlib -qt-gif -qt-libpng -qt-libmng -no-libtiff -no-libjpeg -no-phonon -no-webkit -no-scripttools -no-style-plastique -no-style-motif -no-style-cde  
  -platform win32-msvc2008 -static -no-sql-sqlite -no-qt3support -fast -qt-zlib -qt-libpng -qt-libmng -no-libtiff -no-libjpeg -no-phonon -no-webkit -no-scripttools -no-style-plastique -no-style-motif -no-style-cde  


*When prompted for the type of license, choose "Open Source", and answer "yes" when asked whether you accept the terms of the license.
*When prompted for the type of license, choose "Open Source", and answer "yes" when asked whether you accept the terms of the license.

Revision as of 14:57, 11 June 2013

This document describes how to build Qt for installation in the BCI2000 source tree.

Note: Following this procedure is only required if you are a member of the BCI2000 team, and if your task is to update the Qt build coming with BCI2000. In case you just want to build BCI2000 against a version of Qt outside the source tree, run CMake a first time, then open the file BCI2000/build/CMakeCache.txt in the CMake GUI, or in a text editor, and set the value of the USE_EXTERNAL_QT option to "ON".

Build and copy MSVC libraries and auxiliary files

  • Download and install Qt on your machine.
  • Open the file qt/mkspecs/win32-msvc2008/qmake.conf in a text editor. In QMAKE_CFLAGS_RELEASE and QMAKE_CFLAGS_DEBUG, replace the -MD and -MDd with -MT and -MTd, respectively.
  • Open the VS2008 console window from the start menu, and from the Qt installation's qt directory, run configure with the following options:
-platform win32-msvc2008 
-static 
-no-sql-sqlite
-no-qt3support 
-fast 
-qt-zlib
-qt-libpng 
-qt-libmng 
-no-libtiff 
-no-libjpeg 
-no-phonon 
-no-webkit 
-no-scripttools 
-no-style-plastique 
-no-style-motif 
-no-style-cde 

For convenience, the same options on a single line:

-platform win32-msvc2008 -static -no-sql-sqlite -no-qt3support -fast -qt-zlib -qt-libpng -qt-libmng -no-libtiff -no-libjpeg -no-phonon -no-webkit -no-scripttools -no-style-plastique -no-style-motif -no-style-cde 
  • When prompted for the type of license, choose "Open Source", and answer "yes" when asked whether you accept the terms of the license.
  • Run nmake in the following directories:
    • qt/src/corelib,
    • qt/src/gui,
    • qt/src/winmain,
    • qt/src/opengl,
    • qt/src/script.
  • Copy the following files from qt/bin to BCI2000/src/extlib/qt/msvc/bin:
findtr
idc.exe
moc.exe
qmake.exe
rcc.exe
syncqt
uic.exe
libgcc_s_dw2-1.dll
mingwm10.dll

Make sure to leave the qt.conf file unaffected.

  • From qt/lib, copy the following files to BCI2000/src/extlib/qt/msvc/lib:
QtCore.lib
QtCored.lib
QtCored.pdb
QtGui.lib
QtGuid.lib
QtGuid.pdb
qtmain.lib
qtmaind.lib
qtmaind.pdb
QtOpenGL.lib
QtOpenGLd.lib
QtOpenGLd.pdb
QtScript.lib
QtScriptd.lib
QtScriptd.pdb
  • From qt/mkspecs, copy the file qconfig.pri, and recursively copy the contents of the features and the win32-msvc2008 directories to BCI2000/src/extlib/qt/msvc/mkspecs.
  • In BCI2000/src/extlib/qt/msvc/mkspecs/win32-msvc2008/qmake.conf, remove the -Fd$(DESTDIR)$(QMAKE_TARGET).pdb compiler option from QMAKE_CFLAGS_DEBUG.
  • Repeat the entire process with MSVC2010, with results going into the msvc10 directory rather than the msvc directory.

Note: Why do we need debug libraries?

For the stripped-down version of Qt provided in the BCI2000 source tree, no source code is available, and debugging information in the Qt libraries cannot be used for debugging. Thus, it appears that always linking to the release version of the Qt libraries would be sufficient, saving considerable space in the SVN data base, and download time for the user. Unfortunately, it turns out that this is not sufficient, and that both debugging versions of the Qt libraries, and associated pdb files, are required in the BCI2000 source tree.

  • MSVC does not cleanly separate between compile and link stages. Rather, the compiler provides /M switches that determine the runtime libraries to be used in the linking stage.
  • Due to this dependency of object code on certain runtime libraries, it is not cleanly possible to link together static libraries compiled with one /M switch with application code compiled with another /M switch. Thus, we need to provide both release and debug versions of the Qt libraries.

Build and copy mingw libraries and auxiliary files

  • From the Qt installation's qt directory, run configure with the following options:
-platform win32-g++
-static 
-no-sql-sqlite
-no-qt3support 
-fast 
-qt-zlib
-qt-gif 
-qt-libpng 
-qt-libmng 
-no-libtiff 
-no-libjpeg 
-no-phonon 
-no-webkit 
-no-scripttools 
-no-style-plastique 
-no-style-motif 
-no-style-cde 
  • When prompted for the type of license, choose "Open Source", and answer "yes" when asked whether you accept the terms of the license.
  • Open a console window, and run mingw32-make in the following directories:
    • qt/src/corelib,
    • qt/src/gui,
    • qt/src/winmain,
    • qt/src/opengl,
    • qt/src/script.
  • When the build is finished, copy the following files from qt/bin to BCI2000/src/extlib/qt/mingw/bin:
findtr
idc.exe
moc.exe
qmake.exe
rcc.exe
syncqt
uic.exe
libgcc_s_dw2-1.dll
mingwm10.dll

Leave the qt.conf file in place, don't modify it.

  • From qt/lib, copy the following files to BCI2000/src/extlib/qt/mingw/lib:
libQtCore.a
libQtGui.a
libqtmain.a
libQtOpenGL.a
libQtScript.a
  • From qt/mkspecs, copy the file qconfig.pri, and recursively copy the contents of directories features, common, and win32-g++ to BCI2000/src/extlib/qt/mingw/mkspecs.

Copy Qt include files to the BCI2000 directory

  • Most header files point to header files in the qt/src header files. We don't want to provide the entire qt/src directory, so we need to replace these header files with the content of the files they point to. There is a fixheader tool provided in the BCI2000 source tree at build/buildutils/fixheader.cpp. Under cygwin, execute
make fixheader

from that directory to build the executable. Then, cd to the qt/include/Qt directory of your Qt installation, and execute

for i in `find *.h`; do /full/path/to/fixheader $i; done

Repeat this step for the QtCore, QtGui, QtOpenGL, and QtScript include directories.

  • Copy the contents of the directory qt/include/Qt into BCI2000/src/extlib/qt/include/Qt, omitting the private directory.
  • Likewise, copy the QtCore, QtGui, QtOpenGL, QtScript include directories to BCI2000/src/extlib/qt/include, omitting the respective private directories.

See also

Programming Reference:Build System