[cfe-dev] Getting started with clang

Daniel Dunbar daniel at zuster.org
Mon Aug 17 23:53:26 PDT 2009


Hi Robert,

The problem you are seeing is that -arch is not supported on
non-Darwin platforms, and the driver just ignores it.

-arch implies more than just a way to target a different architecture.
My long term goal is to add a '-triple' option which will be the user
level option for targeting a separate architecture, portably. You can
see my basic plan at:
  llvm.org/PR4127

For now, although I hate to recommend this, it is possible to use the
'-ccc-host-triple' to do what you want:
--
ddunbar at giles:tmp$ echo "void f0(){}" | clang -ccc-host-triple
powerpc-unknown-unknown -x c - -S -o -
	.file	"-"


	.text
	.global	f0
	.type	f0, @function
	.align	2
f0:
	blr
	.size	f0,.-f0

--
but this was never really the purpose of -ccc-host-triple...

The real purpose of -ccc-host-triple, lest anyone care, was to have a
way to tell the driver to pretend that it was on a different host
system, for testing purposes. So you can also just tell the driver it
is on Darwin and then -arch will work. :)
--
ddunbar at giles:tmp$ echo "void f0(){}" | clang -ccc-host-triple
i386-apple-darwin9 -arch ppc -x c - -S -o -
	.machine ppc
	.section	__TEXT,__textcoal_nt,coalesced,pure_instructions
	.section	__TEXT,__picsymbolstub1,symbol_stubs,pure_instructions,32
	.section	__TEXT,__text,regular,pure_instructions


	.globl	_f0
	.align	4
_f0:
	blr

	.subsections_via_symbols

--
this only works up to a point, of course...

 - Daniel

On Mon, Aug 17, 2009 at 8:46 AM, Robert Wuest<rwuestfc at wuest.org> wrote:
> Hi,
>
> I'm just getting started with clang and having some problems.  I'm
> trying to build a compiler to run on x8_64 and gen code for the
> powerpc.  My goal is to make some changes to the ppc code generator, but
> I'm not off to a very good start.
>
> I have the latest source tree of llvm and clang from subversion and
> followed the build instructions.  This definitely produces a working
> native compiler as seen here:
>
> $ clang hello.c
> $ ./a.out
> Hello, world
>
> However, when I try the '-arch ppc' option, it still only produces
> x86_64 code:
>
> $ rm a.out
> $ clang -arch ppc hello.c
> clang: warning: argument unused during compilation: '-arch ppc'
> $ ./a.out
> Hello, world
>
> I am also seeing different output than that shown in the
> DriverInternals.html document that comes with clang.  In the "Driver
> Stages" section, there is an example I followed and get very different
> result from the doc:
>
> Trying to get identical output, I broke hello world into 2 source files.
> It's trivial source; main() just calls hello() in f_hello.c. I know they
> compile:
>
> $ rm a.out
> [rwuest at garion hello]$ clang main.c f_hello.c
> [rwuest at garion hello]$ ./a.out
> Hello, world
>
> However, the print-phase option with arch statements has no "bind-arch
> in the output (as indicated in the DriverInternals.html doc):
>
> $  clang -ccc-print-phases -c -arch i386 -arch x86_64 main.c f_hello.c
> 0: input, "main.c", c
> 1: preprocessor, {0}, cpp-output
> 2: compiler, {1}, assembler
> 3: assembler, {2}, object
> 4: input, "f_hello.c", c
> 5: preprocessor, {4}, cpp-output
> 6: compiler, {5}, assembler
> 7: assembler, {6}, object
>
>
> Have I missed something?
>
> Robert
>
> _______________________________________________
> cfe-dev mailing list
> cfe-dev at cs.uiuc.edu
> http://lists.cs.uiuc.edu/mailman/listinfo/cfe-dev
>




More information about the cfe-dev mailing list