From c3e0ff338d1dbd0dfb60a03f1d13b1574b0a9f99 Mon Sep 17 00:00:00 2001 From: Joerg Koenig Date: Fri, 31 May 2019 09:29:38 +0200 Subject: Fixed MinGW build Change-Id: Ic453a7d5e8e0ff2a1e541ff4b93ae9cac7b5490c --- Jenkinsfile | 21 ++- Makefile.mingw64 | 33 +++-- SOURCE/qt-5.12.3-cross-static-gcc-libs.patch | 202 +++++++++++++++++++++++++++ 3 files changed, 234 insertions(+), 22 deletions(-) create mode 100644 SOURCE/qt-5.12.3-cross-static-gcc-libs.patch diff --git a/Jenkinsfile b/Jenkinsfile index d65800e..8f5b5b8 100644 --- a/Jenkinsfile +++ b/Jenkinsfile @@ -69,12 +69,9 @@ stage('Build') { rm -Rf openssl-1.0.2r cp -Rf /c/dev-tools/gcc-suite/1.3.0/x86-mingw64/gcc-8.2.0 ./ echo "Done." - ''' - sh ''' - export PATH=$PWD/gcc-8.2.0/bin:/c/dev-tools/msys/x86/usr/bin:$PATH - make -f Makefile.mingw64 all - rm -Rf build.$(ARCH) - rm -Rf install.$(ARCH) + make GCC_PATH=$PWD/gcc-8.2.0 -f Makefile.mingw64 all + rm -Rf build.$(ARCH) + rm -Rf install.$(ARCH) ''' } stash name: "qtwin", includes: "*-msvc.zip, *-x86-mingw64.tgz" @@ -100,17 +97,19 @@ stage ("Post processing") { # # cleanup temporary destination folder for final distribution ... # unpack Linux archives ... - mkdir -p $WORKSPACE/INST/$QT_VER/x86-linux64 - tar -xzf $WORKSPACE/qt-$QT_VER-x86-linux64.tgz -C $WORKSPACE/INST/$QT_VER/x86-linux64 + mkdir -p $WORKSPACE/INST/$QT_VER/x86-linux64-shared + tar -xzf $WORKSPACE/qt-$QT_VER-shared-x86-linux64.tgz -C $WORKSPACE/INST/$QT_VER/x86-linux64-shared + mkdir -p $WORKSPACE/INST/$QT_VER/x86-linux64-static + tar -xzf $WORKSPACE/qt-$QT_VER-static-x86-linux64.tgz -C $WORKSPACE/INST/$QT_VER/x86-linux64-static mkdir -p $WORKSPACE/INST/$QT_VER/x86_64-msvc unzip -o $WORKSPACE/qt-$QT_VER-x86_64-msvc.zip -d $WORKSPACE/INST/$QT_VER/x86_64-msvc mkdir -p $WORKSPACE/INST/$QT_VER/x86-mingw64 tar -xzf $WORKSPACE/qt-$QT_VER-x86-mingw64.tgz -C $WORKSPACE/INST/$QT_VER/x86-mingw64 - # - # remove temporary folder ... - rm -Rf $WORKSPACE/tmp + + mkdir -p $WORKSPACE/INST/$QT_VER/x86-mingw64/xbin + cp -f $WORKSPACE/INST/$QT_VER/x86-linux64-static/bin/* $WORKSPACE/INST/$QT_VER/x86-mingw64/xbin # # finally create the whole archive ... cd $WORKSPACE/INST && tar -zcf $WORKSPACE/qt-$QT_VER-bin_64.tgz ./ diff --git a/Makefile.mingw64 b/Makefile.mingw64 index e638416..48e741f 100644 --- a/Makefile.mingw64 +++ b/Makefile.mingw64 @@ -1,19 +1,23 @@ -TOP = $(shell readlink -f .) +TOP = $(shell readlink -f .) -ARCH = x86-mingw64 +ARCH = x86-mingw64 LOCAL_BUILD_PATH = $(TOP)/build.$(ARCH) LOCAL_INST_PATH = $(TOP)/install.$(ARCH) VERSION_SHORT = 5.12 VERSION_RELEASE = 3 -VERSION = $(VERSION_SHORT).$(VERSION_RELEASE) +VERSION = $(VERSION_SHORT).$(VERSION_RELEASE) -SSL_VERSION = 1.0.2r -SSL_ARCHIVE = openssl-$(SSL_VERSION).tar.gz +SSL_VERSION = 1.0.2r +SSL_ARCHIVE = openssl-$(SSL_VERSION).tar.gz PACKAGE_NAME = qt-$(VERSION)-$(ARCH) +ifeq ($(GCC_PATH),) + $(error GCC_PATH variable not set) +endif + all: download ssl qt ssl: ssl.$(ARCH) @@ -28,8 +32,9 @@ ssl.$(ARCH): cd $(LOCAL_BUILD_PATH) && \ tar --force-local -xzf $(TOP)/SOURCE/$(SSL_ARCHIVE) cd $(LOCAL_BUILD_PATH)/openssl-$(SSL_VERSION) && \ + export PATH=$(GCC_PATH)/bin:$(PATH) && \ export CFLAGS="-m64 -fpic" && \ - ./Configure --prefix=$(LOCAL_INST_PATH)/openssl shared mingw64 && \ + ./Configure --prefix=$(LOCAL_INST_PATH)/qt-$(VERSION)/$(ARCH) shared mingw64 && \ make clean && \ make && \ make install @@ -38,12 +43,15 @@ qt.$(ARCH): mkdir -p $(LOCAL_BUILD_PATH) rm -Rf $(LOCAL_BUILD_PATH)/qt-everywhere-src-$(VERSION) if ! [ -d $(LOCAL_BUILD_PATH)/qt-everywhere-src-$(VERSION) ]; then \ - cd $(LOCAL_BUILD_PATH); \ - tar --force-local -xJf $(TOP)/SOURCE/qt-everywhere-src-$(VERSION).tar.xz; \ + cd $(LOCAL_BUILD_PATH); \ + tar --force-local -xJf $(TOP)/SOURCE/qt-everywhere-src-$(VERSION).tar.xz; \ + cd $(LOCAL_BUILD_PATH)/qt-everywhere-src-$(VERSION) ; \ + patch -p1 < $(TOP)/SOURCE/qt-5.12.3.mingw64.patch ; \ + patch -p1 < $(TOP)/SOURCE/qt-5.12.3-cross-static-gcc-libs.patch ; \ fi cd $(LOCAL_BUILD_PATH)/qt-everywhere-src-$(VERSION) && \ rm -f config.cache && \ - patch -p1 < $(TOP)/SOURCE/qt-5.12.3.mingw64.patch && \ + export PATH=$(GCC_PATH)/bin:$(PATH) && \ ./configure \ -platform win32-g++ \ -prefix $(LOCAL_INST_PATH)/qt-$(VERSION)/$(ARCH) \ @@ -70,13 +78,16 @@ qt.$(ARCH): -qt-freetype \ -opengl desktop \ -openssl \ - -I$(LOCAL_INST_PATH)/openssl/include \ - -L$(LOCAL_INST_PATH)/openssl/lib \ + -I$(LOCAL_INST_PATH)/qt-$(VERSION)/$(ARCH)/include \ + -L$(LOCAL_INST_PATH)/qt-$(VERSION)/$(ARCH)/lib \ -L$(GCC_PATH)/lib \ -opensource \ -confirm-license && \ make && \ make install + mv -f $(LOCAL_INST_PATH)/qt-$(VERSION)/$(ARCH)/bin/openssl.exe \ + $(LOCAL_INST_PATH)/qt-$(VERSION)/$(ARCH)/bin/qt-openssl.exe + cp -f $(GCC_PATH)/bin/*.dll $(LOCAL_INST_PATH)/qt-$(VERSION)/$(ARCH)/bin/ cd $(LOCAL_INST_PATH)/qt-$(VERSION)/$(ARCH) && \ tar --force-local -zcf $(TOP)/$(PACKAGE_NAME).tgz ./ diff --git a/SOURCE/qt-5.12.3-cross-static-gcc-libs.patch b/SOURCE/qt-5.12.3-cross-static-gcc-libs.patch new file mode 100644 index 0000000..017c5a9 --- /dev/null +++ b/SOURCE/qt-5.12.3-cross-static-gcc-libs.patch @@ -0,0 +1,202 @@ +diff -ruNb qt-everywhere-src-5.12.3.orig/qtbase/mkspecs/common/g++-win32.conf qt-everywhere-src-5.12.3/qtbase/mkspecs/common/g++-win32.conf +--- qt-everywhere-src-5.12.3.orig/qtbase/mkspecs/common/g++-win32.conf 2019-04-09 11:51:26.000000000 +0200 ++++ qt-everywhere-src-5.12.3/qtbase/mkspecs/common/g++-win32.conf 2019-05-31 08:58:29.103427860 +0200 +@@ -80,3 +80,5 @@ + + include(angle.conf) + include(windows-vulkan.conf) ++ ++QMAKE_LFLAGS += -static-libgcc -static-libstdc++ +diff -ruNb qt-everywhere-src-5.12.3.orig/qtbase/mkspecs/x-win32-g++/qmake.conf qt-everywhere-src-5.12.3/qtbase/mkspecs/x-win32-g++/qmake.conf +--- qt-everywhere-src-5.12.3.orig/qtbase/mkspecs/x-win32-g++/qmake.conf 1970-01-01 01:00:00.000000000 +0100 ++++ qt-everywhere-src-5.12.3/qtbase/mkspecs/x-win32-g++/qmake.conf 2019-05-31 08:59:13.555027712 +0200 +@@ -0,0 +1,30 @@ ++# ++# qmake configuration for win32-g++ ++# ++# Written for MinGW-w64 / gcc 5.3 or higher ++# ++# Cross compile from Linux to windows MinGW ++# ++ ++include(../common/g++-win32.conf) ++load(qt_config) ++ ++# modifications to g++-win32.conf ++ ++QMAKE_CC = $$(CROSS_COMPILE)gcc ++QMAKE_CFLAGS += -fno-keep-inline-dllexport ++QMAKE_CFLAGS_WARN_ON += -Wextra ++ ++QMAKE_CXX = $$(CROSS_COMPILE)g++ ++QMAKE_CXXFLAGS += -fno-keep-inline-dllexport ++QMAKE_CXXFLAGS_WARN_ON = $$QMAKE_CFLAGS_WARN_ON ++ ++QMAKE_LINK = $$(CROSS_COMPILE)g++ ++QMAKE_LINK_C = $$(CROSS_COMPILE)gcc ++ ++QMAKE_CFLAGS_LTCG = -flto ++QMAKE_CXXFLAGS_LTCG = $$QMAKE_CFLAGS_LTCG ++QMAKE_LFLAGS_LTCG = $$QMAKE_CFLAGS_LTCG ++ ++win32.LIBS = ${{QT.prefix}}/lib ++QMAKE_LIBS_OPENGL = +diff -ruNb qt-everywhere-src-5.12.3.orig/qtbase/mkspecs/x-win32-g++/qplatformdefs.h qt-everywhere-src-5.12.3/qtbase/mkspecs/x-win32-g++/qplatformdefs.h +--- qt-everywhere-src-5.12.3.orig/qtbase/mkspecs/x-win32-g++/qplatformdefs.h 1970-01-01 01:00:00.000000000 +0100 ++++ qt-everywhere-src-5.12.3/qtbase/mkspecs/x-win32-g++/qplatformdefs.h 2019-05-31 08:59:13.555027712 +0200 +@@ -0,0 +1,155 @@ ++/**************************************************************************** ++** ++** Copyright (C) 2016 The Qt Company Ltd. ++** Contact: https://www.qt.io/licensing/ ++** ++** This file is part of the qmake spec of the Qt Toolkit. ++** ++** $QT_BEGIN_LICENSE:LGPL$ ++** Commercial License Usage ++** Licensees holding valid commercial Qt licenses may use this file in ++** accordance with the commercial license agreement provided with the ++** Software or, alternatively, in accordance with the terms contained in ++** a written agreement between you and The Qt Company. For licensing terms ++** and conditions see https://www.qt.io/terms-conditions. For further ++** information use the contact form at https://www.qt.io/contact-us. ++** ++** GNU Lesser General Public License Usage ++** Alternatively, this file may be used under the terms of the GNU Lesser ++** General Public License version 3 as published by the Free Software ++** Foundation and appearing in the file LICENSE.LGPL3 included in the ++** packaging of this file. Please review the following information to ++** ensure the GNU Lesser General Public License version 3 requirements ++** will be met: https://www.gnu.org/licenses/lgpl-3.0.html. ++** ++** GNU General Public License Usage ++** Alternatively, this file may be used under the terms of the GNU ++** General Public License version 2.0 or (at your option) the GNU General ++** Public license version 3 or any later version approved by the KDE Free ++** Qt Foundation. The licenses are as published by the Free Software ++** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3 ++** included in the packaging of this file. Please review the following ++** information to ensure the GNU General Public License requirements will ++** be met: https://www.gnu.org/licenses/gpl-2.0.html and ++** https://www.gnu.org/licenses/gpl-3.0.html. ++** ++** $QT_END_LICENSE$ ++** ++****************************************************************************/ ++ ++#ifndef QPLATFORMDEFS_H ++#define QPLATFORMDEFS_H ++ ++#ifdef UNICODE ++#ifndef _UNICODE ++#define _UNICODE ++#endif ++#endif ++ ++// Get Qt defines/settings ++ ++#include "qglobal.h" ++ ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++ ++#if !defined(_WIN32_WINNT) || (_WIN32_WINNT-0 < 0x0500) ++typedef enum { ++ NameUnknown = 0, ++ NameFullyQualifiedDN = 1, ++ NameSamCompatible = 2, ++ NameDisplay = 3, ++ NameUniqueId = 6, ++ NameCanonical = 7, ++ NameUserPrincipal = 8, ++ NameCanonicalEx = 9, ++ NameServicePrincipal = 10, ++ NameDnsDomain = 12 ++} EXTENDED_NAME_FORMAT, *PEXTENDED_NAME_FORMAT; ++#endif ++ ++#ifdef QT_LARGEFILE_SUPPORT ++#define QT_STATBUF struct _stati64 // non-ANSI defs ++#define QT_STATBUF4TSTAT struct _stati64 // non-ANSI defs ++#define QT_STAT ::_stati64 ++#define QT_FSTAT ::_fstati64 ++#else ++#define QT_STATBUF struct _stat // non-ANSI defs ++#define QT_STATBUF4TSTAT struct _stat // non-ANSI defs ++#define QT_STAT ::_stat ++#define QT_FSTAT ::_fstat ++#endif ++#define QT_STAT_REG _S_IFREG ++#define QT_STAT_DIR _S_IFDIR ++#define QT_STAT_MASK _S_IFMT ++#if defined(_S_IFLNK) ++# define QT_STAT_LNK _S_IFLNK ++#endif ++#define QT_FILENO _fileno ++#define QT_OPEN ::_open ++#define QT_CLOSE ::_close ++#ifdef QT_LARGEFILE_SUPPORT ++#define QT_LSEEK ::_lseeki64 ++#ifndef UNICODE ++#define QT_TSTAT ::_stati64 ++#else ++#define QT_TSTAT ::_wstati64 ++#endif ++#else ++#define QT_LSEEK ::_lseek ++#ifndef UNICODE ++#define QT_TSTAT ::_stat ++#else ++#define QT_TSTAT ::_wstat ++#endif ++#endif ++#define QT_READ ::_read ++#define QT_WRITE ::_write ++#define QT_ACCESS ::_access ++#define QT_GETCWD ::_getcwd ++#define QT_CHDIR ::_chdir ++#define QT_MKDIR ::_mkdir ++#define QT_RMDIR ::_rmdir ++#define QT_OPEN_LARGEFILE 0 ++#define QT_OPEN_RDONLY _O_RDONLY ++#define QT_OPEN_WRONLY _O_WRONLY ++#define QT_OPEN_RDWR _O_RDWR ++#define QT_OPEN_CREAT _O_CREAT ++#define QT_OPEN_TRUNC _O_TRUNC ++#define QT_OPEN_APPEND _O_APPEND ++#if defined(O_TEXT) ++# define QT_OPEN_TEXT _O_TEXT ++# define QT_OPEN_BINARY _O_BINARY ++#endif ++ ++#include "../common/c89/qplatformdefs.h" ++ ++#ifdef QT_LARGEFILE_SUPPORT ++#undef QT_FSEEK ++#undef QT_FTELL ++#undef QT_OFF_T ++ ++#define QT_FSEEK ::fseeko64 ++#define QT_FTELL ::ftello64 ++#define QT_OFF_T off64_t ++#endif ++ ++#define QT_SIGNAL_ARGS int ++ ++#define QT_VSNPRINTF ::_vsnprintf ++#define QT_SNPRINTF ::_snprintf ++ ++# define F_OK 0 ++# define X_OK 1 ++# define W_OK 2 ++# define R_OK 4 ++ ++ ++#endif // QPLATFORMDEFS_H -- cgit v0.12