I know of the following methods for compiling a XBE:
a. M$ XDK. DirectX API, MS XDK API and xbox kernel support. Executables are not freely distributable.
b. OpenXDK. Uses Cxbe to generate the XBE from PE executable and relies on Cygwin primarily - though it might work on MinGW and Linux (with the help of cross-compiler). I find it inconvenient that gcc is used to compile a PE and Cxbe is needed to generate the actual XBE. Library support: OpenXDK's , newLib, SDL,xbox kernel. Executables are freely distributable though.
c. NASM. rmenhal's nkpatcher uses this. Assembly language is used instead of C/C++. Can call xbox kernel. Freely distributable executables. A variant of this is hex editing of XBE directly.
There is actually another method that is lesser known. Team Xbox Linux came up with their own imagebld tool which converts a Linux ELF binary compiled by gcc into a XBE. This is employed in xbetool, Cromwell and their derivatives (Phoenix Bios Loader, Gentoox Loader). This method used the GNU toolchain (gcc, binutils) to generate ELF and allows xbox kernel calls via kernel thunks.
For Linux fans, this avoids use of Cygwin and cxbe and M$ Win OS completely in the generation of XBE. I intend to release a source code example of this method if I can integrate more of the OpenXDK APIs beyond just xbox kernel calls.
To be continued.