haiku/Jamrules
Michael Lotz d5ec51ca02 Allow for a separate UserBuildConfig directly in the output directory (i.e.
generated). When not using build profiles this allows for separate configuration
per output directory. When using build profiles you could for example have a
different profile per output directory with the same name (so an @disk with
different settings per output dir for example).


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@29161 a95241bf-73f2-0310-859d-f6bbb57e9c96
2009-02-08 13:20:19 +00:00

83 lines
3.4 KiB
Plaintext

# Haiku Jamrules
# Main directories used by the build.
HAIKU_OUTPUT_DIR ?= [ FDirName $(HAIKU_TOP) generated ] ;
HAIKU_BUILD_OUTPUT_DIR = [ FDirName $(HAIKU_OUTPUT_DIR) build ] ;
HAIKU_BUILD_DIR = [ FDirName $(HAIKU_TOP) build ] ;
HAIKU_BUILD_RULES_DIR = [ FDirName $(HAIKU_BUILD_DIR) jam ] ;
HAIKU_OBJECT_DIR = [ FDirName $(HAIKU_OUTPUT_DIR) objects ] ;
HAIKU_COMMON_PLATFORM_OBJECT_DIR = [ FDirName $(HAIKU_OBJECT_DIR) common ] ;
HAIKU_DOWNLOAD_DIR = [ FDirName $(HAIKU_OUTPUT_DIR) download ] ;
# Cache files for header scanning and jamfile caching
HCACHEFILE = header_cache ;
JCACHEFILE = jamfile_cache ;
LOCATE on $(HCACHEFILE) $(JCACHEFILE) = $(HAIKU_BUILD_OUTPUT_DIR) ;
# include BuildConfig
local buildConfig = [ GLOB $(HAIKU_BUILD_OUTPUT_DIR) : BuildConfig ] ;
if ! $(buildConfig) {
ECHO "No `BuildConfig' found in $(HAIKU_BUILD_OUTPUT_DIR)!" ;
EXIT "Run ./configure in the source tree's root directory first!" ;
}
LOCATE on BuildConfig = $(HAIKU_BUILD_OUTPUT_DIR) ;
include BuildConfig ;
# The build setup and rules are neatly organized in several files. Include
# them now. Start with the side-effect-less rules, since they are the most
# likely to be used in the top level context (i.e. not only in rules).
# At the end include BuildSetup that sets up global variables etc. The
# optional user-defined UserBuildConfig is included thereafter.
include [ FDirName $(HAIKU_BUILD_RULES_DIR) HelperRules ] ;
include [ FDirName $(HAIKU_BUILD_RULES_DIR) MathRules ] ;
include [ FDirName $(HAIKU_BUILD_RULES_DIR) BeOSRules ] ;
include [ FDirName $(HAIKU_BUILD_RULES_DIR) ConfigRules ] ;
include [ FDirName $(HAIKU_BUILD_RULES_DIR) DocumentationRules ] ;
include [ FDirName $(HAIKU_BUILD_RULES_DIR) FileRules ] ;
include [ FDirName $(HAIKU_BUILD_RULES_DIR) FreetypeRules ] ;
include [ FDirName $(HAIKU_BUILD_RULES_DIR) HeadersRules ] ;
include [ FDirName $(HAIKU_BUILD_RULES_DIR) KernelRules ] ;
include [ FDirName $(HAIKU_BUILD_RULES_DIR) ImageRules ] ;
include [ FDirName $(HAIKU_BUILD_RULES_DIR) MainBuildRules ] ;
include [ FDirName $(HAIKU_BUILD_RULES_DIR) MiscRules ] ;
include [ FDirName $(HAIKU_BUILD_RULES_DIR) OverriddenJamRules ] ;
include [ FDirName $(HAIKU_BUILD_RULES_DIR) PackageRules ] ;
include [ FDirName $(HAIKU_BUILD_RULES_DIR) TestsRules ] ;
include [ FDirName $(HAIKU_BUILD_RULES_DIR) BuildSetup ] ;
# Declare no-op user-overridable build rules.
rule UserBuildConfigRulePostBuildTargets { }
rule UserBuildConfigRulePreImage { }
rule UserBuildConfigRulePostImage { }
# Include UserBuildConfig.
{
local userBuildConfig
= [ GLOB $(HAIKU_BUILD_RULES_DIR) : UserBuildConfig ] ;
if $(userBuildConfig) {
include $(userBuildConfig) ;
}
# allow for a separate UserBuildConfig per output directory
local userBuildConfig
= [ GLOB $(HAIKU_OUTPUT_DIR) : UserBuildConfig ] ;
if $(userBuildConfig) {
include $(userBuildConfig) ;
}
}
include [ FDirName $(HAIKU_BUILD_RULES_DIR) ReleaseBuildProfiles ] ;
# If a build profile was specified on the command line, now is the time to
# check whether it is unknown or one of the default profiles.
if $(HAIKU_BUILD_PROFILE) && ! $(HAIKU_BUILD_PROFILE_DEFINED) {
# define the obvious default profiles
if $(HAIKU_BUILD_PROFILE) in image vmware-image install {
DefineBuildProfile $(HAIKU_BUILD_PROFILE) : $(HAIKU_BUILD_PROFILE) ;
} else {
Exit "Build profile" $(HAIKU_BUILD_PROFILE) "not defined." ;
}
}
PrepareConfigVariables ;