Getting Started/Build/Windows/Cross-Compiling: Difference between revisions

    From KDE TechBase
    (Replaced content with "{{Moved To Community|Windows/Imported From TechBase/Build/{{#titleparts:{{PAGENAME}}||4}}}}")
     
    (17 intermediate revisions by 9 users not shown)
    Line 1: Line 1:
    {{improve|cross compiling is still unstable}}
    {{Moved To Community|Windows/Imported From TechBase/Build/{{#titleparts:{{PAGENAME}}||4}}}}
    {{KDE4}}
     
    ==Basic tools==
    ===MinGw===
    Install mingw for linux, on debian the packages are called mingw32, mingw32-binutils, mingw32-runtime, you need to install mingw32 with gcc/g++ 3 and not 4 since that doesn't work with kdelibs, debian testing/unstable has gcc 4 so i've installed mingw32 package from ubuntu repository
    ===Qt4 Kdesupport and dependencies===
    You can install these dependencies(aspell, boost, dbus, qca etc..) from windows with the kdewin installer or manually download them from [http://sourceforge.net/project/showfiles.php?group_id=214730 sourceforge mirrors]
    ===Qt4 and KDE4 for linux===
    You also need to have Qt4 and KDE4 already installed on linux, to use moc/uic/kde4automoc etc...
    ===Cmake===
    To cross compile kde you need cmake >= 2.5, you can get the last version from [http://cmake.org/HTML/Download.html#cvs CVS]
     
    * Create two files Toolchain-mingw32.cmake and mingw32-kdelibs.cmake with this contents and place them somewhere i.e. in your home
    ====Toolchain-mingw32.cmake====
    <code scheme>
    # the name of the target operating system
    SET(CMAKE_SYSTEM_NAME Windows)
     
    # which compilers to use for C and C++
    SET(CMAKE_C_COMPILER i586-mingw32msvc-gcc)
    SET(CMAKE_CXX_COMPILER i586-mingw32msvc-g++)
     
    # here is the target environment located
    SET(CMAKE_FIND_ROOT_PATH  /usr/i586-mingw32msvc /windows/kde4 )
     
    # 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)
     
    # FindQt4.cmake querys qmake to get information, this doesn't work when crosscompiling
    set(KDE4_INSTALL_DIR    /windows/kde4)
    set(QT_BINARY_DIR  /home/kdeuser/kde/src/qt-copy/bin)
    set(QT_LIBRARY_DIR  ${KDE4_INSTALL_DIR}/lib)
    set(QT_QTCORE_LIBRARY  ${KDE4_INSTALL_DIR}/lib/libQtCore4.a)
    set(QT_QTCORE_INCLUDE_DIR ${KDE4_INSTALL_DIR}/include/QtCore)
    set(QT_MKSPECS_DIR  ${KDE4_INSTALL_DIR}/mkspecs)
    set(QT_MOC_EXECUTABLE  ${QT_BINARY_DIR}/moc)
    set(QT_QMAKE_EXECUTABLE  ${QT_BINARY_DIR}/qmake)
    set(QT_UIC_EXECUTABLE  ${QT_BINARY_DIR}/uic)
    </code>
    ====mingw32-kdelibs.cmake====
    <code scheme>
    set(KDE4_INSTALL_DIR    /windows/kde4)
    set(KDE4_BIN_DIR    /home/kdeuser/kde/bin)
     
    # this one is used by FindKDE4.cmake to load FindKDE4Internal.cmake:
    set(KDE4_DATA_DIR    /windows/kde4/share/apps CACHE PATH "points to the apps directory of installed kdelibs")
     
    # not sure about this one:
    set(KDEWIN_DIR ${KDE4_INSTALL_DIR} CACHE PATH "what is it ?")
     
    # disable some things:
    set(WITH_AVAHI OFF  CACHE BOOL "Disabled")
    set(WITH_DNSSD OFF  CACHE BOOL "Disabled")
    set(WITH_ENCHANT OFF CACHE BOOL "Disabled")
    set(WITH_FAM OFF    CACHE BOOL "Disabled")
    set(WITH_GSSAPI OFF  CACHE BOOL "Disabled")
    set(WITH_HSPELL OFF  CACHE BOOL "Disabled")
    set(WITH_OpenEXR OFF CACHE BOOL "Disabled")
     
    set(KDE4_KCFGC_EXECUTABLE ${KDE4_BIN_DIR}/kconfig_compiler CACHE PATH "")
    set(KDE4_AUTOMOC_EXECUTABLE ${KDE4_BIN_DIR}/kde4automoc CACHE PATH "")
    set(KDE4_MEINPROC_EXECUTABLE ${KDE4_BIN_DIR}/meinproc4 CACHE PATH "")
    </code>
    adjust the values according to your setup
     
    ==Build kdelibs==
    <code bash>
    svn co svn://anonsvn.kde.org/home/kde/trunk/KDE/kdelibs
    cd kdelibs
    mkdir build
    cd build
    cmake -DCMAKE_TOOLCHAIN_FILE=~/Toolchain-mingw32.cmake -C ~/mingw32-kdelibs.cmake ..
    </code>
    * you have to make a link to your kde4automoc and kconfig_compiler for linux in the bin directory
    <code bash>
    ln -s /path/to/kde4automoc bin/
    ln -s /path/to/kconfig_compiler bin/
    </code>
    * since linux is case sensitive you have to make symbolic links for some headers
    <code bash>
    cd /windows/kde4/include
    ln -s soprano Soprano
    </code>
    * Edit kjsembed/kjsembed/CMakeLists.txt and add ${QT_QTCORE_LIBRARY} at the end
    target_link_libraries(${KJSEMBEDLIBNAME} ${KDE4_KDECORE_LIBS} ${QT_QTUITOOLS_LIBRARY} ${QT_QTGUI_LIBRARY} ${QT_QTSVG_LIBRARY} ${QT_QTXML_LIBRARY} <span style="font-weight:bold;color:red;">${QT_QTCORE_LIBRARY}</span> ${KJSLIBNAME} )
     
    * You will get an error in klauncher.moc about slotKDEInitData so go into kinit and do something like this(you need wine)
    <code bash>
    rm *.moc
    ../bin/kde4automoc.exe /home/kdeuser/kde/src/KDE/kdelibs/build/kinit/kdeinit_klauncher_automoc.cpp /home/kdeuser/kde/src/KDE/kdelibs/kinit /home/kdeuser/kde/src/KDE/kdelibs/build/kinit /windows/kde4/bin/moc.exe
    </code>
    and then do make as usual
     
    * Another error in kdewidgets because wine doesn't find some dll to run makekdewidgets.exe so either run the linux version manually like this
    makekdewidgets -o /home/kdeuser/kde/src/KDE/kdelibs/build/kdewidgets/kdewidgets.cpp /home/kdeuser/kde/src/KDE/kdelibs/kdewidgets/kde.widgets
    or symlink those missing library in your wine system32 folder(i haven't tested it but it should work)
     
    ==Build kdepimlibs==
    This is easy :)
    <code bash>
    svn co svn://anonsvn.kde.org/home/kde/trunk/KDE/kdepimlibs
    cd kdepimlibs
    mkdir build
    cd build
    cmake -DCMAKE_TOOLCHAIN_FILE=~/Toolchain-mingw32.cmake -C ~/mingw32-kdelibs.cmake  ..
    make
    make install
    </code>
     
    ==Build kdebase==
    This is easy :)
    <code bash>
    svn co svn://anonsvn.kde.org/home/kde/trunk/KDE/kdebase
    cd kdebase
    mkdir build
    cd build
    cmake -DCMAKE_TOOLCHAIN_FILE=~/Toolchain-mingw32.cmake -C ~/mingw32-kdelibs.cmake ..
    make
    make install
    </code>

    Latest revision as of 14:09, 11 March 2016

    This page is now on the community wiki.