@@ -243,46 +243,10 @@ impl FromStr for NvvmOption {
243243 }
244244 _ if s. starts_with ( "-arch=" ) => {
245245 let slice = & s[ 6 ..] ;
246- if !slice. starts_with ( "compute_" ) {
247- return Err ( format ! ( "unknown -arch value: {slice}" ) ) ;
246+ match NvvmArch :: from_str ( slice) {
247+ Ok ( arch) => Self :: Arch ( arch) ,
248+ Err ( _) => return Err ( format ! ( "unknown -arch value: {slice}" ) ) ,
248249 }
249- let arch_num = & slice[ 8 ..] ;
250- let arch = match arch_num {
251- "35" => NvvmArch :: Compute35 ,
252- "37" => NvvmArch :: Compute37 ,
253- "50" => NvvmArch :: Compute50 ,
254- "52" => NvvmArch :: Compute52 ,
255- "53" => NvvmArch :: Compute53 ,
256- "60" => NvvmArch :: Compute60 ,
257- "61" => NvvmArch :: Compute61 ,
258- "62" => NvvmArch :: Compute62 ,
259- "70" => NvvmArch :: Compute70 ,
260- "72" => NvvmArch :: Compute72 ,
261- "75" => NvvmArch :: Compute75 ,
262- "80" => NvvmArch :: Compute80 ,
263- "86" => NvvmArch :: Compute86 ,
264- "87" => NvvmArch :: Compute87 ,
265- "89" => NvvmArch :: Compute89 ,
266- "90" => NvvmArch :: Compute90 ,
267- "90a" => NvvmArch :: Compute90a ,
268- "100" => NvvmArch :: Compute100 ,
269- "100f" => NvvmArch :: Compute100f ,
270- "100a" => NvvmArch :: Compute100a ,
271- "101" => NvvmArch :: Compute101 ,
272- "101f" => NvvmArch :: Compute101f ,
273- "101a" => NvvmArch :: Compute101a ,
274- "103" => NvvmArch :: Compute103 ,
275- "103f" => NvvmArch :: Compute103f ,
276- "103a" => NvvmArch :: Compute103a ,
277- "120" => NvvmArch :: Compute120 ,
278- "120f" => NvvmArch :: Compute120f ,
279- "120a" => NvvmArch :: Compute120a ,
280- "121" => NvvmArch :: Compute121 ,
281- "121f" => NvvmArch :: Compute121f ,
282- "121a" => NvvmArch :: Compute121a ,
283- _ => return Err ( format ! ( "unknown -arch=compute_NN value: {arch_num}" ) ) ,
284- } ;
285- Self :: Arch ( arch)
286250 }
287251 _ => return Err ( format ! ( "unknown option: {s}" ) ) ,
288252 } )
@@ -340,6 +304,48 @@ impl Display for NvvmArch {
340304 }
341305}
342306
307+ impl FromStr for NvvmArch {
308+ type Err = & ' static str ;
309+
310+ fn from_str ( s : & str ) -> Result < Self , Self :: Err > {
311+ Ok ( match s {
312+ "compute_35" => NvvmArch :: Compute35 ,
313+ "compute_37" => NvvmArch :: Compute37 ,
314+ "compute_50" => NvvmArch :: Compute50 ,
315+ "compute_52" => NvvmArch :: Compute52 ,
316+ "compute_53" => NvvmArch :: Compute53 ,
317+ "compute_60" => NvvmArch :: Compute60 ,
318+ "compute_61" => NvvmArch :: Compute61 ,
319+ "compute_62" => NvvmArch :: Compute62 ,
320+ "compute_70" => NvvmArch :: Compute70 ,
321+ "compute_72" => NvvmArch :: Compute72 ,
322+ "compute_75" => NvvmArch :: Compute75 ,
323+ "compute_80" => NvvmArch :: Compute80 ,
324+ "compute_86" => NvvmArch :: Compute86 ,
325+ "compute_87" => NvvmArch :: Compute87 ,
326+ "compute_89" => NvvmArch :: Compute89 ,
327+ "compute_90" => NvvmArch :: Compute90 ,
328+ "compute_90a" => NvvmArch :: Compute90a ,
329+ "compute_100" => NvvmArch :: Compute100 ,
330+ "compute_100f" => NvvmArch :: Compute100f ,
331+ "compute_100a" => NvvmArch :: Compute100a ,
332+ "compute_101" => NvvmArch :: Compute101 ,
333+ "compute_101f" => NvvmArch :: Compute101f ,
334+ "compute_101a" => NvvmArch :: Compute101a ,
335+ "compute_103" => NvvmArch :: Compute103 ,
336+ "compute_103f" => NvvmArch :: Compute103f ,
337+ "compute_103a" => NvvmArch :: Compute103a ,
338+ "compute_120" => NvvmArch :: Compute120 ,
339+ "compute_120f" => NvvmArch :: Compute120f ,
340+ "compute_120a" => NvvmArch :: Compute120a ,
341+ "compute_121" => NvvmArch :: Compute121 ,
342+ "compute_121f" => NvvmArch :: Compute121f ,
343+ "compute_121a" => NvvmArch :: Compute121a ,
344+ _ => return Err ( "unknown compile target" ) ,
345+ } )
346+ }
347+ }
348+
343349impl Default for NvvmArch {
344350 fn default ( ) -> Self {
345351 Self :: Compute52
@@ -1116,8 +1122,8 @@ mod tests {
11161122 err ( "blah" , "unknown option: blah" ) ;
11171123 err ( "-aardvark" , "unknown option: -aardvark" ) ;
11181124 err ( "-arch=compute75" , "unknown -arch value: compute75" ) ;
1119- err ( "-arch=compute_10" , "unknown -arch=compute_NN value: 10 " ) ;
1120- err ( "-arch=compute_100x" , "unknown -arch=compute_NN value: 100x " ) ;
1125+ err ( "-arch=compute_10" , "unknown -arch value: compute_10 " ) ;
1126+ err ( "-arch=compute_100x" , "unknown -arch value: compute_100x " ) ;
11211127 err ( "-opt=3" , "-opt=3 is the default" ) ;
11221128 err ( "-opt=99" , "unknown -opt value: 99" ) ;
11231129 }
0 commit comments