Ticket #3600: UserBuildConfig.ReadMe.diff

File UserBuildConfig.ReadMe.diff, 14.1 KB (added by sarmale, 15 years ago)
  • UserBuildConfig.ReadMe

     
     1# UserBuildConfig ReadMe
     2# ----------------------
     3
     4# UserBuildConfig can be used to customize the build according to your needs.
     5# If existent it is included by the build system, but it is ignored by svn.
     6# This file documents a few examples, what can be done. Don't just rename it
     7# to UserBuildConfig -- you don't want all the things to happen, that are
     8# specified here. Rather create an empty UserBuildConfig and copy the lines
     9# you really want, or start out with UserBuildConfig.sample.
     10# Of course, noone reads ReadMe files, so they will just get an error here
     11# when copying it and jamming:
     12Exit You must NOT copy UserBuildConfig.ReadMe directly but use parts of it! ;
     13
     14
     15# Adjusting Build Variables
     16
     17# The following variables can be configured per subdirectory (or subtree) or
     18# even per object file:
     19#
     20#   CCFLAGS C++FLAGS DEBUG DEFINES HDRS LINKFLAGS OPTIM OPTIMIZE SYSHDRS
     21#   WARNINGS
     22#   HOST_WARNING_CCFLAGS HOST_WARNING_C++FLAGS
     23#   TARGET_WARNING_CCFLAGS TARGET_WARNING_C++FLAGS
     24#   PLATFORM SUPPORTED_PLATFORMS
     25#
     26# The following examples would work analogously for any of these variables.
     27
     28# Turn off warnings in directory src/system/kernel. As fourth (scope) parameter
     29# "local" is specified, which means, that this setting applies only to the
     30# given directory, but not any of its subdirectories.
     31SetConfigVar WARNINGS : HAIKU_TOP src system kernel : 0 : local ;
     32
     33# Set the debug level for directory src/system/boot/loader and recursively all
     34# of its subdirectories (scope is "global") to 1. All affected generated files
     35# will be put into another subtree of the "generated" directory, which allows
     36# for fast switching between normal and debug builds.
     37SetConfigVar DEBUG : HAIKU_TOP src system boot loader : 1 : global ;
     38
     39# Add "RUN_WITHOUT_REGISTRAR" to the DEFINES for the directory src/kits and
     40# all of its subdirectories.
     41AppendToConfigVar DEFINES : HAIKU_TOP src kits : RUN_WITHOUT_REGISTRAR
     42    : global ;
     43
     44# Set the debug level for file src/bin/gdb/gdb/haiku-nat.c (note, that
     45# the object file must be specified) to 1. It is worth mentioning, that the
     46# executable the object file is linked into (gdb), will still be placed in
     47# generated/objects/.../release/... Only when setting DEBUG for the executable,
     48# too, it will be placed in .../debug_1/.... Apart from that, the DEBUG variable
     49# has no effect on executables or other shared objects.
     50DEBUG on <src!bin!gdb!gdb!>haiku-nat.o = 1 ;
     51
     52
     53# Haiku Image Related Modifications
     54
     55# Create a 100 MB image at /tmp/walter.image.
     56HAIKU_IMAGE_NAME    = walter.image ;
     57HAIKU_IMAGE_DIR     = /tmp ;
     58HAIKU_IMAGE_SIZE    = 100 ;
     59
     60# Set image volume label to "Walter". Default label is "Haiku".
     61HAIKU_IMAGE_LABEL   = Walter ;
     62
     63# Name the VMWare image walter.vmdk (in directory $(HAIKU_IMAGE_DIR)).
     64HAIKU_VMWARE_IMAGE_NAME = walter.vmdk ;
     65
     66# Install Haiku in directory /Haiku.
     67HAIKU_INSTALL_DIR = /Haiku ;
     68
     69# If the image does already exist it won't be zeroed out. It will nevertheless
     70# freshly be initialized with BFS. Useful when installing Haiku on a partition.
     71HAIKU_DONT_CLEAR_IMAGE = 1 ;
     72
     73
     74# Affects the haiku-image, haiku-vmware-image, and install-haiku targets. Only
     75# targets on which the HAIKU_INCLUDE_IN_IMAGE variable has been set will be
     76# updated in the image file/installation directory.
     77# The update-image, update-vmware-image, and update-install targets always invoke
     78# this rule, so one likely doesn't ever need to do it manually.
     79SetUpdateHaikuImageOnly 1 ;
     80
     81# libbe.so and the kernel will be updated on image updates. Note that this
     82# generally doesn't work for pseudo targets (it does where special support
     83# has been added, like for "kernel").
     84HAIKU_INCLUDE_IN_IMAGE on libbe.so kernel = 1 ;
     85
     86# Add "crashing_app" to the beos/bin directory of the Haiku image/installation.
     87# Note, that this also makes the image depend on the target, i.e. it is
     88# automatically updated when the image is built.
     89AddFilesToHaikuImage beos bin : crashing_app ;
     90
     91# Make a symlink to home/config/bin/crash.
     92AddSymlinkToHaikuImage home config bin : /beos/bin/crashing_app : crash ;
     93
     94# Add timezone and keymap settings.
     95AddSymlinkToHaikuImage home config settings
     96    : /boot/beos/etc/timezones/Europe/Paris : timezone ;
     97AddFilesToHaikuImage home config settings : <keymap>US-International : Key_map ;
     98
     99# Adds the source directories src/kits/storage and src/tests/servers/debug
     100# (recursively) to the image (as /boot/home/HaikuSources/src/kits/storage
     101# and /boot/home/HaikuSources/src/tests/servers/debug respectively).
     102# Note that the second directory will also be copied, if the image will only
     103# be updated; the first one won't in that case.
     104AddSourceDirectoryToHaikuImage src/kits/storage ;
     105AddSourceDirectoryToHaikuImage src/tests/servers/debug : 1 ;
     106
     107# Copy the jam sources (assuming they are located ../buildtools/jam relatively
     108# to your Haiku sources) to the image as /boot/home/Desktop/jam-src, excluding
     109# any file or directory named ".svn" and any source path that matches the
     110# pattern "*/jam/./bin.*". Note that the "*" character needs to be escaped with
     111# two backslashes (one because it goes through a shell and one to quote the
     112# first one in jam), and that the build system always appends "/." to the source
     113# path (hence this pattern). Just as AddSourceDirectoryToHaikuImage this rule
     114# can also take another optional parameter indicating whether the directory shall
     115# also be copied in update mode.
     116CopyDirectoryToHaikuImage home Desktop
     117    : $(HAIKU_TOP)/../buildtools/jam
     118    : "jam-src" : -x .svn -X \\*/jam/./bin.\\* ;
     119
     120# Unzips the given zip archive onto the image under /boot/develop/tools.
     121UnzipArchiveToHaikuImage develop tools
     122    : /home/bonefish/develop/haiku/misc/gcc-2.95.3-beos-070218/gcc-2.95.3_binutils-2.17_rel-070218.zip ;
     123
     124# Add the optional package WonderBrush to the image. The package is downloaded
     125# via wget (i.e. wget must be installed).
     126AddOptionalHaikuImagePackages WonderBrush ;
     127
     128# Don't add the libraries built with the alternative gcc version.
     129# If the alternative gcc generated directory has been specified via the
     130# configure option --alternative-gcc-output-dir, the libraries for the
     131# alternative gcc version are added by default. Unsetting this variable disables
     132# building and adding the libraries. Ignored, if --alternative-gcc-output-dir
     133# was not specified.
     134HAIKU_ADD_ALTERNATIVE_GCC_LIBS = ;
     135
     136# Specify scripts that shall be run when populating the image/installation
     137# directory. The "early" script is run before anything has been copied onto
     138# the image/into the installation directory. The "late" script is run after
     139# everything has been copied, but before the MIME database is installed.
     140HAIKU_IMAGE_EARLY_USER_SCRIPTS  = $(HAIKU_TOP)/../early-image-script.sh ;
     141HAIKU_IMAGE_LATE_USER_SCRIPTS   = $(HAIKU_TOP)/../late-image-script.sh ;
     142
     143# Set name and real name of the root user. Defaults to "baron" and "Root User".
     144HAIKU_ROOT_USER_NAME = bond  ;
     145HAIKU_ROOT_USER_REAL_NAME = "James Bond" ;
     146
     147# Set host name to "mybox". By default the installation doesn't have a host
     148# name.
     149HAIKU_IMAGE_HOST_NAME = mybox ;
     150
     151# Add user "walter" with user ID 1000 and group ID 100 (note, that a group with
     152# that ID should exist -- 100 already exists and is the "users" group), home
     153# directory "/boot/home", shell "/bin/bash", and real name "Just Walter" to the
     154# image.
     155AddUserToHaikuImage walter : 1000 : 100 : /boot/home : /bin/bash
     156    : "Just Walter" ;
     157
     158# Add group "party" with group ID 101 and members "baron" and "walter" to the
     159# image.
     160AddGroupToHaikuImage party : 101 : baron walter ;
     161
     162
     163# Build Profiles
     164
     165# A build profile is a named set of settings for building a Haiku image or
     166# installation. The following lines define five different build profiles:
     167# disk    - Installation on device /dev/sda57. A lengthy list of optional
     168#           packages will be included. Profile type "disk" implies
     169#           "HAIKU_DONT_CLEAR_IMAGE = 1".
     170# qemu    - A plain 200 MB disk image (type "image") named "haiku-qemu.image".
     171#           Since only the image name is given, the default location will be
     172#           chosen for the image, unless HAIKU_IMAGE_DIR has been set
     173#           beforehand.
     174# vmware  - A 400 MB VMware image (type "vmware-image"). It will not be zeroed,
     175#           if not necessary. The optional packages Development and Pe will be
     176#           installed. No image name or path is given, so the defaults
     177#            ("haiku.vmdk" in the generated directory) will be used, unless the
     178#           respective variables are set.
     179# crash   - Similar to the vmware profile, but created at a specific location
     180#           and 1 GB size. Furthermore a "crash-tests" directory will be copied
     181#           to the image.
     182# install - Installation in directory "/Haiku2" (type "install").
     183
     184DefineBuildProfile disk : disk : "/dev/sda57" ;
     185DefineBuildProfile qemu : image : "haiku-qemu.image" ;
     186DefineBuildProfile vmware : vmware-image ;
     187DefineBuildProfile crash : vmware-image
     188    : "/home/foobar/vmware/Virtual Machines/CrashOMatic/CrashOMatic.vmdk" ;
     189DefineBuildProfile install : install : /Haiku2 ;
     190
     191switch $(HAIKU_BUILD_PROFILE) {
     192    case "disk" : {
     193        AddOptionalHaikuImagePackages Beam BeBook BeHappy BePDF Bluetooth CVS
     194            Development Firefox LibLayout Links NetSurf OpenSound OpenSSH OpenSSL
     195            P7zip Pe Perl Subversion UserlandFS Vision VLC Welcome WonderBrush
     196            Yasm ;
     197    }
     198
     199    case "qemu" : {
     200        HAIKU_IMAGE_SIZE = 200 ;
     201    }
     202
     203    case "vmware" : {
     204        HAIKU_IMAGE_SIZE = 400 ;
     205        HAIKU_DONT_CLEAR_IMAGE = 1 ;
     206        AddOptionalHaikuImagePackages Development Pe ;
     207    }
     208
     209    case "crash" : {
     210        HAIKU_IMAGE_SIZE = 1024 ;
     211        HAIKU_DONT_CLEAR_IMAGE = 1 ;
     212        AddOptionalHaikuImagePackages Development Pe ;
     213        CopyDirectoryToHaikuImage home Desktop : $(HAIKU_TOP)/../crash-tests ;
     214    }
     215}
     216
     217# By specifying the build profile name as first (non-option) parameter on the
     218# jam command line prefixed by an "@" character, the profile will be selected.
     219# The second parameter specifies the action to be performed, further optional
     220# parameters may follow. Jam command line examples:
     221#
     222# jam -q @disk build
     223#   -> Equivalent to running "jam -q haiku-image" with the settings for the
     224#      "disk" profile. "build" is the default action, so it could even be
     225#      omitted.
     226# jam -q @vmware update kernel
     227#   -> Equivalent to running "jam -q update-vmware-image kernel" with the
     228#      settings for the "vmware" profile.
     229# jam -q @crash mount
     230#   -> Enters the bfs_shell mounting the image specified by the "crash" profile.
     231#
     232# Note, that the build system will automatically define the build profiles
     233# "image", "vmware-image", and "install", unless they are already defined in
     234# the UserBuildConfig. They correspond to the respective build profile types
     235# and use the values of the variables HAIKU[_VMWARE]_IMAGE_NAME,
     236# HAIKU_IMAGE_DIR, HAIKU_INSTALL_DIR, respectively their default values.
     237# "jam -q @image" will therefore be equivalent to "jam -q haiku-image".
     238
     239
     240# Creating Sourceable Shell Scripts
     241
     242# If you use shell scripts (e.g. for testing) that need to access targets or
     243# build system properties, you can tell the build system to generate a
     244# variables defining shell script you can source from your shell script.
     245
     246# General setup for the shell script to generate. Name is test.inc, located
     247# in the output directory.
     248MakeLocate test.inc : $(HAIKU_OUTPUT_DIR) ;
     249Always test.inc ;
     250
     251# Define variable "outputDir" in the shell script, with the value of
     252# HAIKU_OUTPUT_DIR.
     253AddVariableToScript test.inc : outputDir : $(HAIKU_OUTPUT_DIR) ;
     254
     255# Define variables "bfsShell" and "fsShellCommand" referring to the
     256# generated bfs_shell and fs_shell_command respectively.
     257AddTargetVariableToScript test.inc : bfs_shell : bfsShell ;
     258AddTargetVariableToScript test.inc : fs_shell_command : fsShellCommand ;
     259
     260# If no variable name is given, the name (without grist) of the target is
     261# used, i.e. a variable "rc" referring to the rc command built for the host
     262# platform is defined in the script.
     263AddTargetVariableToScript test.inc : <build>rc ;
     264
     265
     266# Optimizing Jamfile Parsing Times / Third Party Inclusion
     267
     268# Setting this variable will prevent the root Jamfile to include the Jamfile
     269# in the src directory. Instead only the directories required for building the
     270# build tools are included. Only useful in combination with DeferredSubInclude.
     271HAIKU_DONT_INCLUDE_SRC = 1 ;
     272
     273# Schedule the given subdirectory for inclusion at the end of the root
     274# Jamfile (directly using SubInclude here is not possible). Using this
     275# feature together with HAIKU_DONT_INCLUDE_SRC allows developers working
     276# only on a subproject to reduce Jamfile parsing times considerably.
     277DeferredSubInclude HAIKU_TOP src tests add-ons kernel file_systems
     278    userlandfs ;
     279
     280# Schedule src/3rdparty/myproject/Jamfile.haiku for later inclusion. The "local"
     281# parameter specifies that the alternative Jamfile name shall not be used for
     282# any subdirectory of the given directory (i.e. "Jamfile" will be used as
     283# usual). Omitting this parameter or specifying "global" will cause the given
     284# name to be used recursively.
     285DeferredSubInclude HAIKU_TOP src 3rdparty myproject : Jamfile.haiku : local ;
     286
     287# The following rules can be overriden to do things at different points of
     288# the build system execution by jam (note: we're talking about execution of
     289# Jamfiles, not the build actions they define):
     290#
     291# UserBuildConfigRulePostBuildTargets:
     292#   Executed after the complete Jamfile tree has been processed. I.e. all build
     293#   targets are known and located at this point.
     294# UserBuildConfigRulePreImage:
     295#   Executed after the contents of the Haiku image has been defined, but before
     296#   the scripts generating the images are defined.
     297# UserBuildConfigRulePostImage:
     298#   Executed after the Haiku image build target has been fully defined.
     299#
     300# E.g. making use of the fact that all targets have already been located when
     301# UserBuildConfigRulePostBuildTargets is called, we can print the directory
     302# where the StyledEdit executable will be generated.
     303rule UserBuildConfigRulePostBuildTargets
     304{
     305    Echo "StyledEdit will appear here:" [ on StyledEdit return $(LOCATE) ] ;
     306}