aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorhjk <hjk@qt.io>2022-01-24 15:14:09 +0100
committerhjk <hjk@qt.io>2022-02-03 10:16:06 +0000
commit9b7f580a1434795a40cccc0f3b9bb13befab7ee5 (patch)
treef647b1f385ad7a0c6c196e1888e4b130df99a2f0
parentbd095d1ebef3fa4992c066ef82f1e18b9b5cb5ab (diff)
WebAssembly: Move auto-detection into stand-alone function
Change-Id: I641946e62998371e6e45b6c6d75e069b8729eaa6 Reviewed-by: <github-actions-qt-creator@cristianadam.eu> Reviewed-by: Alessandro Portale <alessandro.portale@qt.io>
-rw-r--r--src/plugins/webassembly/webassemblytoolchain.cpp80
-rw-r--r--src/plugins/webassembly/webassemblytoolchain.h7
2 files changed, 43 insertions, 44 deletions
diff --git a/src/plugins/webassembly/webassemblytoolchain.cpp b/src/plugins/webassembly/webassemblytoolchain.cpp
index 780e48e165..bebf2866fb 100644
--- a/src/plugins/webassembly/webassemblytoolchain.cpp
+++ b/src/plugins/webassembly/webassemblytoolchain.cpp
@@ -111,6 +111,43 @@ const QVersionNumber &WebAssemblyToolChain::minimumSupportedEmSdkVersion()
return number;
}
+static Toolchains doAutoDetect(const ToolchainDetector &detector)
+{
+ const FilePath sdk = WebAssemblyEmSdk::registeredEmSdk();
+ if (!WebAssemblyEmSdk::isValid(sdk))
+ return {};
+
+ if (detector.device) {
+ // Only detect toolchains from the emsdk installation device
+ const FilePath deviceRoot = detector.device->mapToGlobalPath({});
+ if (deviceRoot.host() != sdk.host())
+ return {};
+ }
+
+ Environment env = sdk.deviceEnvironment();
+ WebAssemblyEmSdk::addToEnvironment(sdk, env);
+
+ Toolchains result;
+ for (auto languageId : {ProjectExplorer::Constants::C_LANGUAGE_ID,
+ ProjectExplorer::Constants::CXX_LANGUAGE_ID}) {
+ auto toolChain = new WebAssemblyToolChain;
+ toolChain->setLanguage(languageId);
+ toolChain->setDetection(ToolChain::AutoDetection);
+ const bool cLanguage = languageId == ProjectExplorer::Constants::C_LANGUAGE_ID;
+ const QString script = QLatin1String(cLanguage ? "emcc" : "em++")
+ + QLatin1String(sdk.osType() == OsTypeWindows ? ".bat" : "");
+ const FilePath scriptFile = sdk.withNewPath(script).searchInDirectories(env.path());
+ toolChain->setCompilerCommand(scriptFile);
+
+ const QString displayName = WebAssemblyToolChain::tr("Emscripten Compiler %1 for %2")
+ .arg(toolChain->version(), QLatin1String(cLanguage ? "C" : "C++"));
+ toolChain->setDisplayName(displayName);
+ result.append(toolChain);
+ }
+
+ return result;
+}
+
void WebAssemblyToolChain::registerToolChains()
{
// Remove old toolchains
@@ -121,12 +158,9 @@ void WebAssemblyToolChain::registerToolChains()
};
// Create new toolchains and register them
- ToolChainFactory *factory =
- findOrDefault(ToolChainFactory::allToolChainFactories(), [](ToolChainFactory *f){
- return f->supportedToolChainType() == Constants::WEBASSEMBLY_TOOLCHAIN_TYPEID;
- });
- QTC_ASSERT(factory, return);
- for (auto toolChain : factory->autoDetect(ToolchainDetector({}, {})))
+ ToolchainDetector detector({}, {});
+ const Toolchains toolchains = doAutoDetect(detector);
+ for (auto toolChain : toolchains)
ToolChainManager::registerToolChain(toolChain);
// Let kits pick up the new toolchains
@@ -157,39 +191,7 @@ WebAssemblyToolChainFactory::WebAssemblyToolChainFactory()
Toolchains WebAssemblyToolChainFactory::autoDetect(const ToolchainDetector &detector) const
{
- const FilePath sdk = WebAssemblyEmSdk::registeredEmSdk();
- if (!WebAssemblyEmSdk::isValid(sdk))
- return {};
-
- if (detector.device) {
- // Only detect toolchains from the emsdk installation device
- const FilePath deviceRoot = detector.device->mapToGlobalPath({});
- if (deviceRoot.host() != sdk.host())
- return {};
- }
-
- Environment env = sdk.deviceEnvironment();
- WebAssemblyEmSdk::addToEnvironment(sdk, env);
-
- Toolchains result;
- for (auto languageId : {ProjectExplorer::Constants::C_LANGUAGE_ID,
- ProjectExplorer::Constants::CXX_LANGUAGE_ID}) {
- auto toolChain = new WebAssemblyToolChain;
- toolChain->setLanguage(languageId);
- toolChain->setDetection(ToolChain::AutoDetection);
- const bool cLanguage = languageId == ProjectExplorer::Constants::C_LANGUAGE_ID;
- const QString script = QLatin1String(cLanguage ? "emcc" : "em++")
- + QLatin1String(sdk.osType() == OsTypeWindows ? ".bat" : "");
- const FilePath scriptFile = sdk.withNewPath(script).searchInDirectories(env.path());
- toolChain->setCompilerCommand(scriptFile);
-
- const QString displayName = WebAssemblyToolChain::tr("Emscripten Compiler %1 for %2")
- .arg(toolChain->version(), QLatin1String(cLanguage ? "C" : "C++"));
- toolChain->setDisplayName(displayName);
- result.append(toolChain);
- }
-
- return result;
+ return doAutoDetect(detector);
}
} // namespace Internal
diff --git a/src/plugins/webassembly/webassemblytoolchain.h b/src/plugins/webassembly/webassemblytoolchain.h
index 41eeb72e94..95291af7f4 100644
--- a/src/plugins/webassembly/webassemblytoolchain.h
+++ b/src/plugins/webassembly/webassemblytoolchain.h
@@ -37,6 +37,8 @@ class WebAssemblyToolChain final : public ProjectExplorer::GccToolChain
Q_DECLARE_TR_FUNCTIONS(WebAssembly::Internal::WebAssemblyToolChain)
public:
+ WebAssemblyToolChain();
+
void addToEnvironment(Utils::Environment &env) const override;
Utils::FilePath makeCommand(const Utils::Environment &environment) const override;
@@ -45,11 +47,6 @@ public:
static const QVersionNumber &minimumSupportedEmSdkVersion();
static void registerToolChains();
static bool areToolChainsRegistered();
-
-private:
- WebAssemblyToolChain();
-
- friend class WebAssemblyToolChainFactory;
};
class WebAssemblyToolChainFactory : public ProjectExplorer::ToolChainFactory