| 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: |
|---|
| 12 |
Exit You must NOT copy UserBuildConfig.ReadMe directly but use parts of it! ; |
|---|
| 13 |
|
|---|
| 14 |
|
|---|
| 15 |
# Adding timezone and keymap settings |
|---|
| 16 |
AddSymlinkToHaikuImage home config settings |
|---|
| 17 |
: /boot/beos/etc/timezones/Europe/Paris : timezone ; |
|---|
| 18 |
|
|---|
| 19 |
AddFilesToHaikuImage home config settings : <keymap>US-International |
|---|
| 20 |
: Key_map ; |
|---|
| 21 |
|
|---|
| 22 |
|
|---|
| 23 |
# Adjusting Build Variables |
|---|
| 24 |
|
|---|
| 25 |
# The following variables can be configured per subdirectory (or subtree) or |
|---|
| 26 |
# even per object file: |
|---|
| 27 |
# |
|---|
| 28 |
# CCFLAGS C++FLAGS DEBUG DEFINES HDRS LINKFLAGS OPTIM OPTIMIZE SYSHDRS |
|---|
| 29 |
# WARNINGS |
|---|
| 30 |
# HOST_WARNING_CCFLAGS HOST_WARNING_C++FLAGS |
|---|
| 31 |
# TARGET_WARNING_CCFLAGS TARGET_WARNING_C++FLAGS |
|---|
| 32 |
# PLATFORM SUPPORTED_PLATFORMS |
|---|
| 33 |
# |
|---|
| 34 |
# The following examples would work analogously for any of these variables. |
|---|
| 35 |
|
|---|
| 36 |
# Turn off warnings in directory src/system/kernel. As fourth (scope) parameter |
|---|
| 37 |
# "local" is specified, which means, that this setting applies only to the |
|---|
| 38 |
# given directory, but not any of its subdirectories. |
|---|
| 39 |
SetConfigVar WARNINGS : HAIKU_TOP src system kernel : 0 : local ; |
|---|
| 40 |
|
|---|
| 41 |
# Set the debug level for directory src/system/boot/loader and recursively all |
|---|
| 42 |
# of its subdirectories (scope is "global") to 1. All affected generated files |
|---|
| 43 |
# will be put into another subtree of the "generated" directory, which allows |
|---|
| 44 |
# for fast switching between normal and debug builds. |
|---|
| 45 |
SetConfigVar DEBUG : HAIKU_TOP src system boot loader : 1 : global ; |
|---|
| 46 |
|
|---|
| 47 |
# Add "RUN_WITHOUT_REGISTRAR" to the DEFINES for the directory src/kits and |
|---|
| 48 |
# all of its subdirectories. |
|---|
| 49 |
AppendToConfigVar DEFINES : HAIKU_TOP src kits : RUN_WITHOUT_REGISTRAR |
|---|
| 50 |
: global ; |
|---|
| 51 |
|
|---|
| 52 |
# Set the debug level for file src/bin/gdb/gdb/haiku-nat.c (note, that |
|---|
| 53 |
# the object file must be specified) to 1. It is worth mentioning, that the |
|---|
| 54 |
# executable the object file is linked into (gdb), will still be placed in |
|---|
| 55 |
# generated/objects/.../release/... Only when setting DEBUG for the executable, |
|---|
| 56 |
# too, it will be placed in .../debug_1/.... Apart from that, the DEBUG variable |
|---|
| 57 |
# has no effect on executables or other shared objects. |
|---|
| 58 |
DEBUG on <src!bin!gdb!gdb!>haiku-nat.o = 1 ; |
|---|
| 59 |
|
|---|
| 60 |
|
|---|
| 61 |
# Haiku Image Related Modifications |
|---|
| 62 |
|
|---|
| 63 |
# Create a 100 MB image at /tmp/walter.image. |
|---|
| 64 |
HAIKU_IMAGE_NAME = walter.image ; |
|---|
| 65 |
HAIKU_IMAGE_DIR = /tmp ; |
|---|
| 66 |
HAIKU_IMAGE_SIZE = 100 ; |
|---|
| 67 |
|
|---|
| 68 |
# Name the VMWare image walter.vmdk (in directory $(HAIKU_IMAGE_DIR)). |
|---|
| 69 |
HAIKU_VMWARE_IMAGE_NAME = walter.vmdk ; |
|---|
| 70 |
|
|---|
| 71 |
# Install Haiku in directory /Haiku. |
|---|
| 72 |
HAIKU_INSTALL_DIR = /Haiku ; |
|---|
| 73 |
|
|---|
| 74 |
# If the image does already exist it won't be zeroed out. It will nevertheless |
|---|
| 75 |
# freshly be initialized with BFS. Useful when installing Haiku on a partition. |
|---|
| 76 |
HAIKU_DONT_CLEAR_IMAGE = 1 ; |
|---|
| 77 |
|
|---|
| 78 |
|
|---|
| 79 |
# Affects the haiku-image, haiku-vmware-image, and install-haiku targets. Only |
|---|
| 80 |
# targets on which the HAIKU_INCLUDE_IN_IMAGE variable has been set will be |
|---|
| 81 |
# updated in the image file/installation directory. |
|---|
| 82 |
# The update-image, update-vmware-image, and update-install targets always invoke |
|---|
| 83 |
# this rule, so one likely doesn't ever need to do it manually. |
|---|
| 84 |
SetUpdateHaikuImageOnly 1 ; |
|---|
| 85 |
|
|---|
| 86 |
# libbe.so and the kernel will be updated on image updates. Note that this |
|---|
| 87 |
# generally doesn't work for pseudo targets (it does where special support |
|---|
| 88 |
# has been added, like for "kernel"). |
|---|
| 89 |
HAIKU_INCLUDE_IN_IMAGE on libbe.so kernel = 1 ; |
|---|
| 90 |
|
|---|
| 91 |
# Add "crashing_app" to the beos/bin directory of the Haiku image/installation. |
|---|
| 92 |
# Note, that this also makes the image depend on the target, i.e. it is |
|---|
| 93 |
# automatically updated when the image is built. |
|---|
| 94 |
AddFilesToHaikuImage beos bin : crashing_app ; |
|---|
| 95 |
|
|---|
| 96 |
# Make a symlink to home/config/bin/crash. |
|---|
| 97 |
AddSymlinkToHaikuImage home config bin : /beos/bin/crashing_app : crash ; |
|---|
| 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. |
|---|
| 104 |
AddSourceDirectoryToHaikuImage src/kits/storage ; |
|---|
| 105 |
AddSourceDirectoryToHaikuImage 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. |
|---|
| 116 |
CopyDirectoryToHaikuImage 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. |
|---|
| 121 |
UnzipArchiveToHaikuImage 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). |
|---|
| 126 |
AddOptionalHaikuImagePackages WonderBrush ; |
|---|
| 127 |
|
|---|
| 128 |
# Add all available optional packages. |
|---|
| 129 |
HAIKU_ADD_ALL_OPTIONAL_PACKAGES = 1 ; |
|---|
| 130 |
|
|---|
| 131 |
# Specify scripts that shall be run when populating the image/installation |
|---|
| 132 |
# directory. The "early" script is run before anything has been copied onto |
|---|
| 133 |
# the image/into the installation directory. The "late" script is run after |
|---|
| 134 |
# everything has been copied, but before the MIME database is installed. |
|---|
| 135 |
HAIKU_IMAGE_EARLY_USER_SCRIPTS = $(HAIKU_TOP)/../early-image-script.sh ; |
|---|
| 136 |
HAIKU_IMAGE_LATE_USER_SCRIPTS = $(HAIKU_TOP)/../late-image-script.sh ; |
|---|
| 137 |
|
|---|
| 138 |
# Set name and real name of the root user. Defaults to "baron" and "Root User". |
|---|
| 139 |
HAIKU_ROOT_USER_NAME = bond ; |
|---|
| 140 |
HAIKU_ROOT_USER_REAL_NAME = "James Bond" ; |
|---|
| 141 |
|
|---|
| 142 |
# Set host name to "mybox". By default the installation doesn't have a host |
|---|
| 143 |
# name. |
|---|
| 144 |
HAIKU_IMAGE_HOST_NAME = mybox ; |
|---|
| 145 |
|
|---|
| 146 |
# Add user "walter" with user ID 1000 and group ID 100 (note, that a group with |
|---|
| 147 |
# that ID should exist -- 100 already exists and is the "users" group), home |
|---|
| 148 |
# directory "/boot/home", shell "/bin/bash", and real name "Just Walter" to the |
|---|
| 149 |
# image. |
|---|
| 150 |
AddUserToHaikuImage walter : 1000 : 100 : /boot/home : /bin/bash |
|---|
| 151 |
: "Just Walter" ; |
|---|
| 152 |
|
|---|
| 153 |
# Add group "party" with group ID 101 and members "baron" and "walter" to the |
|---|
| 154 |
# image. |
|---|
| 155 |
AddGroupToHaikuImage party : 101 : baron walter ; |
|---|
| 156 |
|
|---|
| 157 |
|
|---|
| 158 |
# Build Profiles |
|---|
| 159 |
|
|---|
| 160 |
# A build profile is a named set of settings for building a Haiku image or |
|---|
| 161 |
# installation. The following lines define five different build profiles: |
|---|
| 162 |
# disk - Installation on device /dev/sda57. All optional packages will be |
|---|
| 163 |
# included. Profile type "disk" implies "HAIKU_DONT_CLEAR_IMAGE = 1". |
|---|
| 164 |
# qemu - A plain 200 MB disk image (type "image") named "haiku-qemu.image". |
|---|
| 165 |
# Since only the image name is given, the default location will be |
|---|
| 166 |
# chosen for the image, unless HAIKU_IMAGE_DIR has been set |
|---|
| 167 |
# beforehand. |
|---|
| 168 |
# vmware - A 400 MB VMware image (type "vmware-image"). It will not be zeroed, |
|---|
| 169 |
# if not necessary. The optional packages Development and Pe will be |
|---|
| 170 |
# installed. No image name or path is given, so the defaults |
|---|
| 171 |
# ("haiku.vmdk" in the generated directory) will be used, unless the |
|---|
| 172 |
# respective variables are set. |
|---|
| 173 |
# crash - Similar to the vmware profile, but created at a specific location |
|---|
| 174 |
# and 1 GB size. Furthermore a "crash-tests" directory will be copied |
|---|
| 175 |
# to the image. |
|---|
| 176 |
# install - Installation in directory "/Haiku2" (type "install"). |
|---|
| 177 |
|
|---|
| 178 |
DefineBuildProfile disk : disk : "/dev/sda57" ; |
|---|
| 179 |
DefineBuildProfile qemu : image : "haiku-qemu.image" ; |
|---|
| 180 |
DefineBuildProfile vmware : vmware-image ; |
|---|
| 181 |
DefineBuildProfile crash : vmware-image |
|---|
| 182 |
: "/home/foobar/vmware/Virtual Machines/CrashOMatic/CrashOMatic.vmdk" ; |
|---|
| 183 |
DefineBuildProfile install : install : /Haiku2 ; |
|---|
| 184 |
|
|---|
| 185 |
switch $(HAIKU_BUILD_PROFILE) { |
|---|
| 186 |
case "disk" : { |
|---|
| 187 |
HAIKU_ADD_ALL_OPTIONAL_PACKAGES = 1 ; |
|---|
| 188 |
} |
|---|
| 189 |
|
|---|
| 190 |
case "qemu" : { |
|---|
| 191 |
HAIKU_IMAGE_SIZE = 200 ; |
|---|
| 192 |
} |
|---|
| 193 |
|
|---|
| 194 |
case "vmware" : { |
|---|
| 195 |
HAIKU_IMAGE_SIZE = 400 ; |
|---|
| 196 |
HAIKU_DONT_CLEAR_IMAGE = 1 ; |
|---|
| 197 |
AddOptionalHaikuImagePackages Development Pe ; |
|---|
| 198 |
} |
|---|
| 199 |
|
|---|
| 200 |
case "crash" : { |
|---|
| 201 |
HAIKU_IMAGE_SIZE = 1024 ; |
|---|
| 202 |
HAIKU_DONT_CLEAR_IMAGE = 1 ; |
|---|
| 203 |
AddOptionalHaikuImagePackages Development Pe ; |
|---|
| 204 |
CopyDirectoryToHaikuImage home Desktop : $(HAIKU_TOP)/../crash-tests ; |
|---|
| 205 |
} |
|---|
| 206 |
} |
|---|
| 207 |
|
|---|
| 208 |
# By specifying the build profile name as first (non-option) parameter on the |
|---|
| 209 |
# jam command line prefixed by an "@" character, the profile will be selected. |
|---|
| 210 |
# The second parameter specifies the action to be performed, further optional |
|---|
| 211 |
# parameters may follow. Jam command line examples: |
|---|
| 212 |
# |
|---|
| 213 |
# jam -q @disk build |
|---|
| 214 |
# -> Equivalent to running "jam -q haiku-image" with the settings for the |
|---|
| 215 |
# "disk" profile. "build" is the default action, so it could even be |
|---|
| 216 |
# omitted. |
|---|
| 217 |
# jam -q @vmware update kernel |
|---|
| 218 |
# -> Equivalent to running "jam -q update-vmware-image kernel" with the |
|---|
| 219 |
# settings for the "vmware" profile. |
|---|
| 220 |
# jam -q @crash mount |
|---|
| 221 |
# -> Enters the bfs_shell mounting the image specified by the "crash" profile. |
|---|
| 222 |
# |
|---|
| 223 |
# Note, that the build system will automatically define the build profiles |
|---|
| 224 |
# "image", "vmware-image", and "install", unless they are already defined in |
|---|
| 225 |
# the UserBuildConfig. They correspond to the respective build profile types |
|---|
| 226 |
# and use the values of the variables HAIKU[_VMWARE]_IMAGE_NAME, |
|---|
| 227 |
# HAIKU_IMAGE_DIR, HAIKU_INSTALL_DIR, respectively their default values. |
|---|
| 228 |
# "jam -q @image" will therefore be equivalent to "jam -q haiku-image". |
|---|
| 229 |
|
|---|
| 230 |
|
|---|
| 231 |
# Creating Sourceable Shell Scripts |
|---|
| 232 |
|
|---|
| 233 |
# If you use shell scripts (e.g. for testing) that need to access targets or |
|---|
| 234 |
# build system properties, you can tell the build system to generate a |
|---|
| 235 |
# variables defining shell script you can source from your shell script. |
|---|
| 236 |
|
|---|
| 237 |
# General setup for the shell script to generate. Name is test.inc, located |
|---|
| 238 |
# in the output directory. |
|---|
| 239 |
MakeLocate test.inc : $(HAIKU_OUTPUT_DIR) ; |
|---|
| 240 |
Always test.inc ; |
|---|
| 241 |
|
|---|
| 242 |
# Define variable "outputDir" in the shell script, with the value of |
|---|
| 243 |
# HAIKU_OUTPUT_DIR. |
|---|
| 244 |
AddVariableToScript test.inc : outputDir : $(HAIKU_OUTPUT_DIR) ; |
|---|
| 245 |
|
|---|
| 246 |
# Define variables "bfsShell" and "fsShellCommand" referring to the |
|---|
| 247 |
# generated bfs_shell and fs_shell_command respectively. |
|---|
| 248 |
AddTargetVariableToScript test.inc : bfs_shell : bfsShell ; |
|---|
| 249 |
AddTargetVariableToScript test.inc : fs_shell_command : fsShellCommand ; |
|---|
| 250 |
|
|---|
| 251 |
# If no variable name is given, the name (without grist) of the target is |
|---|
| 252 |
# used, i.e. a variable "rc" referring to the rc command built for the host |
|---|
| 253 |
# platform is defined in the script. |
|---|
| 254 |
AddTargetVariableToScript test.inc : <build>rc ; |
|---|
| 255 |
|
|---|
| 256 |
|
|---|
| 257 |
# Optimizing Jamfile Parsing Times / Third Party Inclusion |
|---|
| 258 |
|
|---|
| 259 |
# Setting this variable will prevent the root Jamfile to include the Jamfile |
|---|
| 260 |
# in the src directory. Instead only the directories required for building the |
|---|
| 261 |
# build tools are included. Only useful in combination with DeferredSubInclude. |
|---|
| 262 |
HAIKU_DONT_INCLUDE_SRC = 1 ; |
|---|
| 263 |
|
|---|
| 264 |
# Schedule the given subdirectory for inclusion at the end of the root |
|---|
| 265 |
# Jamfile (directly using SubInclude here is not possible). Using this |
|---|
| 266 |
# feature together with HAIKU_DONT_INCLUDE_SRC allows developers working |
|---|
| 267 |
# only on a subproject to reduce Jamfile parsing times considerably. |
|---|
| 268 |
DeferredSubInclude HAIKU_TOP src tests add-ons kernel file_systems |
|---|
| 269 |
userlandfs ; |
|---|
| 270 |
|
|---|
| 271 |
# Schedule src/3rdparty/myproject/Jamfile.haiku for later inclusion. The "local" |
|---|
| 272 |
# parameter specifies that the alternative Jamfile name shall not be used for |
|---|
| 273 |
# any subdirectory of the given directory (i.e. "Jamfile" will be used as |
|---|
| 274 |
# usual). Omitting this parameter or specifying "global" will cause the given |
|---|
| 275 |
# name to be used recursively. |
|---|
| 276 |
DeferredSubInclude HAIKU_TOP src 3rdparty myproject : Jamfile.haiku : local ; |
|---|
| 277 |
|
|---|
| 278 |
|
|---|
| 279 |
# Copy the posix test suite onto the image (or on the installation) into |
|---|
| 280 |
# "home/posixtestsuite" directory, including the run script. |
|---|
| 281 |
HAIKU_ADD_POSIX_TEST_SUITE_TO_IMAGE = 1 ; |
|---|