Charles Davis : winebuild: Use Clang to assemble if found.

Alexandre Julliard julliard at winehq.org
Wed Jan 30 13:43:23 CST 2013


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

Author: Charles Davis <cdavis5x at gmail.com>
Date:   Mon Jan 28 13:42:12 2013 -0700

winebuild: Use Clang to assemble if found.

---

 tools/winebuild/utils.c |   38 ++++++++++++++++++++++++++++++++++----
 1 files changed, 34 insertions(+), 4 deletions(-)

diff --git a/tools/winebuild/utils.c b/tools/winebuild/utils.c
index 559e476..262ff3a 100644
--- a/tools/winebuild/utils.c
+++ b/tools/winebuild/utils.c
@@ -288,8 +288,6 @@ char *find_tool( const char *name, const char * const *names )
     unsigned int i, len;
     struct stat st;
 
-    if (target_alias) return strmake( "%s-%s", target_alias, name );
-
     if (!dirs)
     {
         char *path;
@@ -322,6 +320,8 @@ char *find_tool( const char *name, const char * const *names )
     while (*names)
     {
         len = strlen(*names) + sizeof(EXEEXT) + 1;
+        if (target_alias)
+            len += strlen(target_alias) + 1;
         file = xmalloc( maxlen + len );
 
         for (i = 0; i < count; i++)
@@ -330,6 +330,12 @@ char *find_tool( const char *name, const char * const *names )
             p = file + strlen(file);
             if (p == file) *p++ = '.';
             if (p[-1] != '/') *p++ = '/';
+            if (target_alias)
+            {
+                strcpy( p, target_alias );
+                p += strlen(p);
+                *p++ = '-';
+            }
             strcpy( p, *names );
             strcat( p, EXEEXT );
 
@@ -338,21 +344,38 @@ char *find_tool( const char *name, const char * const *names )
         free( file );
         names++;
     }
-    return xstrdup( name );
+    return NULL;
 }
 
 struct strarray *get_as_command(void)
 {
+    static int as_is_clang = 0;
     struct strarray *args = strarray_init();
 
     if (!as_command)
     {
+        as_command = find_tool( "clang", NULL );
+        if (as_command) as_is_clang = 1;
+    }
+
+    if (!as_command)
+    {
         static const char * const commands[] = { "gas", "as", NULL };
         as_command = find_tool( "as", commands );
     }
+
+    if (!as_command)
+        fatal_error( "cannot find suitable assembler\n" );
+
     strarray_add_one( args, as_command );
 
-    if (force_pointer_size)
+    if (as_is_clang)
+    {
+        strarray_add( args, "-xassembler", "-c", NULL );
+        if (force_pointer_size)
+            strarray_add_one( args, (force_pointer_size == 8) ? "-m64" : "-m32" );
+    }
+    else if (force_pointer_size)
     {
         switch (target_platform)
         {
@@ -386,6 +409,10 @@ struct strarray *get_ld_command(void)
         static const char * const commands[] = { "ld", "gld", NULL };
         ld_command = find_tool( "ld", commands );
     }
+
+    if (!ld_command)
+        fatal_error( "cannot find suitable linker\n" );
+
     strarray_add_one( args, ld_command );
 
     if (force_pointer_size)
@@ -421,6 +448,9 @@ const char *get_nm_command(void)
         static const char * const commands[] = { "nm", "gnm", NULL };
         nm_command = find_tool( "nm", commands );
     }
+
+    if (!nm_command)
+        fatal_error( "cannot find suitable name lister\n" );
     return nm_command;
 }
 




More information about the wine-cvs mailing list