11//! A collection of helpers to construct artifact names, such as names of dynamic or static
2- //! librarys which are target-dependent.
3-
4- // FIXME(jieyouxu): convert these to return `PathBuf`s instead of strings!
2+ //! libraries which are target-dependent.
53
4+ use crate :: target;
65use crate :: targets:: is_msvc;
76
87/// Construct the static library name based on the target.
8+ #[ track_caller]
99#[ must_use]
1010pub fn static_lib_name ( name : & str ) -> String {
1111 assert ! ( !name. contains( char :: is_whitespace) , "static library name cannot contain whitespace" ) ;
@@ -14,15 +14,34 @@ pub fn static_lib_name(name: &str) -> String {
1414}
1515
1616/// Construct the dynamic library name based on the target.
17+ #[ track_caller]
1718#[ must_use]
1819pub fn dynamic_lib_name ( name : & str ) -> String {
1920 assert ! ( !name. contains( char :: is_whitespace) , "dynamic library name cannot contain whitespace" ) ;
2021
21- format ! ( "{}{name}.{}" , std:: env:: consts:: DLL_PREFIX , std:: env:: consts:: DLL_EXTENSION )
22+ format ! ( "{}{name}.{}" , dynamic_lib_prefix( ) , dynamic_lib_extension( ) )
23+ }
24+
25+ fn dynamic_lib_prefix ( ) -> & ' static str {
26+ if target ( ) . contains ( "windows" ) { "" } else { "lib" }
2227}
2328
24- /// Construct the name of the import library for the dynamic library, exclusive to MSVC and
25- /// accepted by link.exe.
29+ /// Construct the dynamic library extension based on the target.
30+ #[ must_use]
31+ pub fn dynamic_lib_extension ( ) -> & ' static str {
32+ let target = target ( ) ;
33+
34+ if target. contains ( "apple" ) {
35+ "dylib"
36+ } else if target. contains ( "windows" ) {
37+ "dll"
38+ } else {
39+ "so"
40+ }
41+ }
42+
43+ /// Construct the name of the import library for the dynamic library, exclusive to MSVC and accepted
44+ /// by link.exe.
2645#[ track_caller]
2746#[ must_use]
2847pub fn msvc_import_dynamic_lib_name ( name : & str ) -> String {
@@ -32,20 +51,28 @@ pub fn msvc_import_dynamic_lib_name(name: &str) -> String {
3251 format ! ( "{name}.dll.lib" )
3352}
3453
35- /// Construct the dynamic library extension based on the target.
36- #[ must_use]
37- pub fn dynamic_lib_extension ( ) -> & ' static str {
38- std:: env:: consts:: DLL_EXTENSION
39- }
40-
4154/// Construct the name of a rust library (rlib).
55+ #[ track_caller]
4256#[ must_use]
4357pub fn rust_lib_name ( name : & str ) -> String {
4458 format ! ( "lib{name}.rlib" )
4559}
4660
4761/// Construct the binary (executable) name based on the target.
62+ #[ track_caller]
4863#[ must_use]
4964pub fn bin_name ( name : & str ) -> String {
50- format ! ( "{name}{}" , std:: env:: consts:: EXE_SUFFIX )
65+ let target = target ( ) ;
66+
67+ if target. contains ( "windows" ) {
68+ format ! ( "{name}.exe" )
69+ } else if target. contains ( "uefi" ) {
70+ format ! ( "{name}.efi" )
71+ } else if target. contains ( "wasm" ) {
72+ format ! ( "{name}.wasm" )
73+ } else if target. contains ( "nvptx" ) {
74+ format ! ( "{name}.ptx" )
75+ } else {
76+ name. to_string ( )
77+ }
5178}
0 commit comments