summaryrefslogtreecommitdiff
path: root/scripts
diff options
context:
space:
mode:
authorDenis Shienkov <denis.shienkov@gmail.com>2021-11-05 16:13:03 +0300
committerDenis Shienkov <denis.shienkov@gmail.com>2022-02-04 11:29:03 +0000
commitcb3d7e862c69c59e3b0111e19ace157be07acb88 (patch)
tree216be539d04d3819fefb6f21e7d46c334570ac84 /scripts
parent38757a783a5a89f35a12184e77550017ee52d32e (diff)
downloadqbs-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 'scripts')
-rwxr-xr-xscripts/install-ow.sh193
1 files changed, 193 insertions, 0 deletions
diff --git a/scripts/install-ow.sh b/scripts/install-ow.sh
new file mode 100755
index 000000000..4c8784277
--- /dev/null
+++ b/scripts/install-ow.sh
@@ -0,0 +1,193 @@
+#!/usr/bin/env bash
+#############################################################################
+##
+## Copyright (C) 2022 Denis Shienkov <denis.shienkov@gmail.com>
+## Contact: https://www.qt.io/licensing/
+##
+## This file is part of Qbs.
+##
+## $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$
+##
+#############################################################################
+set -eu
+
+function show_help() {
+ cat <<EOF
+usage: install-ow [options] [components]
+
+Examples
+ ./install-ow.sh --platform win --architecture x64
+
+Options
+ -d, --directory <directory>
+ Root directory where to install the components.
+ Maps to c:/watcom on Windows, /opt/watcom on Linux
+ by default.
+
+ --platform <platform-os>
+ The host platform. Can be one of linux, win. Auto-detected by default.
+
+ --architecture <architecture-os>
+ The host architecture. Can be one of x86, x64. Auto-detected by default.
+
+ --version <version>
+ The desired toolchain version. Currently supported only
+ 1.9 and 2.0 versions.
+
+EOF
+}
+
+VERSION=2.0 # Default latest version (a fork of original toolchain)..
+
+case "$OSTYPE" in
+ *linux*)
+ PLATFORM="linux"
+ INSTALL_DIR="/opt/watcom"
+ EXE_SUFFIX=
+ ;;
+ msys)
+ PLATFORM="win"
+ INSTALL_DIR="/c/watcom"
+ EXE_SUFFIX=".exe"
+ ;;
+ *)
+ PLATFORM=
+ INSTALL_DIR=
+ EXE_SUFFIX=
+ ;;
+esac
+
+case "$HOSTTYPE" in
+ x86_64)
+ ARCHITECTURE="x64"
+ ;;
+ x86)
+ ARCHITECTURE="x86"
+ ;;
+ *)
+ ARCHITECTURE=
+ ;;
+esac
+
+while [ $# -gt 0 ]; do
+ case "$1" in
+ --directory|-d)
+ INSTALL_DIR="$2"
+ shift
+ ;;
+ --platform)
+ PLATFORM="$2"
+ shift
+ ;;
+ --architecture)
+ ARCHITECTURE="$2"
+ shift
+ ;;
+ --version)
+ VERSION="$2"
+ shift
+ ;;
+ --help|-h)
+ show_help
+ exit 0
+ ;;
+ *)
+ ;;
+ esac
+ shift
+done
+
+if [ -z "${INSTALL_DIR}" ]; then
+ echo "No --directory specified or auto-detection failed." >&2
+ exit 1
+fi
+
+if [ -z "${PLATFORM}" ]; then
+ echo "No --platform specified or auto-detection failed." >&2
+ exit 1
+fi
+
+if [ -z "${ARCHITECTURE}" ]; then
+ echo "No --architecture specified or auto-detection failed." >&2
+ exit 1
+fi
+
+if [ -z "${VERSION}" ]; then
+ echo "No --version specified." >&2
+ exit 1
+fi
+
+DOWNLOAD_DIR=`mktemp -d 2>/dev/null || mktemp -d -t 'ow-installer'`
+
+BASE_URL_PREFIX="https://github.com/open-watcom/open-watcom-"
+
+if [[ "${VERSION}" == "1.9" ]]; then
+ # Original old OW v1.9 release supports only the 32-bit packages!
+ if [[ "${PLATFORM}" =~ "linux" ]]; then
+ BIN_DIR="binl"
+ HOST="linux"
+ elif [[ "${PLATFORM}" =~ "win" ]]; then
+ HOST="win32"
+ BIN_DIR="binnt"
+ fi
+ URL="${BASE_URL_PREFIX}${VERSION}/releases/download/ow1.9/open-watcom-c-${HOST}-1.9${EXE_SUFFIX}"
+else
+ if [[ "${PLATFORM}" =~ "linux" ]]; then
+ if [[ "${ARCHITECTURE}" =~ "x86" ]]; then
+ BIN_DIR="binl"
+ elif [[ "${ARCHITECTURE}" =~ "x64" ]]; then
+ BIN_DIR="binl"
+ fi
+ elif [[ "${PLATFORM}" =~ "win" ]]; then
+ if [[ "${ARCHITECTURE}" =~ "x86" ]]; then
+ BIN_DIR="binnt"
+ elif [[ "${ARCHITECTURE}" =~ "x64" ]]; then
+ BIN_DIR="binnt64"
+ fi
+ fi
+ # Default URL for the latest OW v2.0 fork.
+ URL="${BASE_URL_PREFIX}v2/releases/download/Current-build/open-watcom-2_0-c-${PLATFORM}-${ARCHITECTURE}${EXE_SUFFIX}"
+fi
+
+INSTALLER="${DOWNLOAD_DIR}/setup${EXE_SUFFIX}"
+
+echo "Downloading from ${URL}..." >&2
+curl --progress-bar -L -o ${INSTALLER} ${URL} >&2
+
+echo "Installing to ${INSTALL_DIR}..." >&2
+if [[ "${PLATFORM}" =~ "linux" ]]; then
+ chmod +777 ${INSTALLER}
+fi
+
+${INSTALLER} -dDstDir=${INSTALL_DIR} -i -np -ns
+echo "${INSTALL_DIR}/${BIN_DIR}"
+
+rm -f ${INSTALLER}