QGCPostLinkCommon.pri 6.39 KB
Newer Older
Gus Grubba's avatar
Gus Grubba committed
1 2 3 4 5 6 7 8
################################################################################
#
# (c) 2009-2020 QGROUNDCONTROL PROJECT <http://www.qgroundcontrol.org>
#
# QGroundControl is licensed according to the terms in the file
# COPYING.md in the root of the source code directory.
#
################################################################################
Don Gagne's avatar
Don Gagne committed
9

10
# These are the Post Link steps which are common to all builds
Don Gagne's avatar
Don Gagne committed
11

Don Gagne's avatar
Don Gagne committed
12 13
QMAKE_POST_LINK += echo "Post Link Common"

Don Gagne's avatar
Don Gagne committed
14 15 16 17
#
# Perform platform specific setup
#

DonLakeFlyer's avatar
DonLakeFlyer committed
18
MacBuild {
19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43

    # Qt is screwed up if you use qmake to create an XCode Project which has a DESTDIR set on it.
    # This is because XCode builds create the .app in BUILT_PRODUCTS_DIR. If you use a DESTDIR then
    # Qt adds a Copy Phase to the build which copies the .app from the BUILT_PRODUCTS_DIR to DESTDIR.
    # This causes all sort of problem which are too long to list here. In order to work around this
    # We have to duplicate the post link commands here to work from two different locations. And to deal
    # with the differences between post list command running in a shell script (XCode) versus a makefile (Qt Creator)
    macx-xcode {
        # SDL2 Framework
        QMAKE_POST_LINK += && rsync -a --delete $$SOURCE_DIR/libs/Frameworks/SDL2.Framework $BUILT_PRODUCTS_DIR/$${TARGET}.app/Contents/Frameworks
        QMAKE_POST_LINK += && install_name_tool -change "@rpath/SDL2.framework/Versions/A/SDL2" "@executable_path/../Frameworks/SDL2.framework/Versions/A/SDL2" $BUILT_PRODUCTS_DIR/$${TARGET}.app/Contents/MacOS/$${TARGET}
        # AirMap
        contains (DEFINES, QGC_AIRMAP_ENABLED) {
            QMAKE_POST_LINK += && rsync -a $$SOURCE_DIR/libs/airmapd/macOS/$$AIRMAP_QT_PATH/* $BUILT_PRODUCTS_DIR/$${TARGET}.app/Contents/Frameworks/
            QMAKE_POST_LINK += && install_name_tool -change "@rpath/libairmap-qt.0.0.1.dylib" "@executable_path/../Frameworks/libairmap-qt.0.0.1.dylib" $BUILT_PRODUCTS_DIR/$${TARGET}.app/Contents/MacOS/$${TARGET}
        }
    } else {
        # SDL2 Framework
        QMAKE_POST_LINK += && rsync -a --delete $$SOURCE_DIR/libs/Frameworks/SDL2.Framework $${TARGET}.app/Contents/Frameworks
        QMAKE_POST_LINK += && install_name_tool -change "@rpath/SDL2.framework/Versions/A/SDL2" "@executable_path/../Frameworks/SDL2.framework/Versions/A/SDL2" $${TARGET}.app/Contents/MacOS/$${TARGET}
        # AirMap
        contains (DEFINES, QGC_AIRMAP_ENABLED) {
            QMAKE_POST_LINK += && rsync -a $$SOURCE_DIR/libs/airmapd/macOS/$$AIRMAP_QT_PATH/* $${TARGET}.app/Contents/Frameworks/
            QMAKE_POST_LINK += && install_name_tool -change "@rpath/libairmap-qt.0.0.1.dylib" "@executable_path/../Frameworks/libairmap-qt.0.0.1.dylib" $${TARGET}.app/Contents/MacOS/$${TARGET}
        }
Gus Grubba's avatar
Gus Grubba committed
44
    }
Don Gagne's avatar
Don Gagne committed
45 46 47
}

WindowsBuild {
48
    #BASEDIR_WIN = $$replace(SOURCE_DIR, "/", "\\")
49
    QT_BIN_DIR  = $$dirname(QMAKE_QMAKE)
Don Gagne's avatar
Don Gagne committed
50

51 52
    # Copy dependencies
    DebugBuild: DLL_QT_DEBUGCHAR = "d"
53
    ReleaseBuild: DLL_QT_DEBUGCHAR = ""
Don Gagne's avatar
Don Gagne committed
54
    COPY_FILE_LIST = \
55 56 57
        $$SOURCE_DIR\\libs\\sdl2\\msvc\\lib\\x64\\SDL2.dll \
        $$SOURCE_DIR\\deploy\\libcrypto-1_1-x64.dll \
        $$SOURCE_DIR\\deploy\\libssl-1_1-x64.dll
58

Don Gagne's avatar
Don Gagne committed
59
    for(COPY_FILE, COPY_FILE_LIST) {
60
        QMAKE_POST_LINK += $$escape_expand(\\n) $$QMAKE_COPY \"$$COPY_FILE\" \"$$DESTDIR\"
Don Gagne's avatar
Don Gagne committed
61 62
    }

63
    ReleaseBuild {
dogmaphobic's avatar
dogmaphobic committed
64 65
        # Copy Visual Studio DLLs
        # Note that this is only done for release because the debugging versions of these DLLs cannot be redistributed.
66 67
        QMAKE_POST_LINK += $$escape_expand(\\n) $$QMAKE_COPY \"$$SOURCE_DIR\\deploy\\msvcp140.dll\"  \"$$DESTDIR\"
        QMAKE_POST_LINK += $$escape_expand(\\n) $$QMAKE_COPY \"$$SOURCE_DIR\\deploy\\vcruntime140.dll\"  \"$$DESTDIR\"
dogmaphobic's avatar
dogmaphobic committed
68
    }
69

70 71
    DEPLOY_TARGET = $$shell_quote($$shell_path($$DESTDIR\\$${TARGET}.exe))
    QMAKE_POST_LINK += $$escape_expand(\\n) $$QT_BIN_DIR\\windeployqt --qmldir=$${SOURCE_DIR}\\src $${DEPLOY_TARGET}
Don Gagne's avatar
Don Gagne committed
72
}
73

74
LinuxBuild {
75
    QMAKE_POST_LINK += echo "Post Link Common"
76 77 78
    QMAKE_POST_LINK += && mkdir -p $$DESTDIR/Qt/libs && mkdir -p $$DESTDIR/Qt/plugins

    # QT_INSTALL_LIBS
79
    QT_LIB_LIST += \
DonLakeFlyer's avatar
DonLakeFlyer committed
80
        libQt5Charts.so.5 \
81 82 83 84 85
        libQt5Core.so.5 \
        libQt5DBus.so.5 \
        libQt5Gui.so.5 \
        libQt5Location.so.5 \
        libQt5Multimedia.so.5 \
86
        libQt5MultimediaQuick.so.5 \
87 88 89
        libQt5Network.so.5 \
        libQt5OpenGL.so.5 \
        libQt5Positioning.so.5 \
90
        libQt5PositioningQuick.so.5 \
91 92 93
        libQt5PrintSupport.so.5 \
        libQt5Qml.so.5 \
        libQt5Quick.so.5 \
Don Gagne's avatar
Don Gagne committed
94
        libQt5QuickControls2.so.5 \
DonLakeFlyer's avatar
DonLakeFlyer committed
95 96
        libQt5QuickTemplates2.so.5 \
        libQt5QuickWidgets.so.5 \
97 98 99 100 101
        libQt5SerialPort.so.5 \
        libQt5Sql.so.5 \
        libQt5Svg.so.5 \
        libQt5Test.so.5 \
        libQt5Widgets.so.5 \
DoinLakeFlyer's avatar
DoinLakeFlyer committed
102
        libQt5X11Extras.so.5 \
103
        libQt5XcbQpa.so.5 \
DonLakeFlyer's avatar
DonLakeFlyer committed
104
        libQt5Xml.so.5 \
105
        libicui18n.so* \
106
        libQt5TextToSpeech.so.5
107 108

    !contains(DEFINES, __rasp_pi2__) {
109
        # Some Qt distributions link with *.so.56
110
        QT_LIB_LIST += \
111 112 113
            libicudata.so.56 \
            libicui18n.so.56 \
            libicuuc.so.56
114
    }
ChukRhodes's avatar
ChukRhodes committed
115

116 117 118
    for(QT_LIB, QT_LIB_LIST) {
        QMAKE_POST_LINK += && $$QMAKE_COPY --dereference $$[QT_INSTALL_LIBS]/$$QT_LIB $$DESTDIR/Qt/libs/
    }
119

120 121 122 123 124 125 126 127 128
    # QT_INSTALL_PLUGINS
    QT_PLUGIN_LIST = \
        bearer \
        geoservices \
        iconengines \
        imageformats \
        platforminputcontexts \
        platforms \
        position \
DonLakeFlyer's avatar
DonLakeFlyer committed
129 130
        sqldrivers \
        texttospeech
131 132 133 134

    !contains(DEFINES, __rasp_pi2__) {
        QT_PLUGIN_LIST += xcbglintegrations
    }
135

136 137 138
    for(QT_PLUGIN, QT_PLUGIN_LIST) {
        QMAKE_POST_LINK += && $$QMAKE_COPY --dereference --recursive $$[QT_INSTALL_PLUGINS]/$$QT_PLUGIN $$DESTDIR/Qt/plugins/
    }
139

140 141
    # QT_INSTALL_QML
    QMAKE_POST_LINK += && $$QMAKE_COPY --dereference --recursive $$[QT_INSTALL_QML] $$DESTDIR/Qt/
142

143 144
    # Airmap
    contains (DEFINES, QGC_AIRMAP_ENABLED) {
145
        QMAKE_POST_LINK += && $$QMAKE_COPY $$PWD/libs/airmapd/linux/Qt.5.11.0/libairmap-qt.so.0.0.1 $$DESTDIR/Qt/libs/
146 147
    }

148
    # QGroundControl start script
149
    contains (CONFIG, QGC_DISABLE_CUSTOM_BUILD) | !exists($$PWD/custom/custom.pri) {
150 151 152
        QMAKE_POST_LINK += && $$QMAKE_COPY $$SOURCE_DIR/deploy/qgroundcontrol-start.sh $$DESTDIR
        QMAKE_POST_LINK += && $$QMAKE_COPY $$SOURCE_DIR/deploy/qgroundcontrol.desktop $$DESTDIR
        QMAKE_POST_LINK += && $$QMAKE_COPY $$SOURCE_DIR/resources/icons/qgroundcontrol.png $$DESTDIR
153 154 155
    } else {
        include($$PWD/custom/custom_deploy.pri)
    }
156
}