1
0
Fork 0
mirror of https://github.com/eclipse-cdt/cdt synced 2025-03-28 14:56:28 +01:00

Improve MinGW installation detection

- Look for clang, gcc or clangd
- Re-order search for MSYS2 MinGW subsystems
- Add clang installation info and notes to 'Before you begin' page
This commit is contained in:
John Dallaway 2025-02-23 15:49:20 +00:00
parent 654e270767
commit 5135c9fc85
3 changed files with 19 additions and 12 deletions

View file

@ -82,7 +82,7 @@ public class Msys2ToolChainProvider implements IToolChainProvider {
String installLocation = registry.getCurrentUserValue(key, "InstallLocation"); //$NON-NLS-1$
Path msysPath = Paths.get(installLocation);
boolean found = false;
for (String variant : List.of("mingw64", "ucrt64")) { //$NON-NLS-1$ //$NON-NLS-2$
for (String variant : List.of("ucrt64", "mingw64")) { //$NON-NLS-1$ //$NON-NLS-2$
Path gccPath = msysPath.resolve(variant + "\\bin\\gcc.exe"); //$NON-NLS-1$
if (Files.exists(gccPath)) {
IEnvironmentVariable[] vars = createEnvironmentVariables(msysPath, gccPath.getParent());

View file

@ -42,7 +42,8 @@ public class MinGW {
public static final String ENV_MSYS_HOME = "MSYS_HOME"; //$NON-NLS-1$
private static final String ENV_PATH = "PATH"; //$NON-NLS-1$
private static final Set<String> MSYS2_64BIT_NAMES = Set.of("MSYS2", "MSYS2 64bit"); //$NON-NLS-1$ //$NON-NLS-2$
private static final List<String> MSYS2_MINGW_SUBSYSTEMS = List.of("mingw64", "mingw32", "ucrt64"); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
private static final List<String> MSYS2_MINGW_SUBSYSTEMS = List.of("ucrt64", "mingw64", "mingw32"); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
private static final List<String> MSYS2_MINGW_SUBSYSTEM_SELECTION_TOOLS = List.of("clangd", "clang", "gcc"); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
private static final boolean isWindowsPlatform = Platform.getOS().equals(Platform.OS_WIN32);
@ -109,9 +110,14 @@ public class MinGW {
String installLocation = registry.getCurrentUserValue(compKey, "InstallLocation"); //$NON-NLS-1$
for (String subsys : MSYS2_MINGW_SUBSYSTEMS) {
String mingwLocation = installLocation + "\\" + subsys; //$NON-NLS-1$
File gccFile = new File(mingwLocation + "\\bin\\gcc.exe"); //$NON-NLS-1$
if (gccFile.canExecute()) {
rootValue = mingwLocation;
for (String toolName : MSYS2_MINGW_SUBSYSTEM_SELECTION_TOOLS) {
File toolFile = new File(mingwLocation + "\\bin\\" + toolName + ".exe"); //$NON-NLS-1$ //$NON-NLS-2$
if (toolFile.canExecute()) {
rootValue = mingwLocation;
break;
}
}
if (null != rootValue) {
break;
}
}

View file

@ -36,13 +36,14 @@ Download and run the latest MSYS2 installer by following instructions on the <a
When you reach the UCRT64 environment prompt, use the following commands to install individual tools:</p>
<p />
<p><table style="border: 1px solid grey; border-collapse: collapse;">
<tr><th style="border: 1px solid grey; padding: 5px;">Tool</th> <th style="border: 1px solid grey; padding: 5px;">Installation command</th><tr>
<tr><td style="border: 1px solid grey; padding: 5px;">clangd</td> <td style="border: 1px solid grey; padding: 5px;"><tt>pacman -S mingw-w64-ucrt-x86_64-clang-tools-extra</tt></td></tr>
<tr><td style="border: 1px solid grey; padding: 5px;">cmake</td> <td style="border: 1px solid grey; padding: 5px;"><tt>pacman -S mingw-w64-ucrt-x86_64-cmake</tt></td></tr>
<tr><td style="border: 1px solid grey; padding: 5px;">gcc</td> <td style="border: 1px solid grey; padding: 5px;"><tt>pacman -S mingw-w64-ucrt-x86_64-gcc</tt></td></tr>
<tr><td style="border: 1px solid grey; padding: 5px;">gdb</td> <td style="border: 1px solid grey; padding: 5px;"><tt>pacman -S mingw-w64-ucrt-x86_64-gdb</tt></td></tr>
<tr><td style="border: 1px solid grey; padding: 5px;">make</td> <td style="border: 1px solid grey; padding: 5px;"><tt>pacman -S make</tt></td></tr>
<tr><td style="border: 1px solid grey; padding: 5px;">ninja</td> <td style="border: 1px solid grey; padding: 5px;"><tt>pacman -S mingw-w64-ucrt-x86_64-ninja</tt></td></tr>
<tr><th style="border: 1px solid grey; padding: 5px;">Tool</th> <th style="border: 1px solid grey; padding: 5px;">Installation command</th> <th style="border: 1px solid grey; padding: 5px;">Notes</th><tr>
<tr><td style="border: 1px solid grey; padding: 5px;">clang</td> <td style="border: 1px solid grey; padding: 5px;"><tt>pacman -S mingw-w64-ucrt-x86_64-clang</tt></td> <td style="border: 1px solid grey; padding: 5px;">Provides the <i>LLVM with Clang</i> toolchain</td></tr>
<tr><td style="border: 1px solid grey; padding: 5px;">clangd</td> <td style="border: 1px solid grey; padding: 5px;"><tt>pacman -S mingw-w64-ucrt-x86_64-clang-tools-extra</tt></td> <td style="border: 1px solid grey; padding: 5px;">Required by the <i>C/C++ Editor (LSP)</i></td></tr>
<tr><td style="border: 1px solid grey; padding: 5px;">cmake</td> <td style="border: 1px solid grey; padding: 5px;"><tt>pacman -S mingw-w64-ucrt-x86_64-cmake</tt></td> <td style="border: 1px solid grey; padding: 5px;">Required for building <i>CMake</i> projects</td></tr>
<tr><td style="border: 1px solid grey; padding: 5px;">gcc</td> <td style="border: 1px solid grey; padding: 5px;"><tt>pacman -S mingw-w64-ucrt-x86_64-gcc</tt></td> <td style="border: 1px solid grey; padding: 5px;">Provides the <i>MinGW GCC</i> toolchain</td></tr>
<tr><td style="border: 1px solid grey; padding: 5px;">gdb</td> <td style="border: 1px solid grey; padding: 5px;"><tt>pacman -S mingw-w64-ucrt-x86_64-gdb</tt></td> <td style="border: 1px solid grey; padding: 5px;">Required for debugging</td></tr>
<tr><td style="border: 1px solid grey; padding: 5px;">make</td> <td style="border: 1px solid grey; padding: 5px;"><tt>pacman -S make</tt></td> <td style="border: 1px solid grey; padding: 5px;">Required for building <i>Managed Build</i> projects</td></tr>
<tr><td style="border: 1px solid grey; padding: 5px;">ninja</td> <td style="border: 1px solid grey; padding: 5px;"><tt>pacman -S mingw-w64-ucrt-x86_64-ninja</tt></td></td> <td style="border: 1px solid grey; padding: 5px;">Required for building <i>CMake</i> projects</td></tr>
</table></p>
</li>