LLVM-GCC 4.2 Front End Binaries for Mingw32/x86
http://llvm.org/releases/download.html#2.9
KMC Staff Blog:Clang と LLVM を使ってみる。
http://blog.kmckk.com/archives/2435798.html
実は、よく分からんというのが本音ですが、mingw + gnustep の組み合わせだと objective-c の @property がコンパイルできません。
なので、先のリンクから↓の3つをダウンロードしてきて c:\llvm とかに移動
Clang Binaries for Mingw32/x86 (23M)(.sig)
LLVM Binaries for Mingw32/x86 (23M)(.sig)
LLVM-GCC 4.2 Front End Binaries for Mingw32/x86 (26M) (.sig)
別に入っている
GNUstep Windows Installer
http://www.gnustep.org/experience/Windows.html
の include を設定すると、@property がうまくコンパイルできます。かつ、うまく動きます。
#import <stdio.h>
#import <Foundation/Foundation.h>
#import <Foundation/NSObject.h>
@interface Hello: NSObject
{
@private
NSString *_msg ;
}
@property (nonatomic,retain) NSString *msg;
@end
@implementation Hello
@synthesize msg = _msg ;
- (void)print
{
// NSLog( _msg );
printf("%s\n", [_msg cString]);
}
- (void)dealloc
{
NSLog( @"in dealloc" );
[super dealloc];
}
@end
int main(int argc, char *argv[])
{
puts("hello obj-c world.");
Hello *hello = [[Hello alloc] init];
hello.msg = @"hello objc world.";
[hello print];
[hello release];
return 0;
}
こんな風に @property を使ったコードを書いておきます。
そして、最初は clang だけでコンパイルしてみると。
clang -o main3 main3.m -I /llvm/include -I /GNUstep/GNUstep/System/Library/Headers -L c:/GNUstep/GNUstep/System/Library/Libraries -lobjc -lgnustep-base -fconstant-string-class=NSConstantString
のようにコンパイルして実行すると、次のようにうまく動きます。
C:\work\alice\objc>main3 hello obj-c world. 2011-07-05 18:12:32.113 main3[2400] in dealloc
~~~
試しに vm 上で動かしてみようと
clang -emit-llvm -S main3.m -I /llvm/include -I /GNUstep/GNUstep/System/Library/Headers llvm-as main3.s lli main3.s.bc
な風にコンパイルしましたが、
C:\work\alice\objc>lli main3.s.bc LLVM ERROR: Program used external function '__objc_exec_class' which could not b e resolved! Stack dump: 0. Program arguments: lli main3.s.bc 1. Running pass 'X86 Machine Code Emitter' on function '@.objc_load_functio n'
な風に実行エラーになりますね。objc のランタイムを clang でコンパイルして配置するんでしょうが。

コンパイルして配置するんでしょうが。
35.65386552973979, 139.28319185822124
「コンパイルして配置するんでしょうが」…の続きは、objc のランタイム自体を clang でコンパイルして配置しないと、windows の llvm 環境では動かないのだろう、ってことです。
これで、llvm 上で動くとすれば、llvm 環境自体は os x 上でも動くので、そうなると os x で xcode を使ってビルドしている iphone の実行ファイルも windows 環境でビルド可能ではないか?ってことです。
まあ、iphone の実機にデプロイするには?という壁があるので、一筋縄ではいきそうもありませんが。