From 63f245dc0e1442b7daade525dfa53e8f515230fc Mon Sep 17 00:00:00 2001 From: Denis Shienkov Date: Fri, 28 May 2021 18:58:23 +0300 Subject: baremetal: Long live COSMIC toolchain for HCS08 architecture This patch adds support for Cosmic Software compiler for the bare metal platforms: * https://www.cosmicsoftware.com/download.php Note that this compiler only works on Windows host platforms. Also the COSMIC toolchain has been added to the Github CI. Fixes: QBS-1641 Change-Id: I755fcd3b2a89d0d40fda8b7f9da3d72ee1918df5 Reviewed-by: Ivan Komissarov --- .github/workflows/main.yml | 3 ++ share/qbs/modules/cpp/cosmic.js | 44 +++++++++++++++++++--- src/app/qbs-setup-toolchains/cosmicprobe.cpp | 5 ++- .../one-object-asm-application/hcs8-cosmic.s | 5 +++ .../one-object-asm-application.qbs | 2 + 5 files changed, 52 insertions(+), 7 deletions(-) create mode 100644 tests/auto/blackbox/testdata-baremetal/one-object-asm-application/hcs8-cosmic.s diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index 67d8b1d71..2bd575d82 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -538,6 +538,9 @@ jobs: - name: cosmic-4_5_2-stm8 run: QBS_AUTOTEST_PROFILE=cosmic-4_5_2-stm8 scripts/test-baremetal.sh release/install-root/bin shell: bash + - name: cosmic-4_6_3-hcs8 + run: QBS_AUTOTEST_PROFILE=cosmic-4_6_3-hcs8 scripts/test-baremetal.sh release/install-root/bin + shell: bash test-macos: name: ${{ matrix.config.name }} diff --git a/share/qbs/modules/cpp/cosmic.js b/share/qbs/modules/cpp/cosmic.js index c6a47535c..cfb581579 100644 --- a/share/qbs/modules/cpp/cosmic.js +++ b/share/qbs/modules/cpp/cosmic.js @@ -43,6 +43,8 @@ function compilerName(qbs) { return "cxcorm"; else if (architecture === "stm8") return "cxstm8"; + else if (architecture === "hcs8") + return "cx6808"; throw "Unable to deduce compiler name for unsupported architecture: '" + architecture + "'"; } @@ -53,30 +55,41 @@ function assemblerName(qbs) { return "cacorm"; if (architecture === "stm8") return "castm8"; + else if (architecture === "hcs8") + return "ca6808"; throw "Unable to deduce assembler name for unsupported architecture: '" + architecture + "'"; } function linkerName(qbs) { var architecture = qbs.architecture; - if (architecture.startsWith("arm") || architecture === "stm8") + if (architecture.startsWith("arm") + || architecture === "stm8" + || architecture === "hcs8") { return "clnk"; + } throw "Unable to deduce linker name for unsupported architecture: '" + architecture + "'"; } function listerName(qbs) { var architecture = qbs.architecture; - if (architecture.startsWith("arm") || architecture === "stm8") + if (architecture.startsWith("arm") + || architecture === "stm8" + || architecture === "hcs8") { return "clabs"; + } throw "Unable to deduce lister name for unsupported architecture: '" + architecture + "'"; } function archiverName(qbs) { var architecture = qbs.architecture; - if (architecture.startsWith("arm") || architecture === "stm8") + if (architecture.startsWith("arm") + || architecture === "stm8" + || architecture === "hcs8") { return "clib"; + } throw "Unable to deduce archiver name for unsupported architecture: '" + architecture + "'"; } @@ -87,6 +100,8 @@ function staticLibrarySuffix(qbs) { return ".cxm"; else if (architecture === "stm8") return ".sm8"; + else if (architecture === "hcs8") + return ".h08"; throw "Unable to deduce static library suffix for unsupported architecture: '" + architecture + "'"; } @@ -97,22 +112,30 @@ function executableSuffix(qbs) { return ".cxm"; else if (architecture === "stm8") return ".sm8"; + else if (architecture === "hcs8") + return ".h08"; throw "Unable to deduce executable suffix for unsupported architecture: '" + architecture + "'"; } function objectSuffix(qbs) { var architecture = qbs.architecture; - if (architecture.startsWith("arm") || architecture === "stm8") + if (architecture.startsWith("arm") + || architecture === "stm8" + || architecture === "hcs8") { return ".o"; + } throw "Unable to deduce object file suffix for unsupported architecture: '" + architecture + "'"; } function imageFormat(qbs) { var architecture = qbs.architecture; - if (architecture.startsWith("arm") || architecture === "stm8") + if (architecture.startsWith("arm") + || architecture === "stm8" + || architecture === "hcs8") { return "cosmic"; + } throw "Unable to deduce image format for unsupported architecture: '" + architecture + "'"; } @@ -123,6 +146,8 @@ function guessArchitecture(compilerFilePath) { return "arm"; else if (baseName === "cxstm8") return "stm8"; + else if (baseName === "cx6808") + return "hcs8"; throw "Unable to deduce architecture for unsupported compiler: '" + baseName + "'"; } @@ -181,8 +206,11 @@ function dumpVersion(compilerFilePath) { function guessEndianness(architecture) { // There is no mention of supported endianness in the cosmic compiler. - if (architecture.startsWith("arm") || architecture === "stm8") + if (architecture.startsWith("arm") + || architecture === "stm8" + || architecture === "hcs8") { return "big"; + } throw "Unable to deduce endianness for unsupported architecture: '" + architecture + "'"; } @@ -199,6 +227,10 @@ function dumpDefaultPaths(compilerFilePath, architecture) { includePath = FileInfo.joinPaths(rootPath, "hstm8"); if (File.exists(includePath)) includePaths.push(includePath); + } else if (architecture === "hcs8") { + includePath = FileInfo.joinPaths(rootPath, "h6808"); + if (File.exists(includePath)) + includePaths.push(includePath); } var libraryPaths = []; diff --git a/src/app/qbs-setup-toolchains/cosmicprobe.cpp b/src/app/qbs-setup-toolchains/cosmicprobe.cpp index 2abf10a9a..5813ab0d8 100644 --- a/src/app/qbs-setup-toolchains/cosmicprobe.cpp +++ b/src/app/qbs-setup-toolchains/cosmicprobe.cpp @@ -58,7 +58,8 @@ using Internal::HostOsInfo; static QStringList knownCosmicCompilerNames() { - return {QStringLiteral("cxcorm"), QStringLiteral("cxstm8")}; + return {QStringLiteral("cxcorm"), QStringLiteral("cxstm8"), + QStringLiteral("cx6808")}; } static QString guessCosmicArchitecture(const QFileInfo &compiler) @@ -68,6 +69,8 @@ static QString guessCosmicArchitecture(const QFileInfo &compiler) return QStringLiteral("arm"); if (baseName == QLatin1String("cxstm8")) return QStringLiteral("stm8"); + if (baseName == QLatin1String("cx6808")) + return QStringLiteral("hcs8"); return {}; } diff --git a/tests/auto/blackbox/testdata-baremetal/one-object-asm-application/hcs8-cosmic.s b/tests/auto/blackbox/testdata-baremetal/one-object-asm-application/hcs8-cosmic.s new file mode 100644 index 000000000..c33c2b32d --- /dev/null +++ b/tests/auto/blackbox/testdata-baremetal/one-object-asm-application/hcs8-cosmic.s @@ -0,0 +1,5 @@ +_main: + .dcall "2,0,_main" + rts + xdef _main + end diff --git a/tests/auto/blackbox/testdata-baremetal/one-object-asm-application/one-object-asm-application.qbs b/tests/auto/blackbox/testdata-baremetal/one-object-asm-application/one-object-asm-application.qbs index f9e2b8ca5..37eac0a4d 100644 --- a/tests/auto/blackbox/testdata-baremetal/one-object-asm-application/one-object-asm-application.qbs +++ b/tests/auto/blackbox/testdata-baremetal/one-object-asm-application/one-object-asm-application.qbs @@ -7,6 +7,8 @@ BareMetalApplication { return true; if (qbs.architecture === "stm8") return true; + if (qbs.architecture === "hcs8") + return true; } else if (qbs.toolchainType === "keil") { if (qbs.architecture.startsWith("arm")) return true; -- cgit v1.2.3