@@ -624,6 +624,21 @@ impl Target {
624624 base. options. $key_name = args;
625625 }
626626 } ) ;
627+ ( $key_name: ident, env) => ( {
628+ let name = ( stringify!( $key_name) ) . replace( "_" , "-" ) ;
629+ if let Some ( a) = obj. find( & name[ ..] ) . and_then( |o| o. as_array( ) ) {
630+ for o in a {
631+ if let Some ( s) = o. as_string( ) {
632+ let p = s. split( '=' ) . collect:: <Vec <_>>( ) ;
633+ if p. len( ) == 2 {
634+ let k = p[ 0 ] . to_string( ) ;
635+ let v = p[ 1 ] . to_string( ) ;
636+ base. options. $key_name. push( ( k, v) ) ;
637+ }
638+ }
639+ }
640+ }
641+ } ) ;
627642 }
628643
629644 key ! ( is_builtin, bool ) ;
@@ -635,6 +650,7 @@ impl Target {
635650 key ! ( late_link_args, link_args) ;
636651 key ! ( post_link_objects, list) ;
637652 key ! ( post_link_args, link_args) ;
653+ key ! ( link_env, env) ;
638654 key ! ( asm_args, list) ;
639655 key ! ( cpu) ;
640656 key ! ( features) ;
@@ -789,6 +805,17 @@ impl ToJson for Target {
789805 d. insert( name. to_string( ) , obj. to_json( ) ) ;
790806 }
791807 } ) ;
808+ ( env - $attr: ident) => ( {
809+ let name = ( stringify!( $attr) ) . replace( "_" , "-" ) ;
810+ if default . $attr != self . options. $attr {
811+ let obj = self . options. $attr
812+ . iter( )
813+ . map( |& ( ref k, ref v) | k. clone( ) + "=" + & v)
814+ . collect:: <Vec <_>>( ) ;
815+ d. insert( name. to_string( ) , obj. to_json( ) ) ;
816+ }
817+ } ) ;
818+
792819 }
793820
794821 target_val ! ( llvm_target) ;
@@ -810,6 +837,7 @@ impl ToJson for Target {
810837 target_option_val ! ( link_args - late_link_args) ;
811838 target_option_val ! ( post_link_objects) ;
812839 target_option_val ! ( link_args - post_link_args) ;
840+ target_option_val ! ( env - link_env) ;
813841 target_option_val ! ( asm_args) ;
814842 target_option_val ! ( cpu) ;
815843 target_option_val ! ( features) ;
0 commit comments