http://gcc.gnu.org/bugzilla/show_bug.cgi?id=48260

           Summary: Accept -arch as an alias for -m32/-m64 on darwin
           Product: gcc
           Version: 4.6.0
            Status: UNCONFIRMED
          Severity: normal
          Priority: P3
         Component: driver
        AssignedTo: unassig...@gcc.gnu.org
        ReportedBy: gcchelp.5.ad...@0sg.net


If the GCC driver is supplied with '-arch i386' when invoked as linker on
intel-darwin, this should have the same effect as '-m32' (effectively an
alias). Conversely, if '-arch x86_64' is supplied, it should have the same
effect as '-m64'. No further support for the '-arch' switch is necessary.
Without this support, it is impossible to configure the latest GCC to be used
from within xcode. As a proof of concept, I have a patch working that achieves
this.

diff --recursive --normal -w gcc-4.6.0-RC-20110314/gcc/c-family/c.opt
gcc-4.6.0-RC-20110314-patched/gcc/c-family/c.opt
204c204
< C ObjC C++ ObjC++ Joined Separate MissingArgError(missing path after %qs)
---
> Driver C ObjC C++ ObjC++ Joined Separate MissingArgError(missing path after 
> %qs)
diff --recursive --normal -w gcc-4.6.0-RC-20110314/gcc/config/darwin.opt
gcc-4.6.0-RC-20110314-patched/gcc/config/darwin.opt
33a34,36
> arch
> Driver RejectNegative Separate 
> 
diff --recursive --normal -w gcc-4.6.0-RC-20110314/gcc/config/i386/darwin.h
gcc-4.6.0-RC-20110314-patched/gcc/config/i386/darwin.h
120c120
< #define DARWIN_ARCH_SPEC "%{m64:x86_64;:i386}"
---
> #define DARWIN_ARCH_SPEC "%{m64:x86_64;arch*:%*;:i386}"
diff --recursive --normal -w gcc-4.6.0-RC-20110314/gcc/config/i386/darwin64.h
gcc-4.6.0-RC-20110314-patched/gcc/config/i386/darwin64.h
25c25
< #define DARWIN_ARCH_SPEC "%{m32:i386;:x86_64}"
---
> #define DARWIN_ARCH_SPEC "%{m32:i386;arch*:%*;:x86_64}"
diff --recursive --normal -w gcc-4.6.0-RC-20110314/gcc/config/i386/t-darwin
gcc-4.6.0-RC-20110314-patched/gcc/config/i386/t-darwin
2a3
> MULTILIB_MATCHES = "m64=arch+x86_64" 
diff --recursive --normal -w gcc-4.6.0-RC-20110314/gcc/config/i386/t-darwin64
gcc-4.6.0-RC-20110314-patched/gcc/config/i386/t-darwin64
5a6
> MULTILIB_MATCHES = "m32=arch+i386" 
diff --recursive --normal -w gcc-4.6.0-RC-20110314/gcc/gcc.c
gcc-4.6.0-RC-20110314-patched/gcc/gcc.c
7106a7107
>     const char *arg;
7108a7110
>     int arg_len;
7135c7137
<       while (*q != ' ')
---
>         while (*q != ' ' && *q != '+')
7146a7149,7162
>         if (*q == '+')
>           {
>             matches[i].arg = ++q;
>             while (*q != ' ')
>             {
>               if (*q == '\0')
>                 goto invalid_matches;
>               q++;
>             }
>             matches[i].arg_len = q - matches[i].arg;
>           } 
>         else
>           matches[i].arg_len = 0;
> 
7172c7188,7189
<           && ! strncmp (switches[i].part1, matches[j].str, xlen))
---
>                 && ! strncmp (switches[i].part1, matches[j].str, xlen)
>                 && ( !matches[j].arg_len || ( switches[i].args && !strncmp 
> (switches[i].args[0], matches[j].arg, matches[j].arg_len ) ) ) )

Reply via email to