@@ -62,8 +62,6 @@ fn cargo_main() {
6262            . include ( "third_party/musl/arch/x86_64" ) ; 
6363    } 
6464
65-     let  is_pe = env:: var ( "CARGO_CFG_WINDOWS" ) . is_ok ( ) ; 
66- 
6765    if  cfg ! ( any( feature = "printf" ,  feature = "libc" ) )  { 
6866        cfg. define ( "HYPERLIGHT" ,  None ) ;  // used in certain musl files for conditional compilation 
6967
@@ -78,37 +76,26 @@ fn cargo_main() {
7876            . flag ( "-Wno-unused-parameter" ) 
7977            . flag ( "-Wno-string-plus-int" ) ; 
8078
81-         if  is_pe { 
82-             cfg. flag ( "-Wno-unused-label" ) ; 
83-             cfg. flag ( "-Wno-unused-variable" ) ; 
84-             cfg. compiler ( "clang-cl" ) ; 
85-         }  else  { 
86-             cfg. flag ( "-fPIC" ) ; 
87-             // This is a terrible hack, because 
88-             // - we need stack clash protection, because we have put the 
89-             //   stack right smack in the middle of everything in the guest 
90-             // - clang refuses to do stack clash protection unless it is 
91-             //   required by a target ABI (Windows, MacOS) or the target is 
92-             //   is Linux or FreeBSD (see Clang.cpp RenderSCPOptions 
93-             //   https://github.com/llvm/llvm-project/blob/1bb52e9/clang/lib/Driver/ToolChains/Clang.cpp#L3724). 
94-             //   Hopefully a flag to force stack clash protection on generic 
95-             //   targets will eventually show up. 
96-             cfg. flag ( "--target=x86_64-unknown-linux-none" ) ; 
97- 
98-             // We don't support stack protectors at the moment, but Arch Linux clang 
99-             // auto-enables them for -linux platforms, so explicitly disable them. 
100-             cfg. flag ( "-fno-stack-protector" ) ; 
101-             cfg. flag ( "-fstack-clash-protection" ) ; 
102-             cfg. flag ( "-mstack-probe-size=4096" ) ; 
103-             cfg. compiler ( "clang" ) ; 
104-         } 
105- 
106-         if  cfg ! ( windows)  { 
107-             unsafe  {  env:: set_var ( "AR_x86_64_unknown_none" ,  "llvm-ar" )  } ; 
108-         }  else  { 
109-             unsafe  {  env:: set_var ( "AR_x86_64_pc_windows_msvc" ,  "llvm-lib" )  } ; 
110-         } 
111- 
79+         cfg. flag ( "-fPIC" ) ; 
80+         // This is a terrible hack, because 
81+         // - we need stack clash protection, because we have put the 
82+         //   stack right smack in the middle of everything in the guest 
83+         // - clang refuses to do stack clash protection unless it is 
84+         //   required by a target ABI (Windows, MacOS) or the target is 
85+         //   is Linux or FreeBSD (see Clang.cpp RenderSCPOptions 
86+         //   https://github.com/llvm/llvm-project/blob/1bb52e9/clang/lib/Driver/ToolChains/Clang.cpp#L3724). 
87+         //   Hopefully a flag to force stack clash protection on generic 
88+         //   targets will eventually show up. 
89+         cfg. flag ( "--target=x86_64-unknown-linux-none" ) ; 
90+ 
91+         // We don't support stack protectors at the moment, but Arch Linux clang 
92+         // auto-enables them for -linux platforms, so explicitly disable them. 
93+         cfg. flag ( "-fno-stack-protector" ) ; 
94+         cfg. flag ( "-fstack-clash-protection" ) ; 
95+         cfg. flag ( "-mstack-probe-size=4096" ) ; 
96+         cfg. compiler ( "clang" ) ; 
97+ 
98+         unsafe  {  env:: set_var ( "AR_x86_64_unknown_none" ,  "llvm-ar" )  } ; 
11299        cfg. compile ( "hyperlight_guest_bin" ) ; 
113100    } 
114101
@@ -183,29 +170,20 @@ fn cargo_main() {
183170        fs:: create_dir_all ( & binroot) 
184171            . unwrap_or_else ( |e| panic ! ( "Could not create binary root {:?}: {}" ,  & binroot,  e) ) ; 
185172        fs:: write ( binroot. join ( ".out_dir" ) ,  out_dir) . expect ( "Could not write out_dir" ) ; 
186-         fs:: copy ( & binpath,  binroot. join ( "ml64.exe" ) ) . expect ( "Could not copy to ml64.exe" ) ; 
187173        fs:: copy ( & binpath,  binroot. join ( "clang" ) ) . expect ( "Could not copy to clang" ) ; 
188174        fs:: copy ( & binpath,  binroot. join ( "clang.exe" ) ) . expect ( "Could not copy to clang.exe" ) ; 
189-         fs:: copy ( & binpath,  binroot. join ( "clang-cl" ) ) . expect ( "Could not copy to clang-cl" ) ; 
190-         fs:: copy ( & binpath,  binroot. join ( "clang-cl.exe" ) ) . expect ( "Could not copy to clang-cl.exe" ) ; 
191175    } 
192176} 
193177
194178#[ derive( PartialEq ) ]  
195179enum  Tool  { 
196180    CargoBuildScript , 
197-     Ml64 , 
198181    Clang , 
199-     ClangCl , 
200182} 
201183impl  From < & std:: ffi:: OsStr >  for  Tool  { 
202184    fn  from ( x :  & std:: ffi:: OsStr )  -> Tool  { 
203-         if  x == "ml64.exe"  { 
204-             Tool :: Ml64 
205-         }  else  if  x == "clang"  || x == "clang.exe"  { 
185+         if  x == "clang"  { 
206186            Tool :: Clang 
207-         }  else  if  x == "clang-cl"  || x == "clang-cl.exe"  { 
208-             Tool :: ClangCl 
209187        }  else  { 
210188            Tool :: CargoBuildScript 
211189        } 
@@ -252,44 +230,24 @@ fn main() -> std::process::ExitCode {
252230    let  mut  args = env:: args ( ) ; 
253231    args. next ( ) ;  // ignore the exe name 
254232    let  include_dir = <String  as  AsRef < Path > >:: as_ref ( & out_dir) . join ( "include" ) ; 
255-     match  tool { 
256-         Tool :: Ml64  => std:: process:: Command :: new ( "llvm-ml" ) 
257-             . arg ( "-m64" ) 
258-             . args ( args) 
259-             . status ( ) 
260-             . ok ( ) 
261-             . and_then ( |x| ( x. code ( ) ) ) 
262-             . map ( |x| ( x as  u8 ) . into ( ) ) 
263-             . unwrap_or ( std:: process:: ExitCode :: FAILURE ) , 
264-         Tool :: Clang  => std:: process:: Command :: new ( find_next ( root_dir,  "clang" ) ) 
265-             // terrible hack, see above 
266-             . arg ( "--target=x86_64-unknown-linux-none" ) 
267-             . args ( [ 
268-                 // We don't support stack protectors at the moment, but Arch Linux clang 
269-                 // auto-enables them for -linux platforms, so explicitly disable them. 
270-                 "-fno-stack-protector" , 
271-                 "-fstack-clash-protection" , 
272-                 "-mstack-probe-size=4096" , 
273-             ] ) 
274-             . arg ( "-nostdinc" ) 
275-             . arg ( "-isystem" ) 
276-             . arg ( include_dir) 
277-             . args ( args) 
278-             . status ( ) 
279-             . ok ( ) 
280-             . and_then ( |x| ( x. code ( ) ) ) 
281-             . map ( |x| ( x as  u8 ) . into ( ) ) 
282-             . unwrap_or ( std:: process:: ExitCode :: FAILURE ) , 
283-         Tool :: ClangCl  => std:: process:: Command :: new ( find_next ( root_dir,  "clang-cl" ) ) 
284-             . arg ( "-nostdinc" ) 
285-             . arg ( "/external:I" ) 
286-             . arg ( include_dir) 
287-             . args ( args) 
288-             . status ( ) 
289-             . ok ( ) 
290-             . and_then ( |x| ( x. code ( ) ) ) 
291-             . map ( |x| ( x as  u8 ) . into ( ) ) 
292-             . unwrap_or ( std:: process:: ExitCode :: FAILURE ) , 
293-         _ => std:: process:: ExitCode :: FAILURE , 
294-     } 
233+ 
234+     std:: process:: Command :: new ( find_next ( root_dir,  "clang" ) ) 
235+         // terrible hack, see above 
236+         . arg ( "--target=x86_64-unknown-linux-none" ) 
237+         . args ( [ 
238+             // We don't support stack protectors at the moment, but Arch Linux clang 
239+             // auto-enables them for -linux platforms, so explicitly disable them. 
240+             "-fno-stack-protector" , 
241+             "-fstack-clash-protection" , 
242+             "-mstack-probe-size=4096" , 
243+         ] ) 
244+         . arg ( "-nostdinc" ) 
245+         . arg ( "-isystem" ) 
246+         . arg ( include_dir) 
247+         . args ( args) 
248+         . status ( ) 
249+         . ok ( ) 
250+         . and_then ( |x| ( x. code ( ) ) ) 
251+         . map ( |x| ( x as  u8 ) . into ( ) ) 
252+         . unwrap_or ( std:: process:: ExitCode :: FAILURE ) 
295253} 
0 commit comments