1d3b190425
Linker response files for the MinGW and Unix makefile generators are controlled by the variable QMAKE_LINK_OBJECT_MAX. This variable holds a number. If the number of object files passed to the linker exceeds this number, a linker response file containing object file paths is created. This heuristic is extremely imprecise. It doesn't take into account the length of object file names nor the length of $$OBJECTS_DIR. Also, when using a static Qt, a big part of the linker command line are libraries. A relatively small example can fail to link with "The command line is too long" on Windows, even with the object files being in a response file. The MinGW makefile generator already reads the variable QMAKE_RESPONSEFILE_THRESHOLD for compiler response files. Re-use this variable for the linker response file of the Unix and MinGW makefile generators. If QMAKE_RESPONSEFILE_THRESHOLD is set, use it to determine whether to create a response file. QMAKE_LINK_OBJECT_MAX is then ignored. The response file contains objects and libraries. If QMAKE_RESPONSEFILE_THRESHOLD is not set, use QMAKE_LINK_OBJECT_MAX to determine whether to create a response file. The response file contains only object files. QMAKE_LINK_OBJECT_SCRIPT is used in both cases to specify a common base name of all linker response files. Pick-to: 6.2 6.3 Task-number: QTBUG-100559 Change-Id: I3c78354fa5ebb1a86438ec804679e0ee776c3f49 Reviewed-by: Alexandru Croitor <alexandru.croitor@qt.io> Reviewed-by: Qt CI Bot <qt_ci_bot@qt-project.org> Reviewed-by: Kai Koehne <kai.koehne@qt.io>
68 lines
2.4 KiB
C++
68 lines
2.4 KiB
C++
/****************************************************************************
|
|
**
|
|
** Copyright (C) 2016 The Qt Company Ltd.
|
|
** Contact: https://www.qt.io/licensing/
|
|
**
|
|
** This file is part of the qmake application of the Qt Toolkit.
|
|
**
|
|
** $QT_BEGIN_LICENSE:GPL-EXCEPT$
|
|
** 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 General Public License Usage
|
|
** Alternatively, this file may be used under the terms of the GNU
|
|
** General Public License version 3 as published by the Free Software
|
|
** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
|
|
** 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-3.0.html.
|
|
**
|
|
** $QT_END_LICENSE$
|
|
**
|
|
****************************************************************************/
|
|
|
|
#ifndef MINGW_MAKE_H
|
|
#define MINGW_MAKE_H
|
|
|
|
#include "winmakefile.h"
|
|
|
|
QT_BEGIN_NAMESPACE
|
|
|
|
class MingwMakefileGenerator : public Win32MakefileGenerator
|
|
{
|
|
protected:
|
|
using MakefileGenerator::escapeDependencyPath;
|
|
QString escapeDependencyPath(const QString &path) const override;
|
|
ProString fixLibFlag(const ProString &lib) override;
|
|
bool processPrlFileBase(QString &origFile, QStringView origName,
|
|
QStringView fixedBase, int slashOff) override;
|
|
bool writeMakefile(QTextStream &) override;
|
|
void init() override;
|
|
QString installRoot() const override;
|
|
private:
|
|
void writeMingwParts(QTextStream &);
|
|
void writeIncPart(QTextStream &t) override;
|
|
void writeLibsPart(QTextStream &t) override;
|
|
void writeObjectsPart(QTextStream &t) override;
|
|
void writeBuildRulesPart(QTextStream &t) override;
|
|
void writeRcFilePart(QTextStream &t) override;
|
|
|
|
QStringList &findDependencies(const QString &file) override;
|
|
|
|
QString preCompHeaderOut;
|
|
|
|
LibFlagType parseLibFlag(const ProString &flag, ProString *arg) override;
|
|
|
|
QString objectsLinkLine;
|
|
LinkerResponseFileInfo linkerResponseFile;
|
|
};
|
|
|
|
QT_END_NAMESPACE
|
|
|
|
#endif // MINGW_MAKE_H
|