Alexandre Julliard : winegcc: Pass all linker arguments also when testing link options.

Alexandre Julliard julliard at winehq.org
Mon Sep 23 15:22:34 CDT 2019


Module: wine
Branch: master
Commit: d63c51fd30ff9f782258da922c5965bc411ae6db
URL:    https://source.winehq.org/git/wine.git/?a=commit;h=d63c51fd30ff9f782258da922c5965bc411ae6db

Author: Alexandre Julliard <julliard at winehq.org>
Date:   Mon Sep 23 19:27:09 2019 +0200

winegcc: Pass all linker arguments also when testing link options.

Signed-off-by: Alexandre Julliard <julliard at winehq.org>

---

 tools/winegcc/winegcc.c | 41 +++++++++++++++++++----------------------
 1 file changed, 19 insertions(+), 22 deletions(-)

diff --git a/tools/winegcc/winegcc.c b/tools/winegcc/winegcc.c
index 33dcad1e4c..b3a16ac001 100644
--- a/tools/winegcc/winegcc.c
+++ b/tools/winegcc/winegcc.c
@@ -322,10 +322,9 @@ static const char* build_tool_name(struct options *opts, const char* base, const
     return find_binary( opts->prefix, str );
 }
 
-static const strarray* get_translator(struct options *opts)
+static strarray* get_translator(struct options *opts)
 {
     const char *str = NULL;
-    strarray *ret;
 
     switch(opts->processor)
     {
@@ -342,10 +341,7 @@ static const strarray* get_translator(struct options *opts)
     default:
         assert(0);
     }
-    ret = strarray_fromstring( str, " " );
-    if (opts->force_pointer_size)
-        strarray_add( ret, strmake("-m%u", 8 * opts->force_pointer_size ));
-    return ret;
+    return strarray_fromstring( str, " " );
 }
 
 static int try_link( const strarray *prefix, const strarray *link_tool, const char *cflags )
@@ -386,12 +382,10 @@ static int try_link( const strarray *prefix, const strarray *link_tool, const ch
 static strarray *get_link_args( struct options *opts, const char *output_name )
 {
     int use_wine_crt = opts->wine_builtin && opts->shared;
-    const strarray *link_tool = get_translator( opts );
+    strarray *link_args = get_translator( opts );
     strarray *flags = strarray_alloc();
-    unsigned int i;
 
-    strarray_addall( flags, link_tool );
-    for (i = 0; i < opts->linker_args->size; i++) strarray_add( flags, opts->linker_args->base[i] );
+    strarray_addall( link_args, opts->linker_args );
 
     if (verbose > 1) strarray_add( flags, "-v" );
 
@@ -412,7 +406,8 @@ static strarray *get_link_args( struct options *opts, const char *output_name )
             strarray_add( flags, opts->image_base );
         }
         if (opts->strip) strarray_add( flags, "-Wl,-x" );
-        return flags;
+        strarray_addall( link_args, flags );
+        return link_args;
 
     case PLATFORM_SOLARIS:
         {
@@ -463,45 +458,45 @@ static strarray *get_link_args( struct options *opts, const char *output_name )
         /* make sure we don't need a libgcc_s dll on Windows */
         strarray_add( flags, "-static-libgcc" );
 
-        return flags;
+        strarray_addall( link_args, flags );
+        return link_args;
 
     default:
         if (opts->image_base)
         {
-            if (!try_link( opts->prefix, link_tool, strmake("-Wl,-Ttext-segment=%s", opts->image_base)) )
+            if (!try_link( opts->prefix, link_args, strmake("-Wl,-Ttext-segment=%s", opts->image_base)) )
                 strarray_add( flags, strmake("-Wl,-Ttext-segment=%s", opts->image_base) );
             else
                 opts->prelink = PRELINK;
         }
-        if (!try_link( opts->prefix, link_tool, "-Wl,-z,max-page-size=0x1000"))
+        if (!try_link( opts->prefix, link_args, "-Wl,-z,max-page-size=0x1000"))
             strarray_add( flags, "-Wl,-z,max-page-size=0x1000");
         break;
     }
 
     /* generic Unix shared library flags */
 
-    strarray_add( flags, "-shared" );
-    strarray_add( flags, "-Wl,-Bsymbolic" );
+    strarray_add( link_args, "-shared" );
+    strarray_add( link_args, "-Wl,-Bsymbolic" );
     if (!opts->noshortwchar && opts->target_cpu == CPU_ARM)
         strarray_add( flags, "-Wl,--no-wchar-size-warning" );
 
     /* Try all options first - this is likely to succeed on modern compilers */
-    if (!try_link( opts->prefix, link_tool, "-fPIC -shared -Wl,-Bsymbolic "
-                   "-Wl,-z,defs -Wl,-init,__wine_spec_init,-fini,_wine_spec_fini" ))
+    if (!try_link( opts->prefix, link_args, "-Wl,-z,defs -Wl,-init,__wine_spec_init,-fini,_wine_spec_fini" ))
     {
         strarray_add( flags, "-Wl,-z,defs" );
         strarray_add( flags, "-Wl,-init,__wine_spec_init,-fini,__wine_spec_fini" );
     }
     else /* otherwise figure out which ones are allowed */
     {
-        if (!try_link( opts->prefix, link_tool, "-fPIC -shared -Wl,-Bsymbolic -Wl,-z,defs" ))
+        if (!try_link( opts->prefix, link_args, "-Wl,-z,defs" ))
             strarray_add( flags, "-Wl,-z,defs" );
-        if (!try_link( opts->prefix, link_tool, "-fPIC -shared -Wl,-Bsymbolic "
-                       "-Wl,-init,__wine_spec_init,-fini,_wine_spec_fini" ))
+        if (!try_link( opts->prefix, link_args, "-Wl,-init,__wine_spec_init,-fini,_wine_spec_fini" ))
             strarray_add( flags, "-Wl,-init,__wine_spec_init,-fini,__wine_spec_fini" );
     }
 
-    return flags;
+    strarray_addall( link_args, flags );
+    return link_args;
 }
 
 /* check that file is a library for the correct platform */
@@ -664,6 +659,8 @@ static void compile(struct options* opts, const char* lang)
     strarray* gpp;
 
     strarray_addall(comp_args, get_translator(opts));
+    if (opts->force_pointer_size)
+        strarray_add( comp_args, strmake("-m%u", 8 * opts->force_pointer_size ) );
     switch(opts->processor)
     {
 	case proc_cpp: gcc_defs = 1; break;




More information about the wine-cvs mailing list