@@ -14,6 +14,8 @@ See the License for the specific language governing permissions and
14
14
limitations under the License.
15
15
*/
16
16
17
+ import { GLIBC , MUSL , family as processLibC } from "detect-libc" ;
18
+
17
19
// We borrow Rust's target naming scheme as a way of expressing all target
18
20
// details in a single string.
19
21
// See https://doc.rust-lang.org/rustc/platform-support.html.
@@ -23,18 +25,28 @@ export type TargetId =
23
25
'universal-apple-darwin' |
24
26
'i686-pc-windows-msvc' |
25
27
'x86_64-pc-windows-msvc' |
26
- 'x86_64-unknown-linux-gnu' ;
28
+ 'i686-unknown-linux-musl' |
29
+ 'i686-unknown-linux-gnu' |
30
+ 'x86_64-unknown-linux-musl' |
31
+ 'x86_64-unknown-linux-gnu' |
32
+ 'aarch64-unknown-linux-musl' |
33
+ 'aarch64-unknown-linux-gnu' |
34
+ 'powerpc64le-unknown-linux-musl' |
35
+ 'powerpc64le-unknown-linux-gnu' ;
27
36
28
37
// Values are expected to match those used in `process.platform`.
29
38
export type Platform = 'darwin' | 'linux' | 'win32' ;
30
39
31
40
// Values are expected to match those used in `process.arch`.
32
- export type Arch = 'arm64' | 'ia32' | 'x64' | 'universal' ;
41
+ export type Arch = 'arm64' | 'ia32' | 'x64' | 'ppc64' | ' universal';
33
42
34
43
// Values are expected to match those used by Visual Studio's `vcvarsall.bat`.
35
44
// See https://docs.microsoft.com/cpp/build/building-on-the-command-line?view=msvc-160#vcvarsall-syntax
36
45
export type VcVarsArch = 'amd64' | 'arm64' | 'x86' ;
37
46
47
+ // Values are expected to match those used in `detect-libc`.
48
+ export type LibC = GLIBC | MUSL ;
49
+
38
50
export type Target = {
39
51
id : TargetId ;
40
52
platform : Platform ;
@@ -46,6 +58,11 @@ export type WindowsTarget = Target & {
46
58
vcVarsArch : VcVarsArch ;
47
59
} ;
48
60
61
+ export type LinuxTarget = Target & {
62
+ platform : 'linux' ;
63
+ libC : LibC ;
64
+ } ;
65
+
49
66
export type UniversalTarget = Target & {
50
67
arch : 'universal' ;
51
68
subtargets : Target [ ] ;
@@ -87,10 +104,60 @@ const x8664PcWindowsMsvc: WindowsTarget = {
87
104
vcVarsArch : 'amd64' ,
88
105
} ;
89
106
90
- const x8664UnknownLinuxGnu : Target = {
107
+ const x8664UnknownLinuxGnu : LinuxTarget = {
91
108
id : 'x86_64-unknown-linux-gnu' ,
92
109
platform : 'linux' ,
93
110
arch : 'x64' ,
111
+ libC : 'glibc' ,
112
+ } ;
113
+
114
+ const x8664UnknownLinuxMusl : LinuxTarget = {
115
+ id : 'x86_64-unknown-linux-musl' ,
116
+ platform : 'linux' ,
117
+ arch : 'x64' ,
118
+ libC : 'musl' ,
119
+ } ;
120
+
121
+ const i686UnknownLinuxGnu : LinuxTarget = {
122
+ id : 'i686-unknown-linux-gnu' ,
123
+ platform : 'linux' ,
124
+ arch : 'ia32' ,
125
+ libC : 'glibc' ,
126
+ } ;
127
+
128
+ const i686UnknownLinuxMusl : LinuxTarget = {
129
+ id : 'i686-unknown-linux-musl' ,
130
+ platform : 'linux' ,
131
+ arch : 'ia32' ,
132
+ libC : 'musl' ,
133
+ } ;
134
+
135
+ const aarch64UnknownLinuxGnu : LinuxTarget = {
136
+ id : 'aarch64-unknown-linux-gnu' ,
137
+ platform : 'linux' ,
138
+ arch : 'arm64' ,
139
+ libC : 'glibc' ,
140
+ } ;
141
+
142
+ const aarch64UnknownLinuxMusl : LinuxTarget = {
143
+ id : 'aarch64-unknown-linux-musl' ,
144
+ platform : 'linux' ,
145
+ arch : 'arm64' ,
146
+ libC : 'musl' ,
147
+ } ;
148
+
149
+ const powerpc64leUnknownLinuxGnu : LinuxTarget = {
150
+ id : 'powerpc64le-unknown-linux-gnu' ,
151
+ platform : 'linux' ,
152
+ arch : 'ppc64' ,
153
+ libC : 'glibc' ,
154
+ } ;
155
+
156
+ const powerpc64leUnknownLinuxMusl : LinuxTarget = {
157
+ id : 'powerpc64le-unknown-linux-musl' ,
158
+ platform : 'linux' ,
159
+ arch : 'ppc64' ,
160
+ libC : 'musl' ,
94
161
} ;
95
162
96
163
export const TARGETS : Record < TargetId , Target > = {
@@ -102,13 +169,24 @@ export const TARGETS: Record<TargetId, Target> = {
102
169
'i686-pc-windows-msvc' : i686PcWindowsMsvc ,
103
170
'x86_64-pc-windows-msvc' : x8664PcWindowsMsvc ,
104
171
// Linux
172
+ 'i686-unknown-linux-musl' : i686UnknownLinuxMusl ,
173
+ 'i686-unknown-linux-gnu' : i686UnknownLinuxGnu ,
174
+ 'x86_64-unknown-linux-musl' : x8664UnknownLinuxMusl ,
105
175
'x86_64-unknown-linux-gnu' : x8664UnknownLinuxGnu ,
176
+ 'aarch64-unknown-linux-musl' : aarch64UnknownLinuxMusl ,
177
+ 'aarch64-unknown-linux-gnu' : aarch64UnknownLinuxGnu ,
178
+ 'powerpc64le-unknown-linux-musl' : powerpc64leUnknownLinuxMusl ,
179
+ 'powerpc64le-unknown-linux-gnu' : powerpc64leUnknownLinuxGnu ,
106
180
} ;
107
181
108
182
export function getHost ( ) : Target {
109
183
return Object . values ( TARGETS ) . find ( target => (
110
184
target . platform === process . platform &&
111
- target . arch === process . arch
185
+ target . arch === process . arch &&
186
+ (
187
+ process . platform !== 'linux' ||
188
+ ( target as LinuxTarget ) . libC === processLibC
189
+ )
112
190
) ) ;
113
191
}
114
192
0 commit comments