| 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 | # 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. |
| 31 | SetConfigVar 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. |
| 37 | SetConfigVar 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. |
| 41 | AppendToConfigVar 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. |
| 50 | DEBUG 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. |
| 56 | HAIKU_IMAGE_NAME = walter.image ; |
| 57 | HAIKU_IMAGE_DIR = /tmp ; |
| 58 | HAIKU_IMAGE_SIZE = 100 ; |
| 59 | |
| 60 | # Set image volume label to "Walter". Default label is "Haiku". |
| 61 | HAIKU_IMAGE_LABEL = Walter ; |
| 62 | |
| 63 | # Name the VMWare image walter.vmdk (in directory $(HAIKU_IMAGE_DIR)). |
| 64 | HAIKU_VMWARE_IMAGE_NAME = walter.vmdk ; |
| 65 | |
| 66 | # Install Haiku in directory /Haiku. |
| 67 | HAIKU_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. |
| 71 | HAIKU_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. |
| 79 | SetUpdateHaikuImageOnly 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"). |
| 84 | HAIKU_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. |
| 89 | AddFilesToHaikuImage beos bin : crashing_app ; |
| 90 | |
| 91 | # Make a symlink to home/config/bin/crash. |
| 92 | AddSymlinkToHaikuImage home config bin : /beos/bin/crashing_app : crash ; |
| 93 | |
| 94 | # Add timezone and keymap settings. |
| 95 | AddSymlinkToHaikuImage home config settings |
| 96 | : /boot/beos/etc/timezones/Europe/Paris : timezone ; |
| 97 | AddFilesToHaikuImage 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. |
| 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 | # 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. |
| 134 | HAIKU_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. |
| 140 | HAIKU_IMAGE_EARLY_USER_SCRIPTS = $(HAIKU_TOP)/../early-image-script.sh ; |
| 141 | HAIKU_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". |
| 144 | HAIKU_ROOT_USER_NAME = bond ; |
| 145 | HAIKU_ROOT_USER_REAL_NAME = "James Bond" ; |
| 146 | |
| 147 | # Set host name to "mybox". By default the installation doesn't have a host |
| 148 | # name. |
| 149 | HAIKU_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. |
| 155 | AddUserToHaikuImage 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. |
| 160 | AddGroupToHaikuImage 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 | |
| 184 | DefineBuildProfile disk : disk : "/dev/sda57" ; |
| 185 | DefineBuildProfile qemu : image : "haiku-qemu.image" ; |
| 186 | DefineBuildProfile vmware : vmware-image ; |
| 187 | DefineBuildProfile crash : vmware-image |
| 188 | : "/home/foobar/vmware/Virtual Machines/CrashOMatic/CrashOMatic.vmdk" ; |
| 189 | DefineBuildProfile install : install : /Haiku2 ; |
| 190 | |
| 191 | switch $(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. |
| 248 | MakeLocate test.inc : $(HAIKU_OUTPUT_DIR) ; |
| 249 | Always test.inc ; |
| 250 | |
| 251 | # Define variable "outputDir" in the shell script, with the value of |
| 252 | # HAIKU_OUTPUT_DIR. |
| 253 | AddVariableToScript 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. |
| 257 | AddTargetVariableToScript test.inc : bfs_shell : bfsShell ; |
| 258 | AddTargetVariableToScript 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. |
| 263 | AddTargetVariableToScript 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. |
| 271 | HAIKU_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. |
| 277 | DeferredSubInclude 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. |
| 285 | DeferredSubInclude 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. |
| 303 | rule UserBuildConfigRulePostBuildTargets |
| 304 | { |
| 305 | Echo "StyledEdit will appear here:" [ on StyledEdit return $(LOCATE) ] ; |
| 306 | } |