[LLVMdev] Better llvm-ld support for frameworks on Mac OS X
Shantonu Sen
ssen at apple.com
Sat Jan 26 17:35:24 PST 2008
I would like to be able to compile and link the following two program
into native executables. These are a vastly reduced testcase, so
ignore for a moment the fact that the native compiler driver might
have default -L/-F search paths and -lSystem by default.
$ cat test1.c
extern char *zlibVersion(void);
extern int puts(char *);
int main(int argc, char *argv[]) {
puts(zlibVersion());
return 0;
}
$ clang test1.c -emit-llvm | llvm-as | llvm-ld - -native -L/usr/lib -
lSystem -lz -v
Generating Bitcode To a.out.bc
Generating Assembly With:
'/Volumes/HD/ltmp/ssen/src/llvm/Debug/bin/llc' '-f' '-o' 'a.out.s'
'a.out.bc'
Generating Native Executable With:
'/usr/bin/gcc' '-fno-strict-aliasing' '-O3' '-o' 'a.out' 'a.out.s' '-
L' '/usr/lib' '-lSystem' '-lz'
ld: in /usr/lib, can't map file, errno=22
collect2: ld returned 1 exit status
llvm-ld:
$ cat test2.c
extern void *kCFRunLoopCommonModes;
extern void CFShow(void *);
int main(int argc, char *argv[]) {
CFShow(kCFRunLoopCommonModes);
return 0;
}
$ clang test2.c -emit-llvm | llvm-as | llvm-ld - -native -F/System/
Library/Frameworks -framework CoreFoundation -L/usr/lib -lSystem -v
llvm-ld: Unknown command line argument '-F/System/Library/
Frameworks'. Try: 'llvm-ld --help'
llvm-ld: Unknown command line argument '-framework'. Try: 'llvm-ld --
help'
There are a few issues preventing this from working. For one thing,
although llvm-ld and the native gcc parse "-L foo" with an optional
space, the native ld(1) linker on Mac OS X does not accept an
intervening space, and so considers /usr/lib as an input file.
-F and -framework are not currently parsed by llvm-ld when creating
native binaries.
The attached patch implements this functionality. Now:
$ clang test1.c -emit-llvm | llvm-as | llvm-ld - -native -L/usr/lib -
lSystem -lz -v
Generating Bitcode To a.out.bc
Generating Assembly With:
'/Volumes/HD/ltmp/ssen/src/llvm/Debug/bin/llc' '-f' '-o' 'a.out.s'
'a.out.bc'
Generating Native Executable With:
'/usr/bin/gcc' '-fno-strict-aliasing' '-O3' '-o' 'a.out' 'a.out.s' '-L/
usr/lib' '-lSystem' '-lz'
$ ./a.out
1.2.3
$ clang test2.c -emit-llvm | llvm-as | llvm-ld - -native -F/System/
Library/Frameworks -framework CoreFoundation -L/usr/lib -lSystem -v
Generating Bitcode To a.out.bc
Generating Assembly With:
'/Volumes/HD/ltmp/ssen/src/llvm/Debug/bin/llc' '-f' '-o' 'a.out.s'
'a.out.bc'
Generating Native Executable With:
'/usr/bin/gcc' '-fno-strict-aliasing' '-O3' '-o' 'a.out' 'a.out.s' '-L/
usr/lib' '-F/System/Library/Frameworks' '-lSystem' '-framework'
'CoreFoundation'
$ ./a.out
kCFRunLoopCommonModes
-------------- next part --------------
A non-text attachment was scrubbed...
Name: llvm-ld.framework-support.patch
Type: application/octet-stream
Size: 2418 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-dev/attachments/20080126/78578ec8/attachment.obj>
-------------- next part --------------
Shantonu Sen
Apple, Inc.
More information about the llvm-dev
mailing list