[LLVMdev] Using LLVM to compile Objective-C on an Xbox 360
Alex Rosenberg
alexr at leftfield.org
Thu May 27 08:09:11 PDT 2010
PS3 is not "a Linux derivative." The compilers supplied by SCE for PS3
game development are highly customized and support a customized ABI
that will take some time to adjust LLVM and Clang to support.
You'd likely also run afoul of a TRC or two, similar to the problems
you'll face with Microsoft TCRs mentioned earlier.
Alex
On May 27, 2010, at 12:15 AM, Kevin Wooten wrote:
> Implementing the backend (or editing the current PPC backend as
> needed) is a definite option. This seems to be the real question...
> which is easier... maintaining the PPC backend or maintaining the
> rewriter. Currently (in admittedly trivial tests) I have gotten the
> rewriter to work and output C code. There are some outstanding
> issues to do with linking and accessing the reflection information
> objective-c provides (and the rewriter properly outputs) but I am
> sure the person/people who wrote the rewriter can answer those
> fairly simply (or else the rewriter would be fairly useless).
>
> As far as the runtime goes there is an implementation for windows,
> linux and most likely the PS3 (since it is already a linux
> derivative using GCC as mentioned). If we have to create a runtime
> for PS3 and XBox that seems trivial as the functions are very basic
> in nature.
>
> My comments on OpenStep were more meant to point to the fact that we
> would write our own library; really just throwing all notion of
> OpenStep away. Instead of NSObject we would create our own base
> DObject or something along with a DString, DAarry, DSet, DMap, etc.
> Truthfully this would be our plan anyway because we want to follow
> the lead of OSX and provide these objects "toll free bridged"...
> meaning we would implement them using a std c++ library object (e.g.
> std::basic_string or std::vector) as the first member of the object
> which will allow us to cast a DString to std::string or DArray to
> std::vector without any manual or automatic marshaling. As mentioned
> this is how OSX implements its NS classes, by using the equivalent
> CF version which again allows casting between the objects.
>
> On May 26, 2010, at 6:19 PM, Dale Johannesen wrote:
>
>> llvm can output C code, but that target has bitrotted severely over
>> the last few months and nobody seems to be interested in fixing
>> it. You may need to do some work there. Alternatively you could
>> implement the PPC ABI that you need. There are several examples of
>> supporting multiple ABIs on the same hardware, x86 being the most
>> obvious. A lot of simple stuff will probably Just Work with the
>> existing PPC ABI, more complicated stuff may not. (Only 32-bit PPC
>> is really maintained, though, there are probably lots of problems
>> with 64-bit.)
>>
>> Objective C in llvm, AFAIK, is only used on the MacOSX targets and
>> only tested there. There are sufficient secret handshakes between
>> the compiler and the ObjC runtime that it is unlikely to Just Work
>> in an untested environment. OpenStep has a familial relationship
>> to MacOSX ObjC runtime, but they aren't the same and are unlikely
>> to still be binary compatible at this point. You may need to do
>> some work there also.
>>
>> Summary, you can probably get this approach to work, but it's not
>> as easy as you're hoping.
>>
>> On May 26, 2010, at 5:20 PMPDT, kdubb wrote:
>>
>>> We are looking at using Objective-C/C++ in a new game engine.
>>> Objective C's duality of being both very dynamic and very "C"
>>> gives us exactly what we need to make the SDK and engineering of
>>> games simpler.
>>>
>>> This means that we will need a way to compile it on all platforms
>>> our games will target. Currently the major platforms we are
>>> concerned with include... PC, Mac, XBox 360, PS3, iPhone. Now the
>>> PC, Mac, iPhone and PS3 are fairly simple. If we build our own
>>> OpenStep libraries we can simply use LLVM to compile directly to
>>> these platforms; the PS3 although proprietary uses GCC as a C/C++
>>> compiler so I am assuming Objective-C can be used fairly simply.
>>> This leaves us with the XBox 360.
>>>
>>> The 360 is a special chip (PowerPC based) with, as far as I have
>>> researched, a special ABI (Windows derivative). I haven't the
>>> faintest clue of whether code from the LLVM PPC backend would even
>>> work on the 360, much less interoperate with the system libraries.
>>> So my formulated solution has become this: use an LLVM backend to
>>> output C code and then compile that code with using MS's XBox 360
>>> compiler. I believe I have read that LLVM has a C backend already
>>> but I don't know how to select it.
>>>
>>> If I can get a proof of concept showing Objective-C code running
>>> on the 360 we are off to the races. Any help is appreciated just
>>> not sure if all the pieces/parts exist and/or what I am missing.
>>> So... is this feasible? If so... how do I get LLVM to output C
>>> code?
>>>
>>> Thanks,
>>> Kevin
>>> _______________________________________________
>>> LLVM Developers mailing list
>>> LLVMdev at cs.uiuc.edu http://llvm.cs.uiuc.edu
>>> http://lists.cs.uiuc.edu/mailman/listinfo/llvmdev
>>
>
> _______________________________________________
> LLVM Developers mailing list
> LLVMdev at cs.uiuc.edu http://llvm.cs.uiuc.edu
> http://lists.cs.uiuc.edu/mailman/listinfo/llvmdev
More information about the llvm-dev
mailing list