[LLVMdev] Using LLVM to compile Objective-C on an Xbox 360
Sherief Farouk
sherief at mganin.com
Thu May 27 11:12:30 PDT 2010
Why? I think the discussion belongs here, and the topic doesn't seem to include proprietary information - a lot of 360 info has been made public through MS material. Other info can be discussed without much disclosure (we can refer to TCRs by three-letter category and number, etc).
- Sherief
On May 27, 2010, at 1:15 PM, Alex Rosenberg wrote:
> Please create a thread on DevNet to discuss this further.
>
> Alex
>
> On May 27, 2010, at 9:26 AM, Kevin Wooten wrote:
>
>> By linux derivative I meant that it borrows the linux GCC ABI... and
>> it does. You can compile with an off the shelf GCC cross compiler
>> and link the resultant object files ones compiled with the PS3
>> provided version. We have done it.
>>
>> Also, as both an XBox 360 and PS3 developer, there seems to me to be
>> nothing in the TCRs/TRCs that preclude us from using a different
>> compiler. There are rules about symbol inclusion and other
>> resultant binary requirements... but as of yet I have not found
>> specific ones stopping us from using a compiler that works. In
>> either case the LLVM rewriter solves any other these issues as we
>> would be just be compiling C.
>>
>> On May 27, 2010, at 8:09 AM, Alex Rosenberg wrote:
>>
>>> 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
>>>
>>
>
> _______________________________________________
> 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