[WIN32] fixed some _WIN32PC leftovers.
[xbmc:xbmc.git] / README.osx
1 TOC
2 1. Introduction
3 2. Getting the source code
4 3. Install required libs
5   3.1. Install Xcode
6   3.2. Install MacPorts 1.7
7 4. How to compile and run
8         4.1 Using XCode
9         4.2 Using Command line
10 5. Packaging
11
12 -----------------------------------------------------------------------------
13 1. Introduction
14 -----------------------------------------------------------------------------
15
16 This is a platform port of XBMC for the Apple OSX operating system. Both 10.5
17 and 10.4 Intel development platforms are supported. The current build system
18 is Xcode 2.5 or Xcode 3.1.2 There are two ways to build XBMC for Mac.
19 1) command-line or
20 2) Xcode.
21
22 Generally, Xcode is the easiest as it presents the build system in a GUI environment.
23 The command-line build is still under development.
24
25 XBMC for Mac is composed of a main binary with numerous dynamic libraries and
26 codecs that support a multitude of music and video formats.
27
28 NOTE TO NEW OS X USERS: All lines that are prefixed with the '$' character are
29 commands that need to be typed into a Terminal window. Note that the '$'
30 character itself should NOT be typed as part of the command.
31
32
33 -----------------------------------------------------------------------------
34 2. Getting the source code
35 -----------------------------------------------------------------------------
36
37  $ cd $HOME
38  $ svn checkout https://xbmc.svn.sourceforge.net/svnroot/xbmc/trunk
39
40 -----------------------------------------------------------------------------
41 3.0 Install XCODE
42 -----------------------------------------------------------------------------
43 Install latest Xcode. You can download it from Apple's site after registration at
44 (http://developer.apple.com/tools/download). You also need to install the 10.4
45 sdk. If using Xcode 3.x, you MUST use Xcode 3.1.2 so update your existing version
46 if you are running a previous Xcode 3.x version. Xcode 3.x only runs on 10.5.
47
48
49 -----------------------------------------------------------------------------
50 3.1 Install MacPorts 1.7
51 -----------------------------------------------------------------------------
52
53 These build instructions depend on MacPorts 1.7. If you have another version
54 of MacPorts installed, it's best to remove it and install the 1.7 version.
55 To remove a previous install of MacPorts, enter the following from a terminal
56 windows:
57
58  $ sudo rm -rf \
59     /opt/local \
60     /etc/manpaths.d/macports \
61     /etc/paths.d/macports \
62     /Applications/DarwinPorts \
63     /Applications/MacPorts \
64     /Library/LaunchDaemons/org.macports.* \
65     /Library/Receipts/DarwinPorts*.pkg \
66     /Library/Receipts/MacPorts*.pkg \
67     /Library/StartupItems/DarwinPortsStartup \
68     /Library/Tcl/darwinports1.0 \
69     /Library/Tcl/macports1.0
70
71 Install MacPorts 1.7 (http://www.macports.org/). If you are going to run
72 under the same OSX version as you build under, just install the required port
73 packages without the extra flags. No modifications of MacPorts is required.
74 That means skip 1), 2), 3) and 4) below and don't add "+universal" or 
75 "macosx_deployment_target=10.4" when installing the ports. 
76
77 If you want to build a cross-compiled version that can run under
78 10.5/10.4/AppleTV, then change MacPorts's behavior to always build universal
79 against 10.4sdk using the following instructions.
80
81  1)
82    $ sudo nano /opt/local/etc/macports/macports.conf
83    a) change "universal_target  10.5" to "universal_target      10.4"
84
85    b) change "universal_sysroot /Developer/SDKs/MacOSX10.5.sdk" to
86      "universal_sysroot /Developer/SDKs/MacOSX10.4u.sdk"
87
88    c) change "universal_archs         ppc i386"
89      to reflect the arch you are building by removing the unused arch.
90
91  2) These are needed to build openssl (used by samba3 and mysql5) against 10.4sdk
92    $ sudo ln -s /Developer/SDKs/MacOSX10.4u.sdk/usr/lib/dylib1.o /Developer/SDKs/MacOSX10.4u.sdk/usr/lib/dylib1.10.5.o
93    $ sudo ln -s /Developer/SDKs/MacOSX10.4u.sdk/usr/lib/crt1.o /Developer/SDKs/MacOSX10.4u.sdk/usr/lib/crt1.10.5.o
94
95  3) samba3 does not have a +universal variant so we force it to build
96 libsmbclient in a compatible manner
97
98    $ sudo nano /opt/local/var/macports/sources/rsync.macports.org/release/ports/net/samba3/Portfile
99
100    add the following before "configure.cflags-append "-fno-common";
101
102    configure.ldflags-append "-mmacosx-version-min=10.4 -isysroot /Developer/SDKs/MacOSX10.4u.sdk -Wl,-syslibroot,/Developer/SDKs/MacOSX10.4u.sdk"
103
104    change "--enable-cups" to "--disable-cups".
105
106  4) mysql5 thinks we are cross-compiling and appends the cross-compile name to bin/my** apps.
107
108    $ sudo nano /opt/local/var/macports/sources/rsync.macports.org/release/ports/databases/mysql5/Portfile
109
110    scroll down to the post-destroot section and comment out the following
111    three lines like below;
112
113     # Symlink mysql binaries into bin directory, with ${major_version} appended to the name
114     #foreach f [glob -tails -directory ${destroot}${bindir} my*] {
115     #    ln -sf ${bindir}/${f} ${destroot}${prefix}/bin/${f}${major_version}
116     #}
117
118
119 Then install the following port packages (order is very important):
120
121  $ sudo port install pcre +universal
122  $ sudo port install expat +universal
123  $ sudo port install libiconv +universal
124  $ sudo port install gettext +universal
125  $ sudo port install libtool yasm cmake gmake pkgconfig
126
127  $ sudo port install lzo +universal
128  $ sudo port install lzo2 +universal
129  $ sudo port install bzip2 +universal
130  $ sudo port install fontconfig +universal
131  $ sudo port install boost +universal
132
133  $ sudo port install jpeg +universal
134  $ sudo port install tiff +universal
135  $ sudo port install libpng +universal
136  $ sudo port install libogg +universal
137  $ sudo port install libvorbis +universal
138  $ sudo port install libmad macosx_deployment_target=10.4
139  $ sudo port install fribidi +universal
140  $ sudo port install libmms +universal
141
142  $ sudo port install glew +universal
143  $ sudo port install libcdio +universal
144  $ sudo port install openssl +universal
145  $ sudo port install samba3 macosx_deployment_target=10.4
146  $ sudo port install mysql5 +universal
147  $ sudo port install sqlite3 +universal
148  $ sudo port install libsamplerate +universal
149
150  $ sudo port install libsdl +no_x11 +universal
151  $ sudo port install smpeg +universal
152  $ sudo port install libsdl_mixer +universal
153  $ sudo port install libsdl_image +universal
154
155 If you understand the following two lines, you can run it to automate
156 the installation of the ports in the above order:
157
158   sudo bash
159   cat README.osx | perl -ne 'print `port install $1` if /^ \$ sudo port install (.*)$/;'
160
161 Finally, fix the mysql package default install location with this symlink:
162
163  $ sudo ln -s /opt/local/include/mysql5/mysql/ /opt/local/include/mysql
164
165 -----------------------------------------------------------------------------
166 4. How to compile
167 -----------------------------------------------------------------------------
168 Both Xcode and Terminal compilation require that build environment be setup
169 first. This is a simple step and involves the following:
170
171  $ cd $HOME/XBMC
172  $ ./bootstrap
173  $ ./configure
174  $ make clean
175  $ make xcode_depends
176
177 The configure operation will setup the build environment for codecs and
178 internal libraries that are used by XBMC. This step is required for both Xcode
179 and command-line building. The "make clean" ensures that there areno stale
180 binaries from svn that might cause problems The last step will pre-build
181 the majority of the codecs and libs:
182
183
184 The configure operation will default to building "debug". To build "release"
185 codecs and libraries for Xcode, do the configure step with "--disable-debug"
186 but remember that Xcode will need to be also built "Release":
187
188  $ ./configure --disable-debug
189
190 -----------------------------------------------------------------------------
191 4.1 Using Xcode
192 -----------------------------------------------------------------------------
193 Start XCode and open the XBMC project (XBMC.xcodeproj) located in $HOME/XBMC.
194 For development, XBMC is run from the $HOME/XBMC directory and needs to have
195 the XBMC_HOME environment variable set to know where that directory is located.
196 To set XBMC_HOME environment variable:
197
198 Menu -> Project -> Edit Active Executable "XBMC", click "Arguments" tab and
199 add "XBMC_HOME" as an enviroment variable. Set the value to the path to the
200 XBMC root folder. For example, "/Users/bigdog/Documents/XBMC"
201
202 There are two build targets "XBMC" and "XBMC.app" with debug and release
203 settings. The "XBMC" target is used for rapid build and debug cycles while
204 the "XBMC.app" target is used to build a self contained OSX application.
205
206 Set the build target to "XBMC" or "XBMC.app", then build. The build process
207 will take a long time when builting the first time. You can see the progress
208 in "Build Results". There are a large number of static and dynamic libaries
209 that will need to be built. Once these are built, subsequent builds will be
210 faster.
211
212 After the build, you can ether run XBMC for Mac from Xcode or run it from
213 the command-line. If you run it from the command-line, make sure your set
214 the XBMC_HOME environment variable (export XBMC_HOME=$HOME/XBMC). Then, to
215 run the debug version:
216
217 $ ./build/Debug/XBMC
218
219 Or the release version:
220
221 $ ./build/Release/XBMC
222
223 You can also build via Xcode from the command-line using the following:
224
225 $ xcodebuild -configuration Release -target "XBMC.app" -project XBMC.xcodeproj
226
227 You can specify "Release" instead of "Debug" as a configuration.
228
229 -----------------------------------------------------------------------------
230 4.2 Using Terminal (command-line) (this is a work in progress and might fail)
231 -----------------------------------------------------------------------------
232 There are two methods, a) make/Xcode and b) make (which might fail as it's under
233 construction).
234
235 If you want to build a cross-compiled version that can run under 10.5/10.4/AppleTV, 
236 then you'll need to follow the additional steps listed in $HOME/XBMC/tools/XBMCTex/README.osx
237 before running xcodebuild from the command-line.
238
239  a)
240  $ cd $HOME/XBMC
241  $ export XBMC_HOME=`pwd`
242  $ make xcode_depends
243  $ xcodebuild -sdk macosx10.4 -project XBMC.xcodeproj -target XBMC.app -configuration Release build
244
245  b)
246  $ cd $HOME/XBMC
247  $ export XBMC_HOME=`pwd`
248  $ make xbmc
249  $ ./xbmc.bin
250
251 -----------------------------------------------------------------------------
252 5. Packaging
253 -----------------------------------------------------------------------------
254 This section describes how to package XBMC in a disk image for
255 distribution.
256
257   1. Create 2 directories "extras/user" and "extras/system" in the root of
258   the source tree.
259
260     1.1. "extras/user" - anything found in this directory will be
261     copied to the user's XBMC directory (~/Library/Application
262     Support/XBMC) on first run. Examples:
263
264         extras/user/scripts/XBMC Lyrics
265         extras/user/plugins/music/iTunes
266
267     1.2. "extras/system" - anything found in this directory will be
268     copied to the XBMC application bundle at build time
269     (XBMC.app/Contents/Resources/XBMC/). Examples:
270
271         extras/system/skin/MediaStream
272         extras/system/skin/My Skin
273
274
275   2. After performing step 1, build XBMC.app from XCode so that the
276   application bundle is correctly updated.
277
278   3. Go to tools/PackageMaker and run dmgmaker.pl as follows:
279
280       $ cd tools/PackageMaker
281       $ ./dmgmaker.pl ../../build/Release/XBMC.app
282
283   4. If dmgmaker.pl completed successfully, a disk image will be
284   present in the "dist" subdirectory:
285
286       $ ls dist
287       XBMC.dmg
288
289 Remember to unmount/eject XBMC.dmg before attempting to recreate it,
290 otherwise dmgmaker.pl will fail.