@@ -7,27 +7,31 @@ import semverMajor from "semver/functions/major"
77import semverCoerce from "semver/functions/coerce"
88import { setupMacOSSDK } from "../macos-sdk/macos-sdk"
99import path from "path"
10- import { warning , info , notice } from "../utils/io/io"
10+ import { warning , info } from "../utils/io/io"
1111import { isGitHubCI } from "../utils/env/isci"
1212import { addBinExtension } from "../utils/extension/extension"
1313import { InstallationInfo , PackageInfo , setupBin } from "../utils/setup/setupBin"
1414import { extract7Zip } from "../utils/setup/extract"
1515
1616interface MingwInfo {
17- mingwVersion : string
18- llvmVersion ?: string
19- number : string
20- runtime : "ucrt" | "msvcrt" // ucrt is the modern runtime and should be preferred
17+ releaseName : string
18+ fileSuffix : string
2119}
2220
21+ // https://github.com/brechtsanders/winlibs_mingw/releases
2322const GccToMingwInfo = {
24- "12" : { mingwVersion : "10.0.0" , number : "r1" , runtime : "msvcrt" } ,
25- "12.1.0-msvcrt" : { mingwVersion : "10.0.0" , number : "r1" , runtime : "msvcrt" } ,
26- "11" : { mingwVersion : "10.0.0" , llvmVersion : "14.0.3" , number : "r3" , runtime : "ucrt" } ,
27- "11.3.0-ucrt" : { mingwVersion : "10.0.0" , llvmVersion : "14.0.3" , number : "r3" , runtime : "ucrt" } ,
28- "11.3.0-msvcrt" : { mingwVersion : "10.0.0" , llvmVersion : "14.0.3" , number : "r3" , runtime : "msvcrt" } ,
29- "11.2.0-ucrt" : { mingwVersion : "9.0.0" , number : "r5" , runtime : "ucrt" } ,
30- "11.2.0-msvcrt" : { mingwVersion : "9.0.0" , number : "r6" , runtime : "msvcrt" } , // TODO -w64-
23+ "12" : { releaseName : "12.1.0-10.0.0-msvcrt-r1" , fileSuffix : "12.1.0-mingw-w64msvcrt-10.0.0-r1" } ,
24+ "12.1.0-msvcrt" : { releaseName : "12.1.0-10.0.0-msvcrt-r1" , fileSuffix : "12.1.0-mingw-w64msvcrt-10.0.0-r1" } ,
25+ "11" : { releaseName : "11.3.0-14.0.3-10.0.0-ucrt-r3" , fileSuffix : "11.3.0-mingw-w64ucrt-10.0.0-r3" } ,
26+ "11.3.0-ucrt" : { releaseName : "11.3.0-14.0.3-10.0.0-ucrt-r3" , fileSuffix : "11.3.0-mingw-w64ucrt-10.0.0-r3" } ,
27+ "11.3.0-msvcrt" : { releaseName : "11.3.0-14.0.3-10.0.0-msvcrt-r3" , fileSuffix : "11.3.0-mingw-w64msvcrt-10.0.0-r3" } ,
28+ "11.2.0-ucrt" : { releaseName : "11.2.0-9.0.0-ucrt-r5" , fileSuffix : "11.2.0-mingw-w64ucrt-9.0.0-r5" } ,
29+ "11.2.0-msvcrt" : { releaseName : "11.2.0-9.0.0-msvcrt-r5" , fileSuffix : "11.2.0-mingw-w64msvcrt-9.0.0-r5" } ,
30+ "10" : { releaseName : "10.3.0-12.0.0-9.0.0-r2" , fileSuffix : "10.3.0-llvm-12.0.0-mingw-w64-9.0.0-r2" } ,
31+ "10.3.0" : { releaseName : "10.3.0-12.0.0-9.0.0-r2" , fileSuffix : "10.3.0-llvm-12.0.0-mingw-w64-9.0.0-r2" } ,
32+ "10.2.0" : { releaseName : "10.2.0-7.0.0-r4" , fileSuffix : "10.2.0-llvm-10.0.1-mingw-w64-7.0.0-r4" } ,
33+ "9" : { releaseName : "9.4.0-9.0.0-r1" , fileSuffix : "9.4.0-mingw-w64-9.0.0-r1" } ,
34+ "9.4.0" : { releaseName : "9.4.0-9.0.0-r1" , fileSuffix : "9.4.0-mingw-w64-9.0.0-r1" } ,
3135} as Record < string , MingwInfo | undefined >
3236
3337function getGccPackageInfo ( version : string , platform : NodeJS . Platform , arch : string ) : PackageInfo {
@@ -38,13 +42,13 @@ function getGccPackageInfo(version: string, platform: NodeJS.Platform, arch: str
3842 throw new Error ( `mingw version ${ version } is not supported` )
3943 }
4044 const mingwArch = arch === "ia32" ? "i686" : "x86_64"
41- const llvmVersionString = mingwInfo . llvmVersion !== undefined ? ` ${ mingwInfo . llvmVersion } -` : ""
45+ const exceptionModel : "seh" | "dwarf" = "seh" // SEH is native windows exception model https://github.com/brechtsanders/winlibs_mingw/issues/4#issuecomment-599296483
4246 return {
4347 binRelativeDir : "./bin" ,
4448 binFileName : addBinExtension ( "g++" ) ,
4549 extractedFolderName : "mingw64" ,
4650 extractFunction : extract7Zip ,
47- url : `https://github.com/brechtsanders/winlibs_mingw/releases/download/${ version } - ${ llvmVersionString } ${ mingwInfo . mingwVersion } - ${ mingwInfo . runtime } - ${ mingwInfo . number } /winlibs-${ mingwArch } -posix-seh-gcc- ${ version } -mingw-w64 ${ mingwInfo . runtime } - ${ mingwInfo . mingwVersion } - ${ mingwInfo . number } .7z` ,
51+ url : `https://github.com/brechtsanders/winlibs_mingw/releases/download/${ mingwInfo . releaseName } /winlibs-${ mingwArch } -posix-${ exceptionModel } -gcc- ${ mingwInfo . fileSuffix } .7z` ,
4852 }
4953 }
5054 default :
@@ -63,7 +67,7 @@ export async function setupGcc(version: string, setupDir: string, arch: string)
6367 try {
6468 installationInfo = await setupBin ( "g++" , version , getGccPackageInfo , setupDir , arch )
6569 } catch ( err ) {
66- notice ( `Failed to download g++ binary. ${ err } . Falling back to chocolatey.` )
70+ info ( `Failed to download g++ binary. ${ err } . Falling back to chocolatey.` )
6771 installationInfo = await setupChocoMingw ( version , arch )
6872 }
6973 break
0 commit comments