{"id":19297204,"url":"https://github.com/Tatsh/xchain","last_synced_at":"2025-04-22T08:31:16.692Z","repository":{"id":141714536,"uuid":"2318231","full_name":"Tatsh/xchain","owner":"Tatsh","description":"A cross compiler toolchain targeting macOS/iOS/etc.","archived":true,"fork":false,"pushed_at":"2018-05-23T09:38:54.000Z","size":65722,"stargazers_count":109,"open_issues_count":1,"forks_count":22,"subscribers_count":10,"default_branch":"master","last_synced_at":"2025-04-21T07:02:26.474Z","etag":null,"topics":["apple","c","cctools","darwin","gcc","ios","llvm","macos","macosx","objective-c","toolchain"],"latest_commit_sha":null,"homepage":"https://tatsh.github.io/xchain/","language":"C","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/Tatsh.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2011-09-03T08:05:41.000Z","updated_at":"2025-03-30T00:40:06.000Z","dependencies_parsed_at":null,"dependency_job_id":"2f738f4b-85b9-478c-bf45-37dc67d0cd4b","html_url":"https://github.com/Tatsh/xchain","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Tatsh%2Fxchain","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Tatsh%2Fxchain/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Tatsh%2Fxchain/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Tatsh%2Fxchain/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/Tatsh","download_url":"https://codeload.github.com/Tatsh/xchain/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":250206144,"owners_count":21392194,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["apple","c","cctools","darwin","gcc","ios","llvm","macos","macosx","objective-c","toolchain"],"created_at":"2024-11-09T23:01:47.748Z","updated_at":"2025-04-22T08:31:16.685Z","avatar_url":"https://github.com/Tatsh.png","language":"C","funding_links":[],"categories":["C"],"sub_categories":[],"readme":"Based on [original documentation by OpenTTD team](http://devs.openttd.org/~truebrain/compile-farm/apple-darwin9.txt).\n\nWith these files you may build odcctools and GCC 4.2.1 targetting Darwin/macOS.\n\nThis has been tested in the following environments:\n\n* *x86_64-pc-linux-gnu* with GCC 4.5.3\n\nThe following targets have been tested:\n\n* *i686-apple-darwin11*\n* *x86_64-apple-darwin11*\n* *arm-apple-darwin* (requires iOS SDK)\n\nThese might work:\n\n* *ppc-apple-darwin11*\n* *ppc64-apple-darwin11*\n\nDecide your target, and export:\n\n```bash\nexport TARGET=i686-apple-darwin11\n```\n\n11 denotes Lion, 10 for Snow Leopard, and 9 for Leopard. These are mostly superficial. All code will run on 10.5 and greater.\n\nDecide your prefix directory and set it to a variable.\n\n```bash\nexport PREFIX=/usr/$TARGET\nmkdir $PREFIX\ncd $PREFIX\n```\n\nIn `~/.bashrc` or similar you may want:\n\n```bash\nexport DARWIN_PREFIX=\u003cprefix you chose\u003e\n```\n\n# Prepare your prefix\n\nIf you don't have a Mac, skip this and read *Prepare your prefix (no Mac)*. Even if you have a Mac, the no-Mac method is cleaner than using scp but not as easy.\n\nYou will need a copy of an SDK directory to begin. You can choose any version past 10.4u really but I suppose only if you need new things in Lion would copy Lion's SDK (and that requires Lion itself of course). I expect that you are doing most development on the Mac anyway so therefore your compiler settings in Xcode will decide support level.\n\n```bash\nmkdir $PREFIX/SDKs\ncd $PREFIX/SDKs\n```\n\nIf you have Snow Leopard:\n\n```bash\nexport SDK=MacOSX10.6.sdk\nscp -r myname@mymac:/Developer/SDKs/$SDK .\n```\n\nIf you have Lion (and want latest headers):\n\n```bash\nexport SDK=MacOSX10.7.sdk\nscp -r myname@mymac:/Developer/SDKs/$SDK .\n```\n\n# Prepare your prefix (no Mac)\n\nIf you are copying from Mac with scp, skip to 'Continue with scp'.\n\nDownload the DMG from Apple for Xcode, any version. You need to have the following:\n\n* Linux kernel built with HFS+ file system driver\n* Catacombae DMGExtractor (requires Java) http://sourceforge.net/projects/catacombae/\n  * Gentoo users: I have an ebuild and prefix: https://github.com/tatsh/tatsh-overlay and once installed, simply run: `emerge app-arch/dmgextractor` to get this\n* p7zip\n* xar\n* cpio\n\nUse `mount` and `umount` as root or with `sudo` (probably easier with `sudo`). Example here is with Xcode 4.2. Replace `/mnt/tmp` with your own mount point.\n\n```bash\ncd where-my-xcode-dmg-lives\njava -jar path/to/dmgextractor.jar xcode_4.2_and_ios_5_sdk_for_snow_leopard.dmg my.iso (click OK on any prompts)\n# if on Gentoo, you can use `dmgextractor xcode_4.2_and_ios_5_sdk_for_snow_leopard.dmg` my.iso\n7z x my.iso\nmount -t hfsplus disk\\ image.hfs /mnt/tmp\nxar -f /mnt/tmp/Packages/MacOSX10.6.pkg Payload\ncpio -i \u003c Payload\numount /mnt/tmp\n```\n\nYou will now have an SDKs directory, but it needs fixing.\n\n```bash\ncd SDKs/MacOSX10.6.sdk\nrm Library/Frameworks\nln -s System/Library/Frameworks Library\nmv Developer/usr/llvm-gcc-4.2 usr\nrm -r Developer/usr\nln -s usr Developer\n```\n\nCopy the prefix:\n\n```bash\ncd ../..\ncp -r SDKs $PREFIX\n\ncd $PREFIX\n```\n\nNote that we are going to put stuff in this .sdk directory. Anything we build from here will be placed inside. So we are going to create symlinks to its directories in $PREFIX.\n\n```bash\nln -s SDKs/$SDK/Developer\nln -s SDKs/$SDK/Library\nln -s SDKs/$SDK/System\nln -s SDKs/$SDK/usr\n```\n\nIf you used the no-Mac method, skip to *Building cctools'*.\n\n# Continue with scp\n\nDelete any of YOUR frameworks (these are all from 3rd parties, not Apple). None of these are necessary.\n\n```bash\nrm -R Library/Frameworks\n```\n\nCreate a symlink to the Apple Frameworks directory.\n\n```bash\ncd Library\nln -s ../System/Library/Frameworks\ncd ..\n```\n\nLater on, you can copy the 3rd party frameworks from your Mac to $PREFIX/Library/Frameworks:\n\n```bash\nscp -r /Developer/SDKs/MacOSX10.6.sdk/Library/Frameworks/* $PREFIX/Library/Frameworks\n```\n\n`usr` is of great importantance to us in the next steps. It's where cctools and GCC will go. So yes, this `usr` directory (and possibly `Library`) will eventually be 'dirty' and non-equivalent to the one in macOS (and in the next steps we will overwrite files in the directory).\n\nNever copy the SDK directory back to macOS for any reason.\n\n# Building cctools\n\nYou really should only apply the patch if you are not on macOS/Darwin, because I have not tested any of this on OS X/Darwin yet.\n\n```bash\nwget http://opensource.apple.com/tarballs/cctools/cctools-806.tar.gz\ntar xvf cctools-806.tar.gz\npatch -p0 \u003c patches/cctools-806-nondarwin.patch\ncd cctools-806\nchmod +x configure\nCFLAGS=\"-m32\" LDFLAGS=\"-m32\" ./configure --prefix=$PREFIX/usr --target=$TARGET --with-sysroot=$PREFIX\nmake\nmake install\ncd ..\n```\n\nNote `-m32`. Everything will be 32-bit. Building for 64-bit is not supported (but using 32-bit to build 64-bit binaries is). Do not try optimisation flags. `ranlib` is especially sensitive.\n\nIgnore ALL warnings. There will be many (or you can use `-w` for a `CFLAG`).\n\n# Building ld64\n\nTo build GCC we cannot use what's known as 'classic' `ld`. We have to use `ld64` (even though we are not going to build it in 64-bit mode). For the moment, use odcctools-9.2 from the iphone-dev project (the version in this repository is patched for GCC 4.5):\n\n```bash\ncd odcctools-9.2-ld\nCFLAGS=\"-m32\" LDFLAGS=\"-m32\" ./configure \\\n    --prefix=$PREFIX/usr \\\n    --target=$TARGET \\\n    --with-sysroot=$PREFIX \\\n    --enable-ld64\nmake\ncd ld64\nmake install\ncd ../..\n```\n\nDo not try optimisation flags here either.\n\nSet `$PATH` to have your new tools. You may want to add this to your `~/.bashrc` or similar.\n\n```bash\nexport PATH=\"$PATH:/usr/$TARGET/usr/bin\"\n```\n\n# Building GCC\n\nNow you can proceed to build GCC, but it must be patched first. Patches are located in `patches`.\n\n```bash\nwget http://opensource.apple.com/tarballs/gcc/gcc-5666.3.tar.gz\ntar xvf gcc-5666.3.tar.gz\ncd gcc-5666.3\npatch -p1 \u003c ../patches/gcc-5666.3-cflags.patch\n```\n\nApply if you are annoyed by the default directory structure:\n\n```bash\npatch -p1 \u003c ../patches/gcc-5666.3-tooldir.patch\n```\n\nAfter patching, I recommend building outside of the source of GCC.\n\n```bash\ncd ..\nmkdir gcc-build\ncd gcc-build\n\nCFLAGS=\"-m32\" CXXFLAGS=\"$CFLAGS\" LDFLAGS=\"-m32\" \\\n    ../gcc-5666.3/configure --prefix=$PREFIX/usr \\\n    --disable-checking \\\n    --enable-languages=c,objc,c++,obj-c++ \\\n    --with-as=$PREFIX/usr/bin/$TARGET-as \\\n    --with-ld=$PREFIX/usr/bin/$TARGET-ld64 \\\n    --target=$TARGET \\\n    --with-sysroot=$PREFIX \\\n    --enable-static \\\n    --enable-shared \\\n    --enable-nls \\\n    --disable-multilib \\\n    --disable-werror \\\n    --enable-libgomp \\\n    --with-gxx-include-dir=$PREFIX/usr/include/c++/4.2.1 \\\n    --with-ranlib=$PREFIX/usr/bin/$TARGET-ranlib \\\n    --with-lipo=$PREFIX/usr/bin/$TARGET-lipo\n```\n\nOptimisations do work here (most of the time). You can try to configure with:\n\n```bash\nCFLAGS=\"-m32 -O2 -msse2\"\n```\n\nNo, there is no Java (GCJ) or Fortran.\n\nMake and install like normal.\n\n```bash\nmake\nmake install\n```\n\nSometimes you may get an issue about ranlib not working or lipo, which is why `--with-ranlib` and `--with-lipo` are appended to `./configure`. However, you may have to run `make` again or not use a `-j` flag. I would recommend not using the `-j` flag anyway just to ease debugging of any issues. Seriously, try doing `make` over and over until it does work.\n\nIf `ranlib` has a buffer overflow during build, it is probably because you enabled optimisation flags.\n\n# Hack to fix include path\n\n```bash\nexport LAST=$PWD\ncd $PREFIX/usr/local\nln -s ../lib/gcc/$TARGET/4.2.1/include\ncd $LAST\n```\n\n# Test GCC\n\nFrom the cloned source:\n\n```bash\n$TARGET-gcc -o msg msg.m \\\n    -fconstant-string-class=NSConstantString \\\n    -lobjc -framework Foundation\n```\n\nTest C++:\n\n```bash\n$TARGET-g++ -o msgcpp msg.cpp -I$PREFIX/usr/include/c++/4.2.1\n```\n\nI know, that's a weird `-I` flag. For now, just use an alias for `$TARGET-g++` with it. You can safely alias `$TARGET-gcc` as well with `-fconstant-string-class=NSConstantString` even if you are compiling C.\n\n```bash\nfile msg\n```\n\nOutput:\n\n    msg: Mach-O executable i386\n\nCopying to Mac and executing with ssh:\n\n```bash\nscp msg myname@mymac:\nssh myname@mymac ./msg\nscp msgcpp myname@mymac:\nssh myname@mymac ./msgcpp\n```\n\nOutput:\n\n    2011-09-03 03:51:52.887 msg[31266:1007] Are you John smith?\n    2011-09-03 03:51:52.889 msg[31266:1007] My message\n    This was compiled on a non-Mac!\n\n# Optional: Building LLVM-GCC\n\nBecause LLVM is the future right?\n\nFirst, force the use of ld64 everywhere (yes you can keep this as permanent):\n\n```bash\nexport LAST=$PWD\ncd $PREFIX/usr/bin\nmv $TARGET-ld $TARGET-ld.classic\nln -s $TARGET-ld64 $TARGET-ld\ncd $LAST\n```\n\nYou need to build Apple's LLVM first.\n\n```bash\nwget http://opensource.apple.com/tarballs/llvmgcc42/llvmgcc42-2335.15.tar.gz\ntar xvf llvmgcc42-2335.15.tar.gz\nmkdir llvm-obj\ncd llvm-obj\nCFLAGS=\"-m32\" CXXFLAGS=\"$CFLAGS\" LDFLAGS=\"-m32\" \\\n    ../llvmgcc42-2335.15/llvmCore/configure \\\n    --prefix=$PREFIX/usr \\\n    --enable-optimized \\\n    --disable-assertions \\\n    --target=$TARGET\nmake\nmake install # optional\ncd ..\n```\n\nThis is somewhat intensive (lots of C++) so if you don't have a powerful PC do not use `-j` flag with `make`.\n\nNext, proceed to build GCC itself, but you need to patch one thing (at least needed GCC 4.5):\n\n```bash\ncd llvmgcc42-2335.15\npatch -p0 \u003c ../patches/llvmgcc42-2335.15-redundant.patch\npatch -p0 \u003c ../patches/llvmgcc42-2335.15-mempcpy.patch\ncd ..\n```\n\nBuild outside the directory.\n\n```bash\nmkdir llvmgcc-build\ncd llvmgcc-build\nCFLAGS=\"-m32\" CXXFLAGS=\"$CFLAGS\" LDFLAGS=\"-m32\" \\\n    ../llvmgcc42-2335.15/configure \\\n    --target=$TARGET \\\n    --with-sysroot=$PREFIX \\\n    --prefix=$PREFIX/usr \\\n    --enable-languages=objc,c++,obj-c++ \\\n    --disable-bootstrap \\\n    --enable--checking \\\n    --enable-llvm=$PWD/../llvm-obj \\\n    --enable-shared \\\n    --enable-static \\\n    --enable-libgomp \\\n    --disable-werror \\\n    --disable-multilib \\\n    --program-transform-name=/^[cg][^.-]*$/s/$/-4.2/ \\\n    --with-gxx-include-dir=$PREFIX/usr/include/c++/4.2.1 \\\n    --program-prefix=$TARGET-llvm- \\\n    --with-slibdir=$PREFIX/usr/lib \\\n    --with-ld=$PREFIX/usr/bin/$TARGET-ld64 \\\n    --with-tune=generic \\\n    --with-as=$PREFIX/usr/bin/$TARGET-as \\\n    --with-ranlib=$PREFIX/usr/bin/$TARGET-ranlib \\\n    --with-lipo=$PREFIX/usr/bin/$TARGET-lipo\nmake\nmake install\n```\n\nTest:\n\n```bash\nexport LAST=$PWD\ncd $PREFIX/usr/bin\nln -s $TARGET-as as\ncd $LAST\ncd ..\nPATH=\"$PREFIX/usr/bin\" $TARGET-llvm-gcc -o msg msg.m \\\n    -fconstant-string-class=NSConstantString \\\n    -lobjc -framework Foundation\nPATH=\"$PREFIX/usr/bin\" $TARGET-llvm-g++ -o msgcpp msg.cpp \\\n    -I$PREFIX/usr/include/c++/4.2.1\n```\n\nI know, yet again C++ paths fail to work.\n\nIgnore all warnings.\n\n# Distcc\n\nDistcc for Gentoo (not for Objective-C or C++ yet due to default argument issues):\nFollow these instructions:\n\n* [Gentoo Distcc Guide](http://www.gentoo.org/doc/en/distcc.xml)\n* [Gentoo Cross-compiling with Distcc Guide](http://www.gentoo.org/doc/en/cross-compiling-distcc.xml) (with your target being macOS Prefix)\n\n# What works for me\n\n* `CFLAGS=\"-O2 -msse2 -pipe -m32\"` for building llvm-GCC and regular GCC\n* `make -j3` works for everything for me\n\n# iPhone\n\nThis is with a default install of Xcode 4.1.1 from the Mac App Store. You can also try the non-Mac method to get the equivalent file.\n\nFollow the above instructions but rather than 10.7 or 10.6 SDK, copy the iOS 4.3 SDK:\n\n```bash\nscp -r myname@mymac:/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS4.3.sdk .\nexport TARGET=\"arm-apple-darwin\"\nexport PREFIX=\"/usr/$TARGET\"\n```\n\nBuild cctools and ld64. Do not build GCC. Instead build LLVM as described above.\n\ncctools for Gentoo the easy way (as root, example amd64 architecture):\n\n```bash\nexport OVERLAY=\"/usr/tatsh-overlay\" # or where you want it\ngit clone git://github.com/tatsh/tatsh-overlay.git $OVERLAY\necho \"$PORTDIR_OVERLAY=\\\"\\$PORTDIR_OVERLAY $OVERLAY\\\"\" \u003e\u003e /etc/make.conf\neix-update # optional, only if you have eix installed\necho 'cross-arm-apple-darwin/cctools ~amd64' \u003e\u003e /etc/portage/package.keywords\nemerge cross-arm-apple-darwin/cctools\n```\n\nThe difference comes in building LLVM GCC. Use LLVM-GCC from Apple's site, apply the patches as described, but build with the following arguments to `./configure` (note lack of `-m32`):\n\n```bash\n../llvmgcc42-2335.15/configure \\\n    --target=$TARGET \\\n    --with-sysroot=$PREFIX \\\n    --prefix=$PREFIX/usr \\\n    --enable-languages=objc,c++,obj-c++ \\\n    --disable-bootstrap \\\n    --enable--checking \\\n    --enable-llvm=$PWD/../llvm-obj \\\n    --enable-shared \\\n    --enable-static \\\n    --enable-libgomp \\\n    --disable-werror \\\n    --disable-multilib \\\n    --program-transform-name=/^[cg][^.-]*$/s/$/-4.2/ \\\n    --with-gxx-include-dir=$PREFIX/usr/include/c++/4.2.1 \\\n    --program-prefix=$TARGET-llvm- \\\n    --with-slibdir=$PREFIX/usr/lib \\\n    --with-ld=$PREFIX/usr/bin/$TARGET-ld64 \\\n    --with-as=$PREFIX/usr/bin/$TARGET-as \\\n    --with-ranlib=$PREFIX/usr/bin/$TARGET-ranlib \\\n    --with-lipo=$PREFIX/usr/bin/$TARGET-lipo \\\n    --enable-sjlj-exceptions\nmake\nmake install\n```\n\nThis will fix g++:\n\n```bash\ncd $PREFIX/usr/lib\nln -s libgcc_s.1.dylib libgcc_s.10.4.dylib\n```\n\nThis will make it a little more sane:\n\n```bash\ncd $PREFIX/usr/bin\nln -s arm-apple-darwin-gcc-4.2.1 arm-apple-darwin-gcc\nln -s arm-apple-darwin-g++-4.2.1 arm-apple-darwin-g++\n```\n\nYou will have a working compiler targetting iOS. You need a jailbroken phone before any code will run.\n\nTry:\n\n```bash\nssh root@My_iPhone uname -a\narm-apple-darwin-g++ -o msg.arm msg.cpp \\\n    -I$PREFIX/usr/include/c++/4.2.1 \\\n    -I$PREFIX/usr/include/c++/4.2.1/armv6-apple-darwin10\nscp msg.arm root@My_iPhone:\nssh root@My_iPhone ./msg.arm\n```\n\nOutput:\n\n    Darwin My_iPhone 11.0.0 Darwin Kernel Version 11.0.0: Wed Mar 30 18:51:10 PDT 2011; root:xnu-1735.46~10/RELEASE_ARM_S5L8930X iPhone3,1 arm N90AP Darwin\n    This was compiled on a non-Mac!\n\nNote that you need both of those include path arguments. Yes, it's an ongoing issue.\n\nAlso note that the minimum version to run any code is iOS 3.0 by default. To get 2.0 support for example, use `-miphoneos-version-min=2.0` in your line:\n\n```bash\narm-apple-darwin-g++ -o msg.o -c msg.cpp \\\n    -I$PREFIX/usr/include/c++/4.2.1 \\\n    -I$PREFIX/usr/include/c++/4.2.1/armv6-apple-darwin10 \\\n    -miphoneos-version-min=2.0\n```\n\nAlso note that these are not univeral binaries, even if you use `-force_cpusubtype_ALL`. These are armv6.\n\n# Generate fat binary\n\nCompile both architectures:\n\n```bash\nexport TARGET=x86_64-apple-darwin11\n$TARGET-g++ -o msg.x86_64 -I$PREFIX/usr/include/c++/4.2.1\nexport TARGET=arm-apple-darwin\n$TARGET-g++ -o msg.arm \\\n    -I$PREFIX/usr/include/c++/4.2.1 \\\n    -I$PREFIX/usr/include/c++/4.2.1/armv6-apple-darwin10\n```\n\nNow use lipo from any of the architectures you have built:\n\n```bash\n$TARGET-lipo x86_64-apple-darwin11-lipo -create -arch arm msg.arm -arch x86_64 msg.x86_64 -output msg\n```\n\nTesting on iPhone:\n\n```bash\nscp msg root@My_iPhone:\nssh root@My_iPhone ./msg\n```\n\nOutput:\n\n    This was compiled on a non-Mac!\n\nGet info from a mac:\n\n```bash\nscp msg myname@mymac\nssh myname@mymac lipo -detailed_info msg\n```\n\nOutput:\n\n    Fat header in: msg\n    fat_magic 0xcafebabe\n    nfat_arch 2\n    architecture arm\n        cputype CPU_TYPE_ARM\n        cpusubtype CPU_SUBTYPE_ARM_ALL\n        offset 4096\n        size 13052\n        align 2^12 (4096)\n    architecture x86_64\n        cputype CPU_TYPE_X86_64\n        cpusubtype CPU_SUBTYPE_X86_64_ALL\n        offset 20480\n        size 9288\n        align 2^12 (4096)\n\n# To-do list\n\n* Fix paths when invoked (sysroot issue, maybe `--with-gxx-include-dir` will fix):\n  * Double search paths for C++: `$PREFIX/x86_64-apple-darwin11:$PREFIX/x86_64-apple-darwin11/$PREFIX/x86_64-apple-darwin11/include/c++/4.2.1/x86_64-apple-darwin11`\n* `ld` warnings about arch maybe\n* distcc for Objective-C and C++\n* distcc with MacPorts\n* Get latest cctools to build on Linux (DONE except for cbtlibs, efitools, gprof; these are probably unnecessary)\n* Clang\n* HOWTO generate `.app` directory, plist, Resources, etc (nib files and CoreData impossible without Mac?)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2FTatsh%2Fxchain","html_url":"https://awesome.ecosyste.ms/projects/github.com%2FTatsh%2Fxchain","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2FTatsh%2Fxchain/lists"}