Changes between Initial Version and Version 1 of MacBuild


Ignore:
Timestamp:
Apr 26, 2007, 2:57:17 PM (17 years ago)
Author:
KSMarksPsych
Comment:

Added page

Legend:

Unmodified
Added
Removed
Modified
  • MacBuild

    v1 v1  
     1= Building BOINC Clients and Applications on Macintosh OS X =
     2       
     3This document applies to BOINC version 5.9.2 and later. It has instructions for building BOINC for Macintosh OS X, plus information for building science project applications to run under BOINC on Macintosh OS X.
     4
     5Note: the information in this document changes from time to time for different versions of BOINC. For any version of BOINC source files, the corresponding version of this document can be found in the source tree at:
     6
     7{{{
     8boinc/mac_build/HowToBuildBOINC_XCode.rtf
     9}}}
     10
     11Contents of this document:
     12
     13    * Important requirements for building BOINC software for the Mac.
     14    * Building BOINC libraries to link with project applications.
     15    * Building BOINC Manager, BOINC Client and BOINC libraries.
     16    * Building BOINC Manager Installer.
     17    * Debugging and BOINC security.
     18    * Building project applications.
     19    * Upgrading applications for Macs with Intel processors.
     20    * Adding a Finder icon to your application
     21
     22== Important requirements for building BOINC software for the Mac ==
     23
     24All BOINC software for Power PC Macs must be built using GCC 3.3 and MacOS10.3.9 SDK to assure backward compatibility with OS 10.3. All BOINC software for Intel Macs must be built using GCC 4.0 and MacOS10.4.u SDK to allow cross-compiling. This includes not only BOINC itself, but also the !WxWidgets, JPEG and cURL libraries, as well as all project applications.
     25
     26Beware of using the wrong compiler! Apple's release notes for GCC 4.0 say:
     27
     28    If your application must support versions of Mac OS X prior to 10.3.9, you must not use the GCC 4.0 compiler. Instead, build your project using the GCC 3.3 compiler.
     29
     30Elsewhere on Apple's web site is the warning:
     31
     32    Do not link C++ modules compiled with one of these compilers against modules compiled with the other. Even if the modules appear to link correctly, C++ ABI differences may still cause problems that will not manifest themselves until run time.
     33
     34Be sure to follow the directions in this document to ensure that these requirements are met.
     35
     36== Building BOINC libraries to link with project applications ==
     37
     38If you are building a project application to be run by BOINC, you only need to build the boinc libraries libboinc_api.a, ibboinc.a, and (if you want graphics) libboinc_graphics_api.a. There are two ways to do this:
     39
     40   1. Use the BOINC autoconf / automake scripts to build these libraries and the jpeg and curl libraries on which they depend. You must do all of this twice: once on a PowerPC Mac running OS 10.3.x (do NOT use OS 10.4), and once on an Intel Mac running OS 10.4.x.
     41
     42      (If you wish, you can combine separate Intel and PowerPC builds in a single Universal Binary mach-O file using the command-line utility lipo. For details on lipo, type 'man lipo' in Terminal; it is available on all Macs running OS10.4.x.)
     43   2. Use scripts setupForBOINC.sh and BuildMacBOINC.sh. You do this once on any Macintosh (PowerPC or Intel) running OS 10.4.x and with XCode 2.2 (or later) installed. This will produce Universal Binaries of all the libraries. These can then be linked with both PowerPC applications and Mac Intel applications.
     44
     45This document gives instructions only for the second method.
     46
     47After building the libraries as Universal Binaries using the second method, you probably still want to build your actual application separately on the two architectures: on a PowerPC Mac running OS 10.3.x (do NOT use OS 10.4), and also on an Intel Mac running OS 10.4.x. Or you can look at the scripts buildcurl.sh and buildjpeg.sh for examples of environment settings which can cross-compile on one Mac running OS 10.4.x.
     48
     49== Building BOINC Manager with embedded Core Client plus libraries libboinc.a and libboinc_graphics_api.a ==
     50
     51BOINC depends on three third-party libraries: wxMac-2.8.2, curl-7.16.1, and jpeg-6b. You can obtain these from the following URLs:
     52
     53wxMac-2.8.2 (needed only if you are building the BOINC Manager):
     54
     55http://www.wxwidgets.org
     56
     57http://prdownloads.sourceforge.net/wxwindows/wxMac-2.8.2.tar.gz
     58
     59curl-7.16.1:
     60
     61http://curl.haxx.se
     62
     63http://curl.haxx.se/download/curl-7.16.1.tar.gz
     64
     65jpeg-6b (needed only if you are building the BOINC libboinc_graphics_api.a library):
     66
     67http://www.ijg.org
     68
     69ftp://ftp.uu.net/graphics/jpeg/jpegsrc.v6b.tar.gz
     70
     71XCode 2.2 installs autoconf 2.59 and automake 1.63. To determine the version number, type 'autoconf --version' or 'automake --version' . Building wxMac-2.8.2 and curl-7.16.1 require autoconf 2.59 and automake 1.93 or later.
     72
     73Upgrades for autoconf and automake are available from www.gnu.org:
     74
     75http://ftp.gnu.org/gnu/autoconf/autoconf-2.59.tar.gz
     76
     77http://ftp.gnu.org/gnu/automake/automake-1.9.3.tar.gz
     78
     79XCode installed these utilities in the /usr/bin/ directory, but the upgrades by default will install in /usr/local/bin/. If you install there, you must also set your PATH environment variable to include that location. The scripts referenced below do this automatically.
     80
     81As stated above, all BOINC software for Power PC Macs must be built using GCC 3.3 and MacOS10.3.9 SDK to assure backward compatibility with OS 10.3. All BOINC software for Intel Macs must be built using GCC 4.0 and MacOS10.4.u SDK to allow cross-compiling.
     82
     83These are not done by either the XCode projects which come with wxMac-2.8.2, nor the !AutoMake scripts supplied with wxMac-2.8.2, curl-7.16.1, or jpeg-6b. So be sure to use our special scripts to build these packages.
     84
     85Building BOINC and the library packages on which it depends requires OS 10.4.4 and XCode 2.2 (or greater). It may be possible to use XCode 2.1 and/or versions of OS X earlier than 10.4.4, but this has not been tested by the authors.
     86
     87   1. Create a parent directory within which to work. In this description , we will call it BOINC_dev, but you can name it anything you wish.
     88   2. Put the following 3 directories inside the BOINC_dev folder (omit any you don't need):
     89
     90{{{
     91      curl-7.16.1
     92      jpeg-6b
     93      wxMac-2.8.2
     94}}}
     95
     96      Important: do not change the names of any of these 3 directories.
     97   3. Get the BOINC source tree from SVN, and put it in the same BOINC_dev folder. To do this, type the following in Terminal:
     98
     99{{{
     100      cd {path}/BOINC_dev/
     101      svn co http://boinc.berkeley.edu/svn/trunk/boinc
     102}}}
     103
     104      (You may change the name of the boinc directory to anything you wish.)
     105
     106      The command above retrieves the source code from the HEAD or development branch of the SVN repository. For more information on getting the BOINC source code, see [SourceCode here].
     107   4. Run the script to build the curl, jpeg and wxMac libraries as follows:
     108
     109{{{
     110      cd {path}/BOINC_dev/boinc/mac_build/
     111      source setupForBoinc.sh -clean
     112}}}
     113
     114      If you don't wish to force a full rebuild of everything, omit the -clean argument.
     115
     116      Note: this script builds curl first, followed by jpeg and finally wxMac. If you haven't downloaded wxMac because you aren't building the BOINC Manager, the script will build curl and jpeg. Likewise, if you only downloaded curl because you need neither graphics nor the BOINC Manager, the script will build curl before quitting.
     117   5. Build BOINC as follows:
     118
     119{{{
     120      cd {path}/BOINC_dev/boinc/mac_build/
     121      source BuildMacBOINC.sh
     122}}}
     123
     124      The complete syntax for this script is
     125
     126{{{
     127      source BuildMacBOINC.sh [-dev] [-noclean] [-all] [-lib] [-client]
     128}}}
     129
     130      The options for BuildMacBOINC.sh are:
     131
     132      -dev
     133          build the development (debug) version (native architecture only). default is deployment (release) version (universal binaries: ppc and i386).
     134      -noclean
     135          don't do a 'clean' of each target before building. default is to clean all first.
     136
     137      The following arguments determine which targets to build
     138
     139      -all
     140          build all targets (i.e. target 'Build_All' -- this is the default)
     141      -lib
     142          build the three libraries: libboinc_api.a, libboinc_graphics_api.a, libboinc.a
     143      -client
     144          build two targets: boinc client and command-line utility boinc_cmd (also builds libboinc.a, since boinc_cmd requires it.)
     145
     146      Both -lib and -client may be specified to build five targets (no BOINC Manager.)
     147
     148Note: You may find three XCode projects in the BOINC_dev/boinc/mac_build/ directory:
     149
     150    * boinc.pbproj is obsolete and should no longer be used.
     151    * wxMac-BOINC.xcodeproj was needed for building older versions of the wxMac library in conjunction with the older versions of the setupForBoinc.sh or buildWxMac.sh scripts. It is not used for BOINC 5.9.2 or later.
     152    * boinc.xcodeproj builds BOINC. It can be used either with the BuildMacBOINC.sh script or as a stand-alone project. It has two extra build configurations, i386-Deployment and ppc-Deployment, which can be used for testing only to build for just one architecture. The Development build configuration builds only the native architecture and is used for debugging. The Deployment build configuration builds a universal binary and is suitable for release builds.
     153
     154== Building BOINC Manager Installer ==
     155
     156To build the Installer for the BOINC Manager, if the BOINC version number is x.y.z, you must be logged in as an administrator. Type the following in Terminal, then enter your administrator password when prompted by the script:
     157
     158{{{
     159cd {path}/BOINC_dev/boinc/
     160source {path}/BOINC_dev/boinc/mac_installer/release_boinc.sh x y z
     161}}}
     162
     163Substitute the 3 parts of the BOINC version number for x y and z in the above. For example, to build the installer for BOINC version 5.5.4, the command would be
     164
     165{{{
     166source {path}/BOINC_dev/boinc/mac_installer/release_boinc.sh 5 5 4
     167}}}
     168
     169This will create a directory 'BOINC_Installer/New_Release_5_5_4' in the BOINC_dev directory.
     170
     171To build version 5.5.4 of the Grid Republic flavor of BOINC, you would type:
     172
     173{{{
     174cd {path}/BOINC_dev/boinc/
     175source {path}/BOINC_dev/boinc/mac_installer/release_GridRepublic.sh 5 5 4
     176}}}
     177
     178This will create a directory 'BOINC_Installer/New_Release_GR_5_5_4' in the BOINC_dev directory.
     179
     180== Debugging and BOINC security ==
     181
     182Version 5.5.4 of BOINC Manager for the Macintosh introduced new, stricter security measures. For details, please see the file boinc/mac_installer/Readme.rtf and http://boinc.berkeley.edu/sandbox.php.
     183
     184The GDB debugger can't attach to applications which are running as a diferent user or group so it ignores the S_ISUID and S_ISGID permisison bits when launching an application. To work around this, BOINC does not use the special boinc_master or boinc_project users or groups when run from XCode.
     185
     186The Development build only of the BOINC Manager allows you to change the ownership and permission settings of the BOINC Data and executables by entering an administrator user name and password. This also streamlines the development cycle by avoiding the need to run the installer for every change.
     187
     188To restore the standard ownerships and permissions, run the installer.
     189
     190== Building project applications ==
     191
     192=== Upgrading applications for Macs with Intel processors ===
     193
     194Apple began shipping Macs with Intel processors on January 10, and Apple expects to convert all its lines of computers to Intel by the end of 2006.
     195
     196All future releases of BOINC will include 'universal binary' builds for the Macintosh of BOINC Manager, command-line BOINC client and the boinc_cmd command-line tool. (Universal binaries contain both PowerPC and Intel executables in one file; the Macintosh OS automatically selects the appropriate one for that computer.)
     197
     198The advantage of 'universal binaries' is that you only need to have one copy of the application, and it will run on either PowerPC or Intel Macs, so users don't need to choose between two options. Since BOINC participants manually download BOINC from the web site, we will be providing BOINC in 'universal binary' form.
     199
     200However, participants do not manually download project applications; this is done automatically by BOINC. So there would be no advantage to combining the Intel and PowerPC versions in a single 'universal binary' file, but doing so would double the size of the download.
     201
     202So BOINC treats Intel Macs as a new, separate platform. BOINC previously directly supported four platforms: PowerPC Macs (powerpc-apple-darwin), Intel Linux (i686-pc-linux-gnu), Windows (windows-intelx86) and Solaris (sparc-sun-solaris2.7).
     203
     204We have now added a fifth platform for Intel Macs (i686-apple-darwin).
     205
     206As a temporary measure, projects can set their servers to deliver a copy of their current PowerPC application (renamed for the new platform) under the new i686-apple-darwin platform. The OS will run it in compatibility mode, emulating a PowerPC. (Apple calls this compatibility mode Rosetta, which of course has nothing to do with the Rosetta BOINC project.)
     207
     208If you do this, be sure to give your native Intel application a higher version number when you do release it, so that clients will download it.
     209
     210However, running a PowerPC application in compatibility mode has two significant drawbacks:
     211
     212    * Screensaver graphics do not work.
     213    * Since it is running under emulation, your application will run at reduced efficiency. But the benchmarks are based on running native Intel applications. This may cause scheduler problems, such as uncompleted deadlines and inadequate credit for participants.
     214
     215So it is important to make a native Intel application available as soon as possible.
     216
     217It is very easy to add a new platform to your server with the xadd utility. For directions on how to do this, see these web pages:
     218http://boinc.berkeley.edu/platform.php
     219http://boinc.berkeley.edu/tool_xadd.php
     220
     221BOINC supports all PowerPC Macs running OS 10.3.0 or later, and all Intel Macs. (The Intel Macs themselves require OS 10.4.4 or later.)
     222
     223The easiest way to build your application for these two platforms is to build each one on its native platform. In other words, do your powerpc-apple-darwin build on a PowerPC Mac running OS 10.3.9, and your i686-apple-darwin build on an Intel Mac.
     224
     225But Apple provides the tools to allow you to cross-compile your application on any Mac (PowerPC or Intel) running OS 10.4 or later. Here is how:
     226
     227All BOINC software for Power PC Macs must be built using GCC 3.3 and MacOS10.3.9 SDK to assure backward compatibility with OS 10.3. If building a PowerPC application on an Intel Mac, you must also specify '-arch ppc' in the compiler and linker flags.
     228
     229All BOINC software for Intel Macs must be built using GCC 4.0 and MacOS10.4.u SDK to allow cross-compiling. If building an Intel application on a PowerPC Mac, you must also specify '-arch i386' in the compiler and linker flags.
     230
     231You can find examples of how to do this for two different kinds of configure / make scripts in the HEAD branch of the BOINC SVN tree at boinc/mac_build/buildcurl.sh and boinc/mac_build/buildjpeg.sh.
     232
     233The lipo utility is used at the end of each of these scripts to combine the two binaries into a single 'Universal Binary' file. You won't need to do that with you project applications, since you will be distributing them separately under the two platforms. But if you prefer, you can create a Universal Binary and distribute the same file for both i686-apple-darwin and powerpc-apple-darwin platforms.
     234
     235Note that the BOINC libraries (and any third-party libraries) which you link with your applications must be built with the same configuration as the application itself. Follow the instructions earlier in this document to build the needed libraries.
     236
     237Additional information on building Unix applications universal can be found here:
     238http://developer.apple.com/documentation/Porting/Conceptual/PortingUnix/compiling/chapter_4_section_3.html
     239
     240and here:
     241http://developer.apple.com/documentation/MacOSX/Conceptual/universal_binary/universal_binary_compiling/chapter_2_section_7.html
     242
     243For information on making your code work with GCC 4:
     244http://developer.apple.com/releasenotes/DeveloperTools/GCC40PortingReleaseNotes/index.html
     245
     246=== Adding a Finder icon to your application ===
     247
     248There is an optional api setMacIcon() in the libboinc_api.a library. This allows science applications to display an application icon in the Dock) and in the Finder. (The icon does not appear in the Dock until the application displays graphics.) To implement this, do the following:
     249
     250    * Use '/Developer/Applications/utilities/Icon Composer.app' to create a xxx.icns file. (Use any name you wish instead of xxx.)
     251    * Convert the xxx.icns file to an app_icon.h file as follows: in Terminal, run:
     252
     253{{{
     254      {path}/MakeAppIcon_h {source_file_path}/xxx.icns {dest_file_path}/app_icon.h
     255}}}
     256
     257      (The !MakeAppIcon_h command-line utility is built by the Mac boinc XCode project in the 'boinc/mac_build/build/' directory.) Add the app_icon.h file to your science application's project.
     258    * In the science application's main(), add
     259
     260{{{
     261      #include "app_icon.h"
     262}}}
     263
     264      and call:
     265
     266{{{
     267      setMacIcon(argv[0], MacAppIconData, sizeof(MacAppIconData));
     268}}}
     269    * The science application must link with Carbon.framework to use setMacIcon().