@@ -885,15 +885,36 @@ def __init__(self, exelist: T.List[str],
885885 super ().__init__ (exelist , for_machine , prefix_arg , always_args , version = version )
886886
887887 # Some targets don't seem to support this argument (windows, wasm, ...)
888- _ , _ , e = mesonlib .Popen_safe (self .exelist + always_args + self ._apply_prefix ('--allow-shlib-undefined' ))
889- # Versions < 9 do not have a quoted argument
890- self .has_allow_shlib_undefined = ('unknown argument: --allow-shlib-undefined' not in e ) and ("unknown argument: '--allow-shlib-undefined'" not in e )
888+ self .has_allow_shlib_undefined = self ._supports_flag ('--allow-shlib-undefined' , always_args )
889+ # These aren't supported by TI Arm Clang
890+ self .has_as_needed = self ._supports_flag ('--as-needed' , always_args )
891+ self .has_no_undefined = self ._supports_flag ('--no-undefined' , always_args )
892+
893+ def _supports_flag (self , flag : str , always_args : T .List [str ]) -> bool :
894+ _ , _ , e = mesonlib .Popen_safe (self .exelist + always_args + self ._apply_prefix (flag ))
895+ return (
896+ # Versions < 9 do not have a quoted argument
897+ (f'unknown argument: { flag } ' not in e ) and
898+ (f"unknown argument: '{ flag } '" not in e ) and
899+ # TI Arm Clang uses a different message
900+ (f'invalid option: { flag } ' not in e )
901+ )
891902
892903 def get_allow_undefined_args (self ) -> T .List [str ]:
893904 if self .has_allow_shlib_undefined :
894905 return self ._apply_prefix ('--allow-shlib-undefined' )
895906 return []
896907
908+ def get_asneeded_args (self ) -> T .List [str ]:
909+ if self .has_as_needed :
910+ return self ._apply_prefix ('--as-needed' )
911+ return []
912+
913+ def no_undefined_args (self ) -> T .List [str ]:
914+ if self .has_no_undefined :
915+ return self ._apply_prefix ('--no-undefined' )
916+ return []
917+
897918 def get_thinlto_cache_args (self , path : str ) -> T .List [str ]:
898919 return ['-Wl,--thinlto-cache-dir=' + path ]
899920
0 commit comments