Compile Ubots For Mac

Compile Ubots For Mac 5,0/5 6366 votes

I'm developing an SDL application in C, and some of my consumers have asked for a version that runs on Mac OS X. I am wondering if anyone knows of a good cross-compiler for Mac OS X targets, and maybe a Mac OS X emulator (maybe a virtual HDD for Virtual Box?) so that I can actually test it myself.The emulator is not 100% necessary though, as it's probably illegal and I can understand if nobody's willing. I'm using a PC (Windows XP) for my host machine, and I don't have the funding to go and purchase a Mac, sadly.

Recent OSes If you have access to the Mac App Store, you will find Xcode there as a free download. Older Mac OSes First you need to install a compiler. You should do this by installing Xcode (Requires OSX 10.3+) They should be on the CD / DVD when you got your OS. You can also download it from the Apple Developer Connection web site (free registration required), although it is over 3gb in size. This includes, amongst many other things, gcc (in the UNIX Dev Support package), which is the compiler that are used by most opensource projects, including OpenTTD. Note By default, this will also install the iOS SDK, which you probably won't need. You can uncheck it in the final installation settings or just disagree with its license to save several gigabytes of disk space.

Installing required libraries In order to build OpenTTD from source you need to have installed some which it depends upon. Depending upon your local installation you maybe also want to install a(nother) version control system like svn or mercurial in order to obtain the latest trunk source of OpenTTD. The minimum requirements for OpenTTD on mac are:. (it's part of the xzUtils) and optionally you want also:. For getting the openttd source, you will need:. OR:.

OR:. All of the above are installable using MacPorts. And are not required on mac. Comes with the OS so you don't need to install zlib. On OSX 10.6.1 it may also be necessary to install:. The easiest solution in order to obtain these libraries is to have either, or install them for you.

Alternatively, you may compile and install it from source for yourself. As another alternative you may visit the pages of those libraries and see whether they provide ready-compiled binary versions. At least libpng does so. Please refer to the for instructions on how to install Homebrew.

Using MacPorts is an open-source community initiative to design an easy-to-use system for compiling, installing, and upgrading either command-line, X11 or Aqua based open-source software on the Mac OS X operating system. As you will install libraries in your system directories, you'll need to do so as administrator via the command sudo - which will require you to enter the administrator password. Further information regarding sudo can be found on. Installing libraries with MacPorts Before installing any libraries, make sure you have access to the latest ports by updating the local repository: sudo port selfupdate. Note If you want to compile universal binaries to distribute, add ' +universal' at the end of each line. (Everything will need to be compiled first, so have patience.) Install libpng, liblzma' (provided by xz package)', pkgconfig (required for lzma detection), lzo2 and libiconv (the required zlib will be installed as dependency automatically). Sudo port install libpng sudo port install xz sudo port install pkgconfig sudo port install lzo2 sudo port install libiconv At least in order to compile a static binary (for redistribution), but also for your convenience, you might want these as well: sudo port install fontconfig sudo port install freetype sudo port install icu Getting the source For SVN: svn checkout This will install OpenTTD in a folder called trunk.

For HG: hg clone This will install OpenTTD in a folder. (The name varies with every version.) For GIT: git clone This will install OpenTTD in a folder. Note Some of these have iconv as a dependency.

That means you'll end up with two iconv versions on your hard disc: one supplied by apple in /usr/lib and one installed by macports in /opt/local/lib. Those two are not compatible and define different symbols and are different versions. You can temporarily deactivate macport's libiconv ('sudo port deactivate libiconv') as otherwise you might end up in some situations with a linker failure (see ). But this might render your version that relies on macport's version unusable Some further notes on MacPorts It might be worth to risk a look at the. If you need for one or another reason an old(er) library version, a short walk-through is.

Compile Ubots For Mac Mac

Note There are issues with some gcc versions which are supplied by macports. Use one of the apple-supplied compilers if fails with illegal compiler arguments. You can switch the compiler being used by installing gccselect package from macports, then using port select Fun fact: if you have installed yourself libraries and build them for other architectures than x8664 i386 ppc and ppc64 it might fail. Those four seem to be accepted, but macports might bitch, if others are found like ppc970. Using fink fink is basically the same as macports, but it may not be as well supported on newer OSX; this part of the documentation is also very outdated and has not been checked to work in several years. Note: fink is only used for installing svn and libpng. Even though it's recommended, it's not mandatory anymore.

Fink is a nice tool to install open-source software with simple commands. You can get fink here. Warning If you installed iconv-dev using fink, make sure that you have at least version 1.11 or filenames/file access (savegames, scenarios.) will not work correctly Before installing anything with fink, you should update fink (even if you just installed it).

This is because fink have some local files, where it looks up what version of the software it should install. If a new version is out, it's stupid to install an already outdated version. You can update fink with the command fink selfupdate Installing the svn client with fink Like you installed the libs, you can now install the svn client with the command: fink install svn-client If you have Mac OS X Leopard, you already have svn. In a terminal window type svn -version to check it. Installing libraries with fink You need some libraries to link to when compiling. You can use fink to install them with the following commands in terminal: fink install libpng3 libpng3 is needed for making screenshots in png.

Not really needed now, but there are future plans, so you might as well get it now. In each case, fink will tell that you that you need to install a lot of other stuff too, just hit enter (answering yes) and fink will download and install all of it. The docs telling about how to compile OpenTTD tells about zlib. Zlib is needed by OSX itself, so you already have it and there is no need to install it.

Compile Ubots For Mac Download

Installing manually If you want truly universal libraries it might be needed that you compile the libraries yourself, especially as newer versions (e.g. Snow Leopard) only support 'universal' binaries and libraries with the i386 and x8664 architectures while OpenTTD's universal binaries can also include ppc, ppc64 and ppc970. There's no build script to get the required universal libraries, but some steps which can be followed will get you there. get the source of the library. make sure it compiles with your usual settings w/o modification. build all different architectures. Warning The homebrew pages contains advice concerning how to handle directories usually only writable by root (requiring the admin password) and claims as to which of these “could safely be deleted”.

Compile ubots for mac download

It cannot be recommended to follow any of this advice if you are not 100% sure of what you do. You may corrupt your system without possibility to recover it. Getting the newest source from the svn server Now you need to make a 'working copy' of the source with your new svn client. To do this, use your terminal and write: svn checkout Foldername Foldername will be the folder you place the source into. If the folder doesn't exist, it will be created. Note you might have to type rehash after you installed svn to be able to do this. You can also choose as specific revision to download by adding -r##### after svn checkout.

Compiling the source For those just wanting a working copy for themselves, enter the following into a terminal window: cd /Downloads/directorycontainingdownloadedsources./configure make make bundle After the compiler is done doing all it's stuff, you should find yourself a working OpenTTD.app in the bundles folder! For more detailed instructions, and options, read on. Applying a patch If you want to use a patch/diff file then you have to apply it before using configure. This is done in the same way as on Linux so you should read this: Configure There is a configure script. This is used to figure out what your system is like and generate a makefile to compile a binary designed for your system. To run it, just write./configure and it will figure everything out on its own. If you have a special request for your compilation, then you need to give arguments to configure.

To see a full list of available settings, use the help system (./configure -help) Example: if you want to make a static build (the binary will contain the needed parts of the libraries so they do not have to be installed on the computer playing the game), you will have to type./configure -enable-static. This is recommended for Mac OS X builds. Multiple arguments can be added like./configure -enable-static -enable-dedicated. If you don't have svn, and are trying to compile a nightly, configure with./configure -revision=rXXXXX (where XXXXX is the revision number).

Configuring on Mavericks (and Yosemite). There is no liblzo2 in the package managers yet for Mavericks (as of 1 Nov 2013).

To configure without this optional library, use -without-liblzo2. Mac OS 10.9 has removed the method declarations related to palettes and 8-bit graphics from the CoreGraphics header files. You may either #if 0 those blocks out (in fullscreen.mm) or compile against the Mac OS 10.8 SDK. The version of Clang that ships with Xcode 5.0.1 uses a custom C library. To link OpenTTD, you must tell Clang to use the standard one.

All of the above can be achieved with this configure command:./configure -enable-static -without-liblzo2 -without-osx-sysroot CFLAGS='-isysroot /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.8.sdk' LDFLAGS='-stdlib=libstdc' Some users report linker failures with the configure command above. The following command may solve those failures:./configure -enable-static -without-liblzo2 -without-freetype -without-osx-sysroot CFLAGS='-isysroot /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.8.sdk' LDFLAGS='-stdlib=libstdc' October 2014 Update - applies to both Mavericks and Yosemite Apple released an Xcode update for Mavericks in October 2014, which appears to remove the 10.8 SDK. Following this update, OpenTTD compiles for at least some users with:./configure -without-freetype LDFLAGS='-stdlib=libstdc' This also works on Yosemite. If you can supply an appropriate version of Freetype, the -without-freetype flag might be unnecessary. Compiling When configure has made a makefile for you, all you need to do to compile is to type make.

The binary is then placed in the 'bin' subdirectory. If needed, make can accept arguments as well.

Commonly used arguments will be (all of them will start by compiling the game if needed):. make run: will start the game. make bundle: this will create a bundle inside the bundle directory (created if needed). This means that the game will be executable from finder and not only terminal.

make bundledmg: as above, but will create a dmg. make help: lists all 'targets' available (like make run and make bundle) Make also accepts standard make arguments. The most interesting is the -j option. By default GCC compiles one file at a time and it can only use one CPU/core to compile a single file. If you want to compile as fast as possible, you can tell it to compile more files at once with the -j option. Example: make bundle -j 4 will compile 4 files at once, making good use of a dualcore computer. Usually having two files compiling on each core is the fastest as one compile while the other one waits for read/write to the disk.

Compile Ubots For Mac Os

Note: the makefile dependencies has to be set up correctly for this to work. While they are for OpenTTD, don't assume this for other projects or nasty stuff can happen, like weird compilation errors. If it comes to frequent compiles, it might be worth to look for alternative compilers. Newer OSX bring also llvm-gcc binaries which offer a speed gain during compilation for the cost of a bit slower binaries.

Posted on