diff options
author | Denis Shienkov <denis.shienkov@gmail.com> | 2021-11-05 16:13:03 +0300 |
---|---|---|
committer | Denis Shienkov <denis.shienkov@gmail.com> | 2022-02-04 11:29:03 +0000 |
commit | cb3d7e862c69c59e3b0111e19ace157be07acb88 (patch) | |
tree | 216be539d04d3819fefb6f21e7d46c334570ac84 /share/qbs/imports/qbs/Probes/WatcomProbe.qbs | |
parent | 38757a783a5a89f35a12184e77550017ee52d32e (diff) | |
download | qbs-cb3d7e862c69c59e3b0111e19ace157be07acb88.tar.gz |
Long live Open Watcom toolchain
This patch adds basic support for the Open Watcom toolchain.
This patch uses the `owcc` compiler (supplied with the toolchain),
which is a wrapper that supports the POSIX standard.
Reason is that the native OW compiler and linker has a limitations
in the command line arguments (e.g. they have wrong quotes handling
and so on).
This patch supports both the latest official version v1.9 and also
its fork v2.0.
Also added the CI autotests for the version v2.0 for the Windows
host. These autotests only perform a limited number of tests (only
the bare-metal tests) due to the following toolchain limitations:
* The toolchain does not have STL support (there seems to be some
kind of the partial support in the form of separate legacy STL ports).
* The toolchain support something compatible with the C++98 standard.
* The toolchain does not support the shared libraries on Linux hosts.
These limitations make it impossible or unjustified to reuse most
of the available tests (it requires a lot of work).
There was also an attempt to set up CI for tests on Linux host, but
for some reason the toolchain installer crashes on CI (although it
works fine on a local PC with Ubuntu).
Change-Id: Iecf76f51f0b09d31a89683f786b9cd7a825f235e
Reviewed-by: Ivan Komissarov <ABBAPOH@gmail.com>
Diffstat (limited to 'share/qbs/imports/qbs/Probes/WatcomProbe.qbs')
-rw-r--r-- | share/qbs/imports/qbs/Probes/WatcomProbe.qbs | 94 |
1 files changed, 94 insertions, 0 deletions
diff --git a/share/qbs/imports/qbs/Probes/WatcomProbe.qbs b/share/qbs/imports/qbs/Probes/WatcomProbe.qbs new file mode 100644 index 000000000..34be235b1 --- /dev/null +++ b/share/qbs/imports/qbs/Probes/WatcomProbe.qbs @@ -0,0 +1,94 @@ +/**************************************************************************** +** +** Copyright (C) 2022 Denis Shienkov <denis.shienkov@gmail.com> +** Contact: http://www.qt.io/licensing +** +** This file is part of Qbs. +** +** 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 http://www.qt.io/terms-conditions. For further information +** use the contact form at http://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 2.1 or version 3 as published by the Free +** Software Foundation and appearing in the file LICENSE.LGPLv21 and +** LICENSE.LGPLv3 included in the packaging of this file. Please review the +** following information to ensure the GNU Lesser General Public License +** requirements will be met: https://www.gnu.org/licenses/lgpl.html and +** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, The Qt Company gives you certain additional +** rights. These rights are described in The Qt Company LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +****************************************************************************/ + +import qbs.File +import qbs.ModUtils +import "../../../modules/cpp/watcom.js" as WATCOM + +PathProbe { + // Inputs + property string compilerFilePath + property stringList enableDefinesByLanguage + + property string _pathListSeparator + property string _toolchainInstallPath + property string _targetPlatform + + // Outputs + property string architecture + property string endianness + property string targetPlatform + property int versionMajor + property int versionMinor + property int versionPatch + property stringList includePaths + property var compilerDefinesByLanguage + property var environment + + configure: { + compilerDefinesByLanguage = {}; + + if (!File.exists(compilerFilePath)) { + found = false; + return; + } + + var languages = enableDefinesByLanguage; + if (!languages || languages.length === 0) + languages = ["c"]; + + environment = WATCOM.guessEnvironment(_targetPlatform, _toolchainInstallPath, + _pathListSeparator); + + includePaths = environment["INCLUDE"].split(_pathListSeparator).filter(function(path) { + return File.exists(path); + }); + + for (var i = 0; i < languages.length; ++i) { + var tag = languages[i]; + compilerDefinesByLanguage[tag] = WATCOM.dumpMacros(environment, compilerFilePath, tag); + } + + var macros = compilerDefinesByLanguage["c"] + || compilerDefinesByLanguage["cpp"]; + + endianness = macros["__BIG_ENDIAN"] ? "big" : "little"; + architecture = ModUtils.guessArchitecture(macros); + targetPlatform = ModUtils.guessTargetPlatform(macros); + + var version = WATCOM.guessVersion(macros); + if (version) { + versionMajor = version.major; + versionMinor = version.minor; + versionPatch = version.patch; + found = !!version.found && !!architecture && !!targetPlatform; + } + } +} |