diff options
author | Denis Shienkov <denis.shienkov@gmail.com> | 2021-04-03 17:37:03 +0300 |
---|---|---|
committer | Denis Shienkov <denis.shienkov@gmail.com> | 2021-04-05 15:05:25 +0000 |
commit | ef7b698b74b4f77b2dd8135ff8f4451aca727763 (patch) | |
tree | 8ff9fde4ec7c7ff683dd82fb00b18a1287c1c536 /tests/auto | |
parent | af7d67396edadebd3a1f38623453f1af5cae440c (diff) |
baremetal: Improve linkerMapFile() test
Right now we can use the cpp.linkerMapSuffix property
to find out the currently used linker map suffix.
Also we can set a custom cpp.linkerMapSuffix value to
make sure that this applies to the module.
In addition, the generation of a custom linker map file
for SDCC toolchain has been fixed.
Change-Id: I8798cd6bea0ab6b5ea9728400827b8c98b11ba7b
Reviewed-by: Ivan Komissarov <ABBAPOH@gmail.com>
Reviewed-by: Denis Shienkov <denis.shienkov@gmail.com>
Diffstat (limited to 'tests/auto')
-rw-r--r-- | tests/auto/blackbox/testdata-baremetal/linker-map/linker-map.qbs | 6 | ||||
-rw-r--r-- | tests/auto/blackbox/tst_blackboxbaremetal.cpp | 54 |
2 files changed, 31 insertions, 29 deletions
diff --git a/tests/auto/blackbox/testdata-baremetal/linker-map/linker-map.qbs b/tests/auto/blackbox/testdata-baremetal/linker-map/linker-map.qbs index 676221e11..fe93ac144 100644 --- a/tests/auto/blackbox/testdata-baremetal/linker-map/linker-map.qbs +++ b/tests/auto/blackbox/testdata-baremetal/linker-map/linker-map.qbs @@ -1,10 +1,8 @@ import "../BareMetalApplication.qbs" as BareMetalApplication BareMetalApplication { - condition: { - console.info("current toolset: %%" - + qbs.toolchainType + "%%, %%" + qbs.architecture + "%%"); - return true; + property bool dummy: { + console.info("linker map suffix: %%" + cpp.linkerMapSuffix + "%%"); } files: ["main.c"] } diff --git a/tests/auto/blackbox/tst_blackboxbaremetal.cpp b/tests/auto/blackbox/tst_blackboxbaremetal.cpp index a5feedd48..1e300e246 100644 --- a/tests/auto/blackbox/tst_blackboxbaremetal.cpp +++ b/tests/auto/blackbox/tst_blackboxbaremetal.cpp @@ -59,6 +59,16 @@ static bool extractCompilerIncludePaths(const QByteArray &output, QStringList &c return true; } +static bool extractQuitedValue(const QByteArray &output, QString &pattern) +{ + const QRegularExpression re("%%(.+)%%"); + const QRegularExpressionMatch match = re.match(output); + if (!match.hasMatch()) + return false; + pattern = match.captured(1); + return true; +} + static QByteArray unsupportedToolsetMessage(const QByteArray &output) { QByteArray toolchain; @@ -68,17 +78,6 @@ static QByteArray unsupportedToolsetMessage(const QByteArray &output) + "' for architecture '" + architecture + "'"; } -static QString linkerMapFileExtension(const QByteArray &toolchain, const QByteArray &architecture) -{ - if (toolchain == "keil") { - if (architecture == "mcs51") - return QStringLiteral(".m51"); - if (architecture == "c166") - return QStringLiteral(".m66"); - } - return QStringLiteral(".map"); -} - TestBlackboxBareMetal::TestBlackboxBareMetal() : TestBlackboxBase (SRCDIR "/testdata-baremetal", "blackbox-baremetal") { @@ -215,33 +214,38 @@ void TestBlackboxBareMetal::compilerListingFiles() void TestBlackboxBareMetal::linkerMapFile_data() { QTest::addColumn<bool>("generateMap"); - QTest::newRow("do-not-generate-linker-map") << false; - QTest::newRow("generate-linker-map") << true; + QTest::addColumn<QString>("customMapSuffix"); + QTest::newRow("do-not-generate-linker-map") << false << ""; + QTest::newRow("generate-default-linker-map") << true << ""; + QTest::newRow("generate-custom-linker-map") << true << ".mmm"; } void TestBlackboxBareMetal::linkerMapFile() { QFETCH(bool, generateMap); + QFETCH(QString, customMapSuffix); QDir::setCurrent(testDataDir + "/linker-map"); rmDirR(relativeBuildDir()); - const QStringList args = {QStringLiteral("modules.cpp.generateLinkerMapFile:%1") - .arg(generateMap ? "true" : "false")}; + QStringList args = {QStringLiteral("modules.cpp.generateLinkerMapFile:%1") + .arg(generateMap ? "true" : "false")}; + if (!customMapSuffix.isEmpty()) + args << QStringLiteral("modules.cpp.linkerMapSuffix:%1").arg(customMapSuffix); + QCOMPARE(runQbs(QbsRunParameters("resolve", args)), 0); - if (m_qbsStdout.contains("unsupported toolset:")) - QSKIP(unsupportedToolsetMessage(m_qbsStdout)); - if (!m_qbsStdout.contains("current toolset:")) - QFAIL("No current toolset pattern exists"); + if (!m_qbsStdout.contains("linker map suffix:")) + QFAIL("No current linker map suffix pattern exists"); - QByteArray toolchain; - QByteArray architecture; - if (!extractToolset(m_qbsStdout, toolchain, architecture)) - QFAIL("Unable to extract current toolset"); + QString linkerMapSuffix; + if (!extractQuitedValue(m_qbsStdout, linkerMapSuffix)) + QFAIL("Unable to extract current linker map suffix"); + + if (!customMapSuffix.isEmpty()) + QCOMPARE(linkerMapSuffix, customMapSuffix); QCOMPARE(runQbs(QbsRunParameters(args)), 0); const QString productBuildDir = relativeProductBuildDir("linker-map"); - const auto extension = linkerMapFileExtension(toolchain, architecture); - const QString linkerMap = productBuildDir + "/linker-map" + extension; + const QString linkerMap = productBuildDir + "/linker-map" + linkerMapSuffix; QCOMPARE(regularFileExists(linkerMap), generateMap); } |