WebAssembly: Hide WebAssemblyToolchain class definition in .cpp

Change-Id: I7fbff6ff6e48b5b971b490a058b5406d011411b0
Reviewed-by: Jarek Kobus <jaroslaw.kobus@qt.io>
This commit is contained in:
hjk
2024-01-18 15:11:31 +01:00
parent a92a4aad9a
commit 6aa6463f75
4 changed files with 54 additions and 60 deletions

View File

@@ -55,7 +55,7 @@ static void askUserAboutEmSdkSetup()
if (!ICore::infoBar()->canInfoBeAdded(setupWebAssemblyEmSdk) if (!ICore::infoBar()->canInfoBeAdded(setupWebAssemblyEmSdk)
|| !WebAssemblyQtVersion::isQtVersionInstalled() || !WebAssemblyQtVersion::isQtVersionInstalled()
|| WebAssemblyToolChain::areToolChainsRegistered()) || areToolChainsRegistered())
return; return;
InfoBarEntry info(setupWebAssemblyEmSdk, InfoBarEntry info(setupWebAssemblyEmSdk,

View File

@@ -59,7 +59,7 @@ WebAssemblySettings::WebAssemblySettings()
emSdk.setExpectedKind(Utils::PathChooser::ExistingDirectory); emSdk.setExpectedKind(Utils::PathChooser::ExistingDirectory);
emSdk.setDefaultValue(QDir::homePath()); emSdk.setDefaultValue(QDir::homePath());
connect(this, &Utils::AspectContainer::applied, &WebAssemblyToolChain::registerToolChains); connect(this, &Utils::AspectContainer::applied, &registerToolChains);
setLayouter([this] { setLayouter([this] {
auto instruction = new QLabel( auto instruction = new QLabel(
@@ -138,7 +138,7 @@ void WebAssemblySettings::updateStatus()
if (sdkValid) { if (sdkValid) {
const QVersionNumber sdkVersion = WebAssemblyEmSdk::version(newEmSdk); const QVersionNumber sdkVersion = WebAssemblyEmSdk::version(newEmSdk);
const QVersionNumber minVersion = WebAssemblyToolChain::minimumSupportedEmSdkVersion(); const QVersionNumber minVersion = minimumSupportedEmSdkVersion();
const bool versionTooLow = sdkVersion < minVersion; const bool versionTooLow = sdkVersion < minVersion;
m_emSdkVersionDisplay->setType(versionTooLow ? InfoLabel::NotOk : InfoLabel::Ok); m_emSdkVersionDisplay->setType(versionTooLow ? InfoLabel::NotOk : InfoLabel::Ok);
auto bold = [](const QString &text) { return QString("<b>" + text + "</b>"); }; auto bold = [](const QString &text) { return QString("<b>" + text + "</b>"); };

View File

@@ -9,6 +9,7 @@
#include "webassemblytr.h" #include "webassemblytr.h"
#include <projectexplorer/devicesupport/devicemanager.h> #include <projectexplorer/devicesupport/devicemanager.h>
#include <projectexplorer/gcctoolchain.h>
#include <projectexplorer/kitmanager.h> #include <projectexplorer/kitmanager.h>
#include <projectexplorer/projectexplorerconstants.h> #include <projectexplorer/projectexplorerconstants.h>
#include <projectexplorer/projectmacro.h> #include <projectexplorer/projectmacro.h>
@@ -22,6 +23,8 @@
#include <utils/hostosinfo.h> #include <utils/hostosinfo.h>
#include <utils/qtcassert.h> #include <utils/qtcassert.h>
#include <QVersionNumber>
using namespace ProjectExplorer; using namespace ProjectExplorer;
using namespace QtSupport; using namespace QtSupport;
using namespace Utils; using namespace Utils;
@@ -39,6 +42,12 @@ static const Abi &toolChainAbi()
return abi; return abi;
} }
const QVersionNumber &minimumSupportedEmSdkVersion()
{
static const QVersionNumber number(1, 39);
return number;
}
static void addRegisteredMinGWToEnvironment(Environment &env) static void addRegisteredMinGWToEnvironment(Environment &env)
{ {
if (!ToolchainManager::isLoaded()) { if (!ToolchainManager::isLoaded()) {
@@ -54,49 +63,47 @@ static void addRegisteredMinGWToEnvironment(Environment &env)
env.appendOrSetPath(toolChain->compilerCommand().parentDir()); env.appendOrSetPath(toolChain->compilerCommand().parentDir());
} }
void WebAssemblyToolChain::addToEnvironment(Environment &env) const class WebAssemblyToolChain final : public GccToolchain
{ {
const FilePath emSdk = settings().emSdk(); public:
WebAssemblyEmSdk::addToEnvironment(emSdk, env); WebAssemblyToolChain() :
if (env.osType() == OsTypeWindows) GccToolchain(Constants::WEBASSEMBLY_TOOLCHAIN_TYPEID)
addRegisteredMinGWToEnvironment(env); // qmake based builds require [mingw32-]make.exe {
} setSupportedAbis({toolChainAbi()});
setTargetAbi(toolChainAbi());
WebAssemblyToolChain::WebAssemblyToolChain() : setTypeDisplayName(Tr::tr("Emscripten Compiler"));
GccToolchain(Constants::WEBASSEMBLY_TOOLCHAIN_TYPEID)
{
setSupportedAbis({toolChainAbi()});
setTargetAbi(toolChainAbi());
setTypeDisplayName(Tr::tr("Emscripten Compiler"));
}
FilePath WebAssemblyToolChain::makeCommand(const Environment &environment) const
{
// Diverged duplicate of ClangToolChain::makeCommand and MingwToolChain::makeCommand
const QStringList makes = environment.osType() == OsTypeWindows
? QStringList({"mingw32-make.exe", "make.exe"})
: QStringList({"make"});
FilePath tmp;
for (const QString &make : makes) {
tmp = environment.searchInPath(make);
if (!tmp.isEmpty())
return tmp;
} }
return FilePath::fromString(makes.first());
}
bool WebAssemblyToolChain::isValid() const void addToEnvironment(Environment &env) const final
{ {
return GccToolchain::isValid() const FilePath emSdk = settings().emSdk();
&& QVersionNumber::fromString(version()) >= minimumSupportedEmSdkVersion(); WebAssemblyEmSdk::addToEnvironment(emSdk, env);
} if (env.osType() == OsTypeWindows)
addRegisteredMinGWToEnvironment(env); // qmake based builds require [mingw32-]make.exe
}
const QVersionNumber &WebAssemblyToolChain::minimumSupportedEmSdkVersion() FilePath makeCommand(const Environment &environment) const final
{ {
static const QVersionNumber number(1, 39); // Diverged duplicate of ClangToolChain::makeCommand and MingwToolChain::makeCommand
return number; const QStringList makes = environment.osType() == OsTypeWindows
} ? QStringList({"mingw32-make.exe", "make.exe"})
: QStringList({"make"});
FilePath tmp;
for (const QString &make : makes) {
tmp = environment.searchInPath(make);
if (!tmp.isEmpty())
return tmp;
}
return FilePath::fromString(makes.first());
}
bool isValid() const final
{
return GccToolchain::isValid()
&& QVersionNumber::fromString(version()) >= minimumSupportedEmSdkVersion();
}
};
static Toolchains doAutoDetect(const ToolchainDetector &detector) static Toolchains doAutoDetect(const ToolchainDetector &detector)
{ {
@@ -136,7 +143,7 @@ static Toolchains doAutoDetect(const ToolchainDetector &detector)
return result; return result;
} }
void WebAssemblyToolChain::registerToolChains() void registerToolChains()
{ {
// Remove old toolchains // Remove old toolchains
for (Toolchain *tc : ToolchainManager::findToolchains(toolChainAbi())) { for (Toolchain *tc : ToolchainManager::findToolchains(toolChainAbi())) {
@@ -162,7 +169,7 @@ void WebAssemblyToolChain::registerToolChains()
} }
} }
bool WebAssemblyToolChain::areToolChainsRegistered() bool areToolChainsRegistered()
{ {
return !ToolchainManager::findToolchains(toolChainAbi()).isEmpty(); return !ToolchainManager::findToolchains(toolChainAbi()).isEmpty();
} }

View File

@@ -3,26 +3,13 @@
#pragma once #pragma once
#include <projectexplorer/gcctoolchain.h>
#include <QVersionNumber> #include <QVersionNumber>
namespace WebAssembly::Internal { namespace WebAssembly::Internal {
class WebAssemblyToolChain final : public ProjectExplorer::GccToolchain const QVersionNumber &minimumSupportedEmSdkVersion();
{ void registerToolChains();
public: bool areToolChainsRegistered();
WebAssemblyToolChain();
void addToEnvironment(Utils::Environment &env) const override;
Utils::FilePath makeCommand(const Utils::Environment &environment) const override;
bool isValid() const override;
static const QVersionNumber &minimumSupportedEmSdkVersion();
static void registerToolChains();
static bool areToolChainsRegistered();
};
void setupWebAssemblyToolchain(); void setupWebAssemblyToolchain();