2005-10-29 20:27:43 +04:00
|
|
|
# Variable naming conventions:
|
|
|
|
# TARGET_*: A build system variable specifying a property for building for
|
|
|
|
# the target platform (usually Haiku). E.g. TARGET_CC specifies the
|
|
|
|
# compiler when building a target for the target platform.
|
|
|
|
# HOST_*: A build system variable specifying a property of the platform
|
|
|
|
# hosting the build. E.g. HOST_CC specifies the compiler when
|
|
|
|
# building a target for the host platform (a build tool for
|
|
|
|
# instance).
|
|
|
|
# HAIKU_*: A build system variable specifying a build system property. Usually
|
|
|
|
# directory paths and the like.
|
|
|
|
|
|
|
|
|
2013-10-10 23:38:07 +04:00
|
|
|
# The Haiku (base) version. For development builds the revision will be
|
|
|
|
# attached.
|
2021-06-21 19:38:54 +03:00
|
|
|
HAIKU_VERSION = r1~beta3 ;
|
2013-10-10 23:38:07 +04:00
|
|
|
|
|
|
|
|
2007-07-18 03:37:40 +04:00
|
|
|
#pragma mark - container settings
|
|
|
|
|
|
|
|
# Haiku image
|
|
|
|
HAIKU_IMAGE_CONTAINER_NAME = haiku-image-container ;
|
|
|
|
HAIKU_CONTAINER_GRIST on $(HAIKU_IMAGE_CONTAINER_NAME) = HaikuImage ;
|
|
|
|
HAIKU_INCLUDE_IN_CONTAINER_VAR on $(HAIKU_IMAGE_CONTAINER_NAME)
|
|
|
|
= HAIKU_INCLUDE_IN_IMAGE ;
|
|
|
|
HAIKU_INSTALL_TARGETS_VAR on $(HAIKU_IMAGE_CONTAINER_NAME)
|
|
|
|
= HAIKU_IMAGE_INSTALL_TARGETS ;
|
2013-11-10 18:20:32 +04:00
|
|
|
HAIKU_CONTAINER_SYSTEM_DIR_TOKENS on $(HAIKU_IMAGE_CONTAINER_NAME)
|
|
|
|
= system non-packaged ;
|
2007-07-18 03:37:40 +04:00
|
|
|
|
|
|
|
# network boot archive
|
|
|
|
HAIKU_NET_BOOT_ARCHIVE_CONTAINER_NAME = haiku-netboot-archive-container ;
|
|
|
|
HAIKU_CONTAINER_GRIST on $(HAIKU_NET_BOOT_ARCHIVE_CONTAINER_NAME)
|
|
|
|
= NetBootArchive ;
|
|
|
|
# HAIKU_INCLUDE_IN_CONTAINER_VAR -- update only mode not supported
|
|
|
|
HAIKU_INSTALL_TARGETS_VAR on $(HAIKU_NET_BOOT_ARCHIVE_CONTAINER_NAME)
|
|
|
|
= HAIKU_NET_BOOT_ARCHIVE_INSTALL_TARGETS ;
|
2011-06-19 19:01:23 +04:00
|
|
|
HAIKU_CONTAINER_SYSTEM_DIR_TOKENS on $(HAIKU_NET_BOOT_ARCHIVE_CONTAINER_NAME)
|
|
|
|
= system ;
|
2007-07-18 03:37:40 +04:00
|
|
|
|
2008-03-02 06:05:23 +03:00
|
|
|
# boot floppy
|
|
|
|
HAIKU_FLOPPY_BOOT_IMAGE_CONTAINER_NAME = haiku-boot-floppy-container ;
|
2008-10-02 03:56:12 +04:00
|
|
|
HAIKU_CONTAINER_GRIST on $(HAIKU_FLOPPY_BOOT_IMAGE_CONTAINER_NAME)
|
|
|
|
= FloppyBootImage ;
|
2008-03-02 06:05:23 +03:00
|
|
|
# HAIKU_INCLUDE_IN_CONTAINER_VAR -- update only mode not supported
|
|
|
|
HAIKU_INSTALL_TARGETS_VAR on $(HAIKU_FLOPPY_BOOT_IMAGE_CONTAINER_NAME)
|
|
|
|
= HAIKU_FLOPPY_BOOT_IMAGE_INSTALL_TARGETS ;
|
2011-06-19 19:01:23 +04:00
|
|
|
HAIKU_CONTAINER_SYSTEM_DIR_TOKENS on $(HAIKU_FLOPPY_BOOT_IMAGE_CONTAINER_NAME)
|
|
|
|
= system ;
|
2008-03-02 06:05:23 +03:00
|
|
|
|
|
|
|
# boot CD image
|
2008-03-02 07:38:29 +03:00
|
|
|
HAIKU_CD_BOOT_IMAGE_CONTAINER_NAME = haiku-boot-cd-container ;
|
|
|
|
HAIKU_CONTAINER_GRIST on $(HAIKU_CD_BOOT_IMAGE_CONTAINER_NAME) = CDBootImage ;
|
|
|
|
# HAIKU_INCLUDE_IN_CONTAINER_VAR -- update only mode not supported
|
|
|
|
HAIKU_INSTALL_TARGETS_VAR on $(HAIKU_CD_BOOT_IMAGE_CONTAINER_NAME)
|
|
|
|
= HAIKU_CD_BOOT_IMAGE_INSTALL_TARGETS ;
|
2011-06-19 19:01:23 +04:00
|
|
|
HAIKU_CONTAINER_SYSTEM_DIR_TOKENS on $(HAIKU_CD_BOOT_IMAGE_CONTAINER_NAME)
|
|
|
|
= system ;
|
2007-07-18 03:37:40 +04:00
|
|
|
|
2018-10-18 18:07:12 +03:00
|
|
|
# boot MMC image
|
|
|
|
HAIKU_MMC_BOOT_IMAGE_CONTAINER_NAME = haiku-boot-mmc-container ;
|
|
|
|
HAIKU_CONTAINER_GRIST on $(HAIKU_MMC_BOOT_IMAGE_CONTAINER_NAME) = MMCImage ;
|
|
|
|
# HAIKU_INCLUDE_IN_CONTAINER_VAR -- update only mode not supported
|
|
|
|
HAIKU_INSTALL_TARGETS_VAR on $(HAIKU_MMC_BOOT_IMAGE_CONTAINER_NAME)
|
|
|
|
= HAIKU_MMC_BOOT_IMAGE_INSTALL_TARGETS ;
|
|
|
|
HAIKU_CONTAINER_SYSTEM_DIR_TOKENS on $(HAIKU_MMC_BOOT_IMAGE_CONTAINER_NAME)
|
|
|
|
= system ;
|
|
|
|
|
2008-04-03 00:29:43 +04:00
|
|
|
# Haiku image/install defaults
|
|
|
|
HAIKU_DEFAULT_IMAGE_NAME = haiku.image ;
|
|
|
|
HAIKU_DEFAULT_IMAGE_DIR = $(HAIKU_OUTPUT_DIR) ;
|
|
|
|
HAIKU_DEFAULT_VMWARE_IMAGE_NAME = haiku.vmdk ;
|
|
|
|
HAIKU_DEFAULT_INSTALL_DIR = /Haiku ;
|
2018-08-13 22:58:01 +03:00
|
|
|
HAIKU_DEFAULT_IMAGE_SIZE ?= 300 ; # 300 MB
|
2008-09-19 21:32:57 +04:00
|
|
|
HAIKU_DEFAULT_IMAGE_LABEL ?= Haiku ;
|
2008-04-03 00:29:43 +04:00
|
|
|
|
2009-02-15 05:34:32 +03:00
|
|
|
# Haiku CD defaults
|
|
|
|
HAIKU_DEFAULT_CD_NAME = haiku-cd.iso ;
|
|
|
|
HAIKU_DEFAULT_CD_DIR = $(HAIKU_OUTPUT_DIR) ;
|
|
|
|
HAIKU_DEFAULT_CD_LABEL = Haiku ;
|
|
|
|
|
2010-03-16 02:51:45 +03:00
|
|
|
# Haiku Anyboot defaults
|
2016-11-29 18:41:15 +03:00
|
|
|
HAIKU_DEFAULT_ANYBOOT_NAME = haiku-anyboot.iso ;
|
2010-03-16 02:51:45 +03:00
|
|
|
HAIKU_DEFAULT_ANYBOOT_DIR = $(HAIKU_OUTPUT_DIR) ;
|
|
|
|
HAIKU_DEFAULT_ANYBOOT_LABEL ?= Haiku ;
|
|
|
|
|
2014-06-13 19:15:24 +04:00
|
|
|
# Haiku MMC defaults
|
2019-09-30 03:11:42 +03:00
|
|
|
HAIKU_DEFAULT_MMC_NAME = haiku-mmc.image ;
|
2014-06-13 19:15:24 +04:00
|
|
|
HAIKU_DEFAULT_MMC_DIR = $(HAIKU_OUTPUT_DIR) ;
|
|
|
|
HAIKU_DEFAULT_MMC_LABEL ?= Haiku ;
|
|
|
|
|
2009-02-24 01:33:09 +03:00
|
|
|
# analyze and optionally replace jam's target parameters
|
|
|
|
ProcessCommandLineArguments ;
|
2007-02-22 03:59:28 +03:00
|
|
|
|
|
|
|
|
2005-10-29 20:27:43 +04:00
|
|
|
# supported debug levels
|
|
|
|
HAIKU_DEBUG_LEVELS = 0 1 2 3 4 5 ;
|
|
|
|
|
2008-03-28 01:01:38 +03:00
|
|
|
# configuration header directories
|
|
|
|
HAIKU_CONFIG_HEADERS = [ FDirName $(HAIKU_TOP) build user_config_headers ]
|
|
|
|
[ FDirName $(HAIKU_TOP) build config_headers ] ;
|
|
|
|
|
2005-10-29 20:27:43 +04:00
|
|
|
|
2013-08-01 10:51:16 +04:00
|
|
|
# object directories common to all architectures
|
|
|
|
HAIKU_OBJECT_BASE_DIR = [ FDirName $(HAIKU_OBJECT_DIR) haiku ] ;
|
|
|
|
HAIKU_COMMON_ARCH_OBJECT_DIR = [ FDirName $(HAIKU_OBJECT_BASE_DIR) common ] ;
|
2008-03-16 20:21:37 +03:00
|
|
|
|
2007-01-30 03:47:56 +03:00
|
|
|
|
2013-08-01 10:51:16 +04:00
|
|
|
#pragma mark - haiku target platform settings
|
2011-06-17 00:53:44 +04:00
|
|
|
|
2013-03-24 19:27:49 +04:00
|
|
|
|
2013-08-01 10:51:16 +04:00
|
|
|
local architecture ;
|
|
|
|
for architecture in $(HAIKU_PACKAGING_ARCHS) {
|
|
|
|
ArchitectureSetup $(architecture) ;
|
2013-04-06 15:42:24 +04:00
|
|
|
}
|
|
|
|
|
2013-08-01 10:51:16 +04:00
|
|
|
if $(HAIKU_PACKAGING_ARCH) {
|
2021-10-01 01:16:13 +03:00
|
|
|
local kernelArch = $(HAIKU_PACKAGING_ARCH) ;
|
|
|
|
# Always use the non-legacy GCC for the kernel.
|
|
|
|
if $(kernelArch) = x86_gcc2 {
|
|
|
|
kernelArch = x86 ;
|
|
|
|
}
|
|
|
|
KernelArchitectureSetup $(kernelArch) ;
|
2008-03-16 20:21:37 +03:00
|
|
|
}
|
|
|
|
|
2013-11-17 01:18:40 +04:00
|
|
|
# define primary packaging architecture macro
|
|
|
|
HAIKU_DEFINES = __HAIKU_PRIMARY_PACKAGING_ARCH=\\\"$(HAIKU_PACKAGING_ARCH)\\\" ;
|
|
|
|
|
2005-10-29 20:27:43 +04:00
|
|
|
|
2007-05-20 21:50:11 +04:00
|
|
|
# distro compatibility level defines
|
|
|
|
HAIKU_DISTRO_COMPATIBILITY ?= "default" ;
|
|
|
|
switch $(HAIKU_DISTRO_COMPATIBILITY) {
|
2013-08-01 10:51:16 +04:00
|
|
|
case official :
|
2010-07-26 00:34:17 +04:00
|
|
|
HAIKU_DEFINES += HAIKU_DISTRO_COMPATIBILITY_OFFICIAL ;
|
|
|
|
HAIKU_INCLUDE_TRADEMARKS = "" ;
|
2013-08-01 10:51:16 +04:00
|
|
|
case compatible :
|
2010-07-26 00:34:17 +04:00
|
|
|
HAIKU_DEFINES += HAIKU_DISTRO_COMPATIBILITY_COMPATIBLE ;
|
|
|
|
HAIKU_INCLUDE_TRADEMARKS = "" ;
|
2013-08-01 10:51:16 +04:00
|
|
|
case "default" :
|
2010-07-26 00:34:17 +04:00
|
|
|
HAIKU_DEFINES += HAIKU_DISTRO_COMPATIBILITY_DEFAULT ;
|
|
|
|
HAIKU_INCLUDE_TRADEMARKS = ;
|
2005-10-29 20:27:43 +04:00
|
|
|
case * :
|
2013-08-01 10:51:16 +04:00
|
|
|
Exit "Invalid value for HAIKU_DISTRO_COMPATIBILITY:"
|
|
|
|
$(HAIKU_DISTRO_COMPATIBILITY) ;
|
2006-11-08 02:47:33 +03:00
|
|
|
}
|
|
|
|
|
2007-08-13 02:15:10 +04:00
|
|
|
# network libraries
|
|
|
|
HAIKU_NETWORK_LIBS = network ;
|
2008-05-14 17:49:48 +04:00
|
|
|
HAIKU_NETAPI_LIB = bnetapi ;
|
2007-08-13 02:15:10 +04:00
|
|
|
HAIKU_SELECT_UNAME_ETC_LIB = ; # libroot, against which we link anyway
|
|
|
|
|
2005-10-29 20:27:43 +04:00
|
|
|
HAIKU_EXECUTABLE_MIME_TYPE = "application/x-vnd.Be-elfexecutable" ;
|
|
|
|
|
|
|
|
# TODO: The version stuff should probably go into a separate file and be made
|
|
|
|
# available as macro, too.
|
|
|
|
# Set our version number if not already set and mark it as a developer build
|
|
|
|
if ! $(HAIKU_BUILD_VERSION) {
|
|
|
|
HAIKU_BUILD_VERSION ?= "1 0 0 a 1" ;
|
|
|
|
HAIKU_BUILD_DESCRIPTION ?= "Developer Build" ;
|
|
|
|
}
|
|
|
|
|
|
|
|
# If HAIKU_BUILD_VERSION is set, but HAIKU_BUILD_DESCRIPTION isn't, mark it as
|
|
|
|
# an unknown build.
|
|
|
|
HAIKU_BUILD_DESCRIPTION ?= "Unknown Build" ;
|
|
|
|
|
|
|
|
|
2013-08-01 10:51:16 +04:00
|
|
|
#pragma mark - host platform settings
|
2005-10-29 20:27:43 +04:00
|
|
|
|
|
|
|
|
2009-11-24 21:57:49 +03:00
|
|
|
# analyze the host gcc machine spec to find out about 64-bitness
|
|
|
|
HOST_PLATFORM_IS_64_BIT = ;
|
2011-06-17 00:53:44 +04:00
|
|
|
switch $(HOST_GCC_MACHINE) {
|
|
|
|
case i686-apple-darwin10 : HOST_PLATFORM_IS_64_BIT = 1 ;
|
2011-11-13 01:23:21 +04:00
|
|
|
case i686-apple-darwin11 : HOST_PLATFORM_IS_64_BIT = 1 ;
|
2011-06-17 00:53:44 +04:00
|
|
|
case x86_64-* : HOST_PLATFORM_IS_64_BIT = 1 ;
|
2019-03-04 21:37:56 +03:00
|
|
|
case amd64-* : HOST_PLATFORM_IS_64_BIT = 1 ;
|
|
|
|
|
|
|
|
case arm64-* : HOST_PLATFORM_IS_64_BIT = 1 ;
|
2017-07-28 02:45:54 +03:00
|
|
|
case aarch64-* : HOST_PLATFORM_IS_64_BIT = 1 ;
|
2019-04-04 16:53:30 +03:00
|
|
|
case riscv64-* : HOST_PLATFORM_IS_64_BIT = 1 ;
|
2011-06-17 00:53:44 +04:00
|
|
|
}
|
|
|
|
|
|
|
|
# If HAIKU_HOST_USE_32BIT is set, add the required gcc base flag (the LD flag
|
|
|
|
# is set later), or, if the architecture isn't actually 64 bit, clear
|
|
|
|
# HAIKU_HOST_USE_32BIT.
|
|
|
|
# Afterwards HOST_PLATFORM_IS_64_BIT will indicate whether the architecture is
|
|
|
|
# effectively (i.e. when using the compiler/linker flags) 64 bit and
|
|
|
|
# HAIKU_HOST_USE_32BIT will be set, iff the architecture is really 64 bit and
|
|
|
|
# 32 bit mode was requested.
|
2007-08-23 02:07:03 +04:00
|
|
|
if $(HAIKU_HOST_USE_32BIT) = 1 {
|
2011-06-17 00:53:44 +04:00
|
|
|
if $(HOST_PLATFORM_IS_64_BIT) {
|
|
|
|
# enable GCC -m32 option
|
|
|
|
HOST_GCC_BASE_FLAGS = -m32 ;
|
|
|
|
HOST_PLATFORM_IS_64_BIT = ;
|
|
|
|
} else {
|
|
|
|
HAIKU_HOST_USE_32BIT = 0 ;
|
2009-11-24 21:57:49 +03:00
|
|
|
}
|
2007-08-23 02:07:03 +04:00
|
|
|
}
|
|
|
|
|
|
|
|
|
2005-10-29 20:27:43 +04:00
|
|
|
# save jam's variables for the build platform
|
|
|
|
HOST_AR ?= $(AR) ;
|
2020-09-16 16:10:27 +03:00
|
|
|
HOST_ARFLAGS ?= $(ARFLAGS) ;
|
2005-10-29 20:27:43 +04:00
|
|
|
HOST_CC ?= $(CC) ;
|
2018-08-15 21:41:40 +03:00
|
|
|
HOST_C++ ?= $(HOST_CC) ;
|
|
|
|
HOST_LINK ?= $(HOST_CC) ;
|
2005-10-29 20:27:43 +04:00
|
|
|
HOST_RANLIB ?= $(RANLIB) ;
|
|
|
|
HOST_CPPFLAGS ?= $(CPPFLAGS) ;
|
2007-08-23 02:07:03 +04:00
|
|
|
HOST_CCFLAGS ?= $(HOST_GCC_BASE_FLAGS) $(CCFLAGS) ;
|
|
|
|
HOST_C++FLAGS ?= $(HOST_GCC_BASE_FLAGS) $(C++FLAGS) ;
|
2011-06-17 00:53:44 +04:00
|
|
|
HOST_LDFLAGS ?= $(LDFLAGS) ;
|
2007-08-23 02:07:03 +04:00
|
|
|
HOST_LINKFLAGS ?= $(HOST_GCC_BASE_FLAGS) $(LINKFLAGS) ;
|
2005-10-29 20:27:43 +04:00
|
|
|
HOST_DEFINES ?= $(DEFINES) ;
|
|
|
|
HOST_HDRS ?= $(HDRS) ;
|
|
|
|
|
2007-08-23 02:07:03 +04:00
|
|
|
|
2005-10-29 20:27:43 +04:00
|
|
|
# split up HOST_AR into the command name and flags
|
|
|
|
HOST_AR = [ Match "([^ ]*) *(.*)" : $(HOST_AR[1]) ]
|
|
|
|
$(HOST_AR[2-]) ;
|
2020-09-16 16:10:27 +03:00
|
|
|
HOST_ARFLAGS = $(HOST_AR[2-]) $(HOST_ARFLAGS) ;
|
2005-10-29 20:27:43 +04:00
|
|
|
HOST_AR = $(HOST_AR[1]) ;
|
|
|
|
HOST_UNARFLAGS ?= x ;
|
|
|
|
|
|
|
|
# check the host platform compatibility
|
2007-05-18 19:59:04 +04:00
|
|
|
SetPlatformCompatibilityFlagVariables HOST_PLATFORM : HOST : host
|
2021-10-23 00:03:16 +03:00
|
|
|
: linux openbsd freebsd darwin ;
|
2013-09-18 17:26:35 +04:00
|
|
|
HOST_PLATFORM_(host)_COMPATIBLE = 1 ;
|
2005-10-29 20:27:43 +04:00
|
|
|
|
2007-05-18 19:59:04 +04:00
|
|
|
if $(HOST_PLATFORM) = linux || $(HOST_PLATFORM) = freebsd
|
2018-11-23 23:40:50 +03:00
|
|
|
|| $(HOST_PLATFORM) = darwin || $(HOST_PLATFORM) = openbsd {
|
2005-10-29 20:27:43 +04:00
|
|
|
# don't use lex: otherwise rc will not work correctly
|
|
|
|
if $(LEX) = lex {
|
|
|
|
LEX = flex ;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2013-09-18 17:26:35 +04:00
|
|
|
HOST_CPU ?= $(OSPLAT:L) ;
|
2005-10-29 20:27:43 +04:00
|
|
|
|
2011-06-16 21:58:24 +04:00
|
|
|
# Jam doesn't know x86_64, so override HOST_CPU, if 64 bit.
|
|
|
|
if $(HOST_CPU) = x86 && $(HOST_PLATFORM_IS_64_BIT) {
|
|
|
|
HOST_CPU = x86_64 ;
|
|
|
|
}
|
|
|
|
|
2013-09-18 17:26:35 +04:00
|
|
|
HOST_ARCH ?= $(HOST_CPU) ;
|
2013-08-01 10:51:16 +04:00
|
|
|
HOST_ARCHS = $(HOST_ARCH) ;
|
2013-09-18 17:26:35 +04:00
|
|
|
HOST_KERNEL_ARCH = host ;
|
2005-10-29 20:27:43 +04:00
|
|
|
|
2013-08-01 10:51:16 +04:00
|
|
|
# set packaging architecture
|
|
|
|
HOST_PACKAGING_ARCH ?= $(HOST_CPU) ;
|
2020-10-07 06:46:18 +03:00
|
|
|
if $(HOST_PACKAGING_ARCH) = x86 && $(HOST_CC_IS_LEGACY_GCC) = 1 {
|
2013-08-01 10:51:16 +04:00
|
|
|
HOST_PACKAGING_ARCH = x86_gcc2 ;
|
|
|
|
}
|
|
|
|
HOST_PACKAGING_ARCHS = $(HOST_PACKAGING_ARCH) ;
|
2009-11-24 21:57:49 +03:00
|
|
|
|
2005-10-29 20:27:43 +04:00
|
|
|
# directories
|
|
|
|
HOST_OBJECT_BASE_DIR = [ FDirName $(HAIKU_OBJECT_DIR) $(HOST_PLATFORM) ] ;
|
|
|
|
HOST_COMMON_ARCH_OBJECT_DIR = [ FDirName $(HOST_OBJECT_BASE_DIR) common ] ;
|
2013-08-01 10:51:16 +04:00
|
|
|
HOST_ARCH_OBJECT_DIR
|
|
|
|
= [ FDirName $(HOST_OBJECT_BASE_DIR) $(HOST_PACKAGING_ARCH) ] ;
|
2005-10-29 20:27:43 +04:00
|
|
|
HOST_COMMON_DEBUG_OBJECT_DIR = [ FDirName $(HOST_ARCH_OBJECT_DIR) common ] ;
|
|
|
|
HOST_DEBUG_0_OBJECT_DIR = [ FDirName $(HOST_ARCH_OBJECT_DIR) release ] ;
|
|
|
|
|
|
|
|
local level ;
|
|
|
|
for level in $(HAIKU_DEBUG_LEVELS[2-]) {
|
|
|
|
HOST_DEBUG_$(level)_OBJECT_DIR
|
|
|
|
= [ FDirName $(HOST_ARCH_OBJECT_DIR) debug_$(level) ] ;
|
|
|
|
}
|
|
|
|
|
2005-11-13 01:58:54 +03:00
|
|
|
# set variables for gcc header options
|
|
|
|
SetIncludePropertiesVariables HOST ;
|
|
|
|
|
2005-10-29 20:27:43 +04:00
|
|
|
# assembler flags
|
|
|
|
HOST_ASFLAGS = ;
|
|
|
|
|
|
|
|
# C/C++ flags
|
|
|
|
HOST_CCFLAGS += -Wno-multichar ;
|
|
|
|
HOST_C++FLAGS += -Wno-multichar ;
|
|
|
|
|
2018-11-23 23:40:50 +03:00
|
|
|
HOST_PIC_CCFLAGS += -fPIC ;
|
|
|
|
HOST_PIC_C++FLAGS += -fPIC ;
|
2007-06-16 23:43:53 +04:00
|
|
|
|
2020-10-07 06:46:18 +03:00
|
|
|
if $(HOST_CC_IS_LEGACY_GCC) != 1 {
|
2018-07-31 03:35:46 +03:00
|
|
|
HOST_GCC_BASE_FLAGS += -fno-strict-aliasing -fno-delete-null-pointer-checks ;
|
2013-08-01 10:51:16 +04:00
|
|
|
}
|
|
|
|
|
2007-08-23 02:07:03 +04:00
|
|
|
HOST_KERNEL_CCFLAGS += $(HOST_GCC_BASE_FLAGS) -finline -fno-builtin
|
2009-12-20 16:55:45 +03:00
|
|
|
-D_KERNEL_MODE ;
|
2007-08-23 02:07:03 +04:00
|
|
|
HOST_KERNEL_C++FLAGS += $(HOST_GCC_BASE_FLAGS) -finline -fno-builtin
|
2009-12-20 16:55:45 +03:00
|
|
|
-fno-exceptions -D_KERNEL_MODE ;
|
2008-01-11 03:36:44 +03:00
|
|
|
HOST_KERNEL_DEFINES += _KERNEL_MODE ;
|
2005-10-29 20:27:43 +04:00
|
|
|
|
2005-12-31 00:20:07 +03:00
|
|
|
HOST_KERNEL_PIC_CCFLAGS = -fno-pic ;
|
|
|
|
HOST_KERNEL_PIC_LINKFLAGS = ;
|
|
|
|
if $(HOST_ARCH) = ppc {
|
|
|
|
# Build a position independent PPC kernel. We need to be able to relocate
|
|
|
|
# the kernel, since the virtual address space layout at boot time is not
|
|
|
|
# fixed.
|
|
|
|
HOST_KERNEL_PIC_CCFLAGS = -fPIE ;
|
|
|
|
HOST_KERNEL_PIC_LINKFLAGS = -shared -fPIE ;
|
|
|
|
}
|
2008-06-23 19:34:48 +04:00
|
|
|
if $(HOST_ARCH) = m68k {
|
|
|
|
# Build a position independent M68K kernel. We need to be able to relocate
|
|
|
|
# the kernel, since the virtual address space layout at boot time is not
|
|
|
|
# fixed.
|
|
|
|
HOST_KERNEL_PIC_CCFLAGS = $(HAIKU_KERNEL_PIC_CCFLAGS) ;
|
|
|
|
HOST_KERNEL_PIC_LINKFLAGS = $(HAIKU_KERNEL_PIC_LINKFLAGS) ;
|
|
|
|
}
|
2005-12-31 00:20:07 +03:00
|
|
|
|
2011-11-06 17:14:47 +04:00
|
|
|
if $(HOST_PLATFORM) != darwin {
|
|
|
|
# fix for new changes to DSO linking policies
|
2020-05-21 11:47:14 +03:00
|
|
|
HOST_LINKFLAGS += -Xlinker --no-as-needed ;
|
2020-10-07 06:46:18 +03:00
|
|
|
if $(HOST_CC_IS_LEGACY_GCC) != 1 {
|
2020-05-21 11:47:14 +03:00
|
|
|
HOST_LINKFLAGS += -Wl,--copy-dt-needed-entries ;
|
|
|
|
}
|
2011-11-06 17:14:47 +04:00
|
|
|
}
|
|
|
|
|
|
|
|
|
2005-10-29 20:27:43 +04:00
|
|
|
# warning flags
|
2008-10-02 03:56:12 +04:00
|
|
|
HOST_WARNING_CCFLAGS = -Wall -Wno-trigraphs -Wmissing-prototypes -Wpointer-arith
|
|
|
|
-Wcast-align -Wsign-compare ;
|
2007-10-25 17:22:01 +04:00
|
|
|
HOST_WARNING_C++FLAGS = -Wall -Wno-trigraphs -Wno-ctor-dtor-privacy
|
2005-10-29 20:27:43 +04:00
|
|
|
-Woverloaded-virtual -Wpointer-arith -Wcast-align -Wsign-compare ;
|
|
|
|
|
2007-10-25 17:22:01 +04:00
|
|
|
HOST_KERNEL_WARNING_CCFLAGS = -Wall -Wno-trigraphs -Wmissing-prototypes ;
|
|
|
|
HOST_KERNEL_WARNING_C++FLAGS = -Wall -Wno-trigraphs ;
|
2005-10-29 20:27:43 +04:00
|
|
|
|
Fix kernel -Werror support
The introduction of secondary arch support for kernel files disabled
-Werror for all kernel files, since the -Werror flags were moved from
{CC,C++}FLAGS to TARGET_WARNING_{CC,C++}FLAGS_<arch>, which, however,
was overwritten by the SetupKernel rule. This commit introduces new
global variables {HAIKU,HOST,TARGET}_WERROR_FLAGS[_<arch>], which
contain the additional -Werror flags to be applied for the architecture.
The config variable WARNINGS can be set to "treatAsErrors" to cause
-Werror and {HOST,TARGET}_WERROR_FLAGS[_<arch>] to be appended to the
compilation flags.
Fixes #10280.
2013-12-05 15:37:14 +04:00
|
|
|
HOST_WERROR_FLAGS = ;
|
|
|
|
|
2005-10-29 20:27:43 +04:00
|
|
|
# debug flags
|
2013-08-01 10:51:16 +04:00
|
|
|
local hostDebugFlags ;
|
2005-10-29 20:27:43 +04:00
|
|
|
switch $(HOST_PLATFORM) {
|
2013-08-01 10:51:16 +04:00
|
|
|
case haiku : hostDebugFlags ?= -ggdb ;
|
|
|
|
case haiku_host : hostDebugFlags ?= -ggdb ;
|
|
|
|
case linux : hostDebugFlags ?= -ggdb ;
|
|
|
|
case freebsd : hostDebugFlags ?= -ggdb ;
|
|
|
|
case darwin : hostDebugFlags ?= -ggdb ;
|
|
|
|
case * : hostDebugFlags ?= -g ;
|
2005-10-29 20:27:43 +04:00
|
|
|
}
|
|
|
|
|
|
|
|
# debug 0: suppress asserts
|
|
|
|
HOST_DEBUG_0_CCFLAGS = [ FDefines NDEBUG=$(NDEBUG) ] ;
|
|
|
|
HOST_DEBUG_0_C++FLAGS = [ FDefines NDEBUG=$(NDEBUG) ] ;
|
|
|
|
|
|
|
|
HOST_KERNEL_DEBUG_0_CCFLAGS = [ FDefines NDEBUG=$(NDEBUG) ] ;
|
|
|
|
HOST_KERNEL_DEBUG_0_C++FLAGS = [ FDefines NDEBUG=$(NDEBUG) ] ;
|
|
|
|
|
|
|
|
local level ;
|
|
|
|
for level in $(HAIKU_DEBUG_LEVELS[2-]) {
|
2013-08-01 10:51:16 +04:00
|
|
|
local flags = $(hostDebugFlags) [ FDefines DEBUG=$(level) ] ;
|
2005-10-29 20:27:43 +04:00
|
|
|
HOST_DEBUG_$(level)_CCFLAGS = $(flags) ;
|
|
|
|
HOST_DEBUG_$(level)_C++FLAGS = $(flags) ;
|
|
|
|
HOST_KERNEL_DEBUG_$(level)_CCFLAGS = $(flags) ;
|
|
|
|
HOST_KERNEL_DEBUG_$(level)_C++FLAGS = $(flags) ;
|
|
|
|
}
|
|
|
|
|
2007-08-23 02:07:03 +04:00
|
|
|
# ld flags
|
2011-06-17 00:53:44 +04:00
|
|
|
if $(HAIKU_HOST_USE_32BIT) = 1 {
|
2007-08-23 02:07:03 +04:00
|
|
|
HOST_LDFLAGS += -melf_i386 ;
|
|
|
|
}
|
|
|
|
|
2005-10-29 20:27:43 +04:00
|
|
|
# private kernel headers do be used when compiling kernel code
|
|
|
|
HOST_PRIVATE_KERNEL_HEADERS = ;
|
|
|
|
|
2008-05-14 07:55:16 +04:00
|
|
|
# private shared kernel/libroot headers
|
|
|
|
HOST_PRIVATE_SYSTEM_HEADERS = ;
|
|
|
|
|
2019-03-30 21:16:46 +03:00
|
|
|
# under Haiku use copyattr instead of cp
|
|
|
|
if $(HOST_PLATFORM_HAIKU_COMPATIBLE) {
|
2005-10-29 20:27:43 +04:00
|
|
|
CP = copyattr --data ;
|
|
|
|
}
|
|
|
|
|
2013-08-01 10:51:16 +04:00
|
|
|
HOST_DEFINES += ARCH_$(HOST_CPU) ;
|
2018-07-31 03:35:46 +03:00
|
|
|
HOST_DEFINES += _NO_INLINE_ASM __NO_INLINE__ ;
|
2005-10-29 20:27:43 +04:00
|
|
|
|
|
|
|
# for builds of tools in the current environment
|
2018-11-17 05:41:43 +03:00
|
|
|
HOST_BUILD_COMPATIBILITY_LIB_DIR = [ FDirName $(PWD) $(HOST_OBJECT_BASE_DIR) lib ] ;
|
2005-10-29 20:27:43 +04:00
|
|
|
|
* BuildPlatformMain supports overriding HOST_LIBROOT on the target now,
so one can set it to the static libroot, if desired.
* Generic attribute emulation:
- Added build tool rm_attrs, a simple "rm" replacement, which also
removes the attributes directory for a given file.
- Added build/scripts/rm_attrs shell script, which wraps the
invocation of the rm_attrs tool. If it doesn't exist yet, the
ordinary rm is used.
- The RM jam variable refers to the rm_attrs script now, i.e. whenever
something is removed by the build system, the attributes are removed
too (if the build tool has already been built, that is).
- Removed the shell function attrrmrf() in build_haiku_image. We use
the rm_attrs tool instead, if necessary.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@24528 a95241bf-73f2-0310-859d-f6bbb57e9c96
2008-03-23 00:05:03 +03:00
|
|
|
# For the generic attributes emulation: Target rm_attrs -- rm replacement that
|
|
|
|
# also removes the attributes.
|
|
|
|
HOST_RM_ATTRS_TARGET = ;
|
|
|
|
|
2017-12-14 03:47:39 +03:00
|
|
|
HOST_LIBROOT = libroot_build_function_remapper.a libroot_build.so ;
|
|
|
|
HOST_STATIC_LIBROOT = libroot_build_function_remapper.a libroot_build.a ;
|
|
|
|
HOST_LIBBE = libbe_build.so ;
|
|
|
|
|
2021-07-07 02:05:25 +03:00
|
|
|
# adding rpath allows directly invoking host tools without specifying
|
|
|
|
# a library search path
|
|
|
|
if $(HOST_PLATFORM) != darwin {
|
|
|
|
HOST_LINKFLAGS += -Wl,-rpath,$(HOST_BUILD_COMPATIBILITY_LIB_DIR) ;
|
|
|
|
}
|
|
|
|
|
2019-03-30 21:16:46 +03:00
|
|
|
if $(HOST_PLATFORM_HAIKU_COMPATIBLE) {
|
2009-09-23 14:14:07 +04:00
|
|
|
# the C++ standard and support libraries
|
2020-10-07 06:46:18 +03:00
|
|
|
if $(HOST_CC_IS_LEGACY_GCC) = 1 {
|
2009-01-25 22:25:16 +03:00
|
|
|
HOST_LIBSTDC++ = stdc++.r4 ;
|
2009-09-23 14:14:07 +04:00
|
|
|
HOST_LIBSUPC++ = ;
|
2009-01-25 22:25:16 +03:00
|
|
|
} else {
|
|
|
|
HOST_LIBSTDC++ = stdc++ ;
|
2009-09-23 14:14:07 +04:00
|
|
|
HOST_LIBSUPC++ = supc++ ;
|
2009-01-25 22:25:16 +03:00
|
|
|
}
|
|
|
|
|
2013-05-09 20:08:55 +04:00
|
|
|
HOST_ADD_BUILD_COMPATIBILITY_LIB_DIR
|
2019-08-31 00:11:50 +03:00
|
|
|
= "LIBRARY_PATH=\"$LIBRARY_PATH:$(HOST_BUILD_COMPATIBILITY_LIB_DIR)\"" ;
|
2013-10-01 04:37:54 +04:00
|
|
|
HOST_PTHREAD_LINKFLAGS = ;
|
2020-01-19 15:01:57 +03:00
|
|
|
HOST_LINKFLAGS += -lbsd ;
|
2006-08-09 12:13:07 +04:00
|
|
|
HOST_LIBRARY_NAME_MAP_input_server = /system/servers/input_server ;
|
2009-11-25 19:33:10 +03:00
|
|
|
HOST_DEFINES += __STDC_FORMAT_MACROS __STDC_LIMIT_MACROS ;
|
2009-11-26 02:48:45 +03:00
|
|
|
|
|
|
|
local compatibilityHeader = -include [ FDirName $(HAIKU_TOP) headers build
|
|
|
|
HaikuBuildCompatibility.h ] ;
|
|
|
|
HOST_CCFLAGS += $(compatibilityHeader) ;
|
|
|
|
HOST_C++FLAGS += $(compatibilityHeader) ;
|
2005-10-29 20:27:43 +04:00
|
|
|
} else {
|
2018-09-30 06:23:42 +03:00
|
|
|
HOST_LINKFLAGS += -lm -ldl ;
|
2005-10-29 20:27:43 +04:00
|
|
|
HOST_LIBSTDC++ = stdc++ ;
|
2021-10-23 00:03:16 +03:00
|
|
|
if $(HOST_PLATFORM) = darwin {
|
2009-05-25 02:07:06 +04:00
|
|
|
HOST_ADD_BUILD_COMPATIBILITY_LIB_DIR
|
2019-08-31 00:11:50 +03:00
|
|
|
= "DYLD_LIBRARY_PATH=\"$DYLD_LIBRARY_PATH:$(HOST_BUILD_COMPATIBILITY_LIB_DIR)\"" ;
|
2008-07-24 02:20:37 +04:00
|
|
|
} else {
|
|
|
|
HOST_ADD_BUILD_COMPATIBILITY_LIB_DIR
|
2019-08-31 00:11:50 +03:00
|
|
|
= "LD_LIBRARY_PATH=\"$LD_LIBRARY_PATH:$(HOST_BUILD_COMPATIBILITY_LIB_DIR)\"" ;
|
2008-07-24 02:20:37 +04:00
|
|
|
}
|
2005-10-29 20:27:43 +04:00
|
|
|
|
2018-11-23 23:40:50 +03:00
|
|
|
HOST_PTHREAD_LINKFLAGS = -pthread ;
|
2013-10-01 04:37:54 +04:00
|
|
|
|
2005-11-13 01:58:54 +03:00
|
|
|
# the C++ support library
|
2020-10-07 06:46:18 +03:00
|
|
|
if $(HOST_CC_IS_LEGACY_GCC) = 1 {
|
2005-11-13 01:58:54 +03:00
|
|
|
HOST_LIBSUPC++ = ;
|
|
|
|
} else {
|
|
|
|
HOST_LIBSUPC++ = supc++ ;
|
|
|
|
}
|
|
|
|
|
2007-05-18 19:59:04 +04:00
|
|
|
if $(HOST_PLATFORM) = darwin {
|
2007-10-30 20:17:50 +03:00
|
|
|
# part of the C++ runtime lives in libstdc++ on Darwin
|
|
|
|
HOST_LIBSUPC++ = gcc_s.1 stdc++ ;
|
|
|
|
HOST_LIBSTDC++ = ;
|
2010-01-21 07:04:51 +03:00
|
|
|
} else if $(HOST_PLATFORM) = freebsd {
|
2011-06-16 21:58:24 +04:00
|
|
|
if $(HOST_CPU) = x86_64 {
|
2010-01-21 07:04:51 +03:00
|
|
|
# amd64 FreeBSD 8 doesn't come without a shared libsupc++, and the
|
|
|
|
# static one prevents us from building shared libraries. So we have
|
|
|
|
# to work around by using the shared libstdc++.
|
|
|
|
HOST_LIBSUPC++ = stdc++ ;
|
|
|
|
HOST_LIBSTDC++ = ;
|
|
|
|
}
|
2007-05-18 19:59:04 +04:00
|
|
|
}
|
|
|
|
|
2007-05-04 13:55:31 +04:00
|
|
|
# Supposing this is a glibc platform, let's try to get features like large
|
2007-05-09 13:48:35 +04:00
|
|
|
# file support, ISO C 99 definitions, etc. On some platforms we need to
|
|
|
|
# request 64 bit off_t support explicitely.
|
2009-11-25 14:58:09 +03:00
|
|
|
HOST_DEFINES += _GNU_SOURCE _FILE_OFFSET_BITS=64 __STDC_FORMAT_MACROS
|
|
|
|
__STDC_LIMIT_MACROS ;
|
libroot_build: *Actually* fix attribute usage on Haiku.
To quote jscipione (from 95e8362c52af35a4012ca4d0facd62fb9856b619),
"Let me tell you a story about a bug" -- though this tale spans a much
lesser time than that one did.
In 5e19679ea35a79a26477c6215c7abba9bb7c4d00, I enabled libroot_build for
Haiku, instead of using the system libroot as we had before. There were
a number of bugs introduced along with this that I hadn't fixed (and there
may be more after this), but most of the obvious ones (crashes on x86_64...)
were fixed shortly enough.
Attribute usage, though, was a different story. Unlike most of the POSIX
calls in libroot, which were aliasing system functions no matter what the
platform, the attribute calls were not, as they are specific to Haiku.
Initially I had completely forgot about them, and it wasn't until a few days
later when I noticed that I had an "attributes" directory in my generated
that I realized that the "generic" attribute layer was being used on Haiku.
I attempted a fix for this in 5e19679ea35a79a26477c6215c7abba9bb7c4d00,
thinking that would clear the problem up, but I didn't actually run a test
beyond seeing that my BuildConfig had been updated properly. In fact,
BuildSetup was hard-wired to not even pass that definition through on
Haiku, and so that commit had in effect caused nothing.
My initial "fix" of just changing BuildSetup then caused a build failure,
as while libroot_build itself compiled, it ran into errors whenever attributes
were used, because in letting the real libroot's attribute calls shine
through, I had bypassed libroot_build's FD emulation/shim layer.
Then I tried and failed at three separate attempts to solve this with code:
- a version of the "fs_attr_...h" interface for Haiku. This proved possible
in theory, but in practice I would need to reimplement a lot of attribute
handling code in it, because all I had access to from there was syscalls.
- a version of "fs_attr_untyped" that bypassed its reimplementations of
the "fs*attr" functions for the libroot ones, only using the FD shim layer.
This proved possibly not even theoretically possible because it would have
caused preprocessor hell in some of the build headers, and also assumptions
about how attributes are read were totally different.
- a completely new "fs_attr_haiku" that was a completely new interface to
the fs*attr functions. This proved practically impossible because of the
need to include structures from the system libroot to call out to readdir,
etc. that attempts to solve would also have caused preprocessor hell.
Then I realized that the Linux xattr emulation library, which I'd used
as a reference when attempting the first solution, was shipped by default
as a system library in all builds of Haiku ... and so I could just tell
fs_attr_untyped to use the Linux xattr handler, and then link against libgnu.
So that is how I arrived at this strange and decidedly unorthodox solution
to a problem of my own creation.
2017-12-30 05:26:00 +03:00
|
|
|
}
|
2007-04-08 06:19:01 +04:00
|
|
|
|
libroot_build: *Actually* fix attribute usage on Haiku.
To quote jscipione (from 95e8362c52af35a4012ca4d0facd62fb9856b619),
"Let me tell you a story about a bug" -- though this tale spans a much
lesser time than that one did.
In 5e19679ea35a79a26477c6215c7abba9bb7c4d00, I enabled libroot_build for
Haiku, instead of using the system libroot as we had before. There were
a number of bugs introduced along with this that I hadn't fixed (and there
may be more after this), but most of the obvious ones (crashes on x86_64...)
were fixed shortly enough.
Attribute usage, though, was a different story. Unlike most of the POSIX
calls in libroot, which were aliasing system functions no matter what the
platform, the attribute calls were not, as they are specific to Haiku.
Initially I had completely forgot about them, and it wasn't until a few days
later when I noticed that I had an "attributes" directory in my generated
that I realized that the "generic" attribute layer was being used on Haiku.
I attempted a fix for this in 5e19679ea35a79a26477c6215c7abba9bb7c4d00,
thinking that would clear the problem up, but I didn't actually run a test
beyond seeing that my BuildConfig had been updated properly. In fact,
BuildSetup was hard-wired to not even pass that definition through on
Haiku, and so that commit had in effect caused nothing.
My initial "fix" of just changing BuildSetup then caused a build failure,
as while libroot_build itself compiled, it ran into errors whenever attributes
were used, because in letting the real libroot's attribute calls shine
through, I had bypassed libroot_build's FD emulation/shim layer.
Then I tried and failed at three separate attempts to solve this with code:
- a version of the "fs_attr_...h" interface for Haiku. This proved possible
in theory, but in practice I would need to reimplement a lot of attribute
handling code in it, because all I had access to from there was syscalls.
- a version of "fs_attr_untyped" that bypassed its reimplementations of
the "fs*attr" functions for the libroot ones, only using the FD shim layer.
This proved possibly not even theoretically possible because it would have
caused preprocessor hell in some of the build headers, and also assumptions
about how attributes are read were totally different.
- a completely new "fs_attr_haiku" that was a completely new interface to
the fs*attr functions. This proved practically impossible because of the
need to include structures from the system libroot to call out to readdir,
etc. that attempts to solve would also have caused preprocessor hell.
Then I realized that the Linux xattr emulation library, which I'd used
as a reference when attempting the first solution, was shipped by default
as a system library in all builds of Haiku ... and so I could just tell
fs_attr_untyped to use the Linux xattr handler, and then link against libgnu.
So that is how I arrived at this strange and decidedly unorthodox solution
to a problem of my own creation.
2017-12-30 05:26:00 +03:00
|
|
|
if $(HAIKU_HOST_USE_XATTR) = 1 {
|
|
|
|
HOST_DEFINES += HAIKU_HOST_USE_XATTR ;
|
|
|
|
} else {
|
|
|
|
# Otherwise the generic attribute emulation is used, which uses a
|
|
|
|
# directory per file to store its attribute. We need to redefine RM so
|
|
|
|
# that the attributes are removed as well. We use a wrapper script,
|
|
|
|
# which invokes a build tool. If the build tool hasn't been built yet,
|
|
|
|
# the normal "rm" is used and the attributes are leaked (likely there
|
|
|
|
# aren't any yet).
|
2019-08-31 00:11:50 +03:00
|
|
|
RM = $(HOST_ADD_BUILD_COMPATIBILITY_LIB_DIR)
|
libroot_build: *Actually* fix attribute usage on Haiku.
To quote jscipione (from 95e8362c52af35a4012ca4d0facd62fb9856b619),
"Let me tell you a story about a bug" -- though this tale spans a much
lesser time than that one did.
In 5e19679ea35a79a26477c6215c7abba9bb7c4d00, I enabled libroot_build for
Haiku, instead of using the system libroot as we had before. There were
a number of bugs introduced along with this that I hadn't fixed (and there
may be more after this), but most of the obvious ones (crashes on x86_64...)
were fixed shortly enough.
Attribute usage, though, was a different story. Unlike most of the POSIX
calls in libroot, which were aliasing system functions no matter what the
platform, the attribute calls were not, as they are specific to Haiku.
Initially I had completely forgot about them, and it wasn't until a few days
later when I noticed that I had an "attributes" directory in my generated
that I realized that the "generic" attribute layer was being used on Haiku.
I attempted a fix for this in 5e19679ea35a79a26477c6215c7abba9bb7c4d00,
thinking that would clear the problem up, but I didn't actually run a test
beyond seeing that my BuildConfig had been updated properly. In fact,
BuildSetup was hard-wired to not even pass that definition through on
Haiku, and so that commit had in effect caused nothing.
My initial "fix" of just changing BuildSetup then caused a build failure,
as while libroot_build itself compiled, it ran into errors whenever attributes
were used, because in letting the real libroot's attribute calls shine
through, I had bypassed libroot_build's FD emulation/shim layer.
Then I tried and failed at three separate attempts to solve this with code:
- a version of the "fs_attr_...h" interface for Haiku. This proved possible
in theory, but in practice I would need to reimplement a lot of attribute
handling code in it, because all I had access to from there was syscalls.
- a version of "fs_attr_untyped" that bypassed its reimplementations of
the "fs*attr" functions for the libroot ones, only using the FD shim layer.
This proved possibly not even theoretically possible because it would have
caused preprocessor hell in some of the build headers, and also assumptions
about how attributes are read were totally different.
- a completely new "fs_attr_haiku" that was a completely new interface to
the fs*attr functions. This proved practically impossible because of the
need to include structures from the system libroot to call out to readdir,
etc. that attempts to solve would also have caused preprocessor hell.
Then I realized that the Linux xattr emulation library, which I'd used
as a reference when attempting the first solution, was shipped by default
as a system library in all builds of Haiku ... and so I could just tell
fs_attr_untyped to use the Linux xattr handler, and then link against libgnu.
So that is how I arrived at this strange and decidedly unorthodox solution
to a problem of my own creation.
2017-12-30 05:26:00 +03:00
|
|
|
[ FDirName $(HAIKU_TOP) build scripts rm_attrs ]
|
|
|
|
[ FDirName $(HAIKU_OBJECT_DIR) $(HOST_PLATFORM) $(HOST_ARCH) release
|
|
|
|
tools rm_attrs ] -f ;
|
|
|
|
# assumes that rm_attrs is built with debugging disabled
|
|
|
|
HOST_RM_ATTRS_TARGET = <build>rm_attrs ;
|
|
|
|
|
|
|
|
# If specified, use xattr support to tag files with unique IDs.
|
|
|
|
if $(HAIKU_HOST_USE_XATTR_REF) = 1 {
|
|
|
|
HOST_DEFINES += HAIKU_HOST_USE_XATTR_REF ;
|
2007-04-08 06:19:01 +04:00
|
|
|
}
|
2005-10-29 20:27:43 +04:00
|
|
|
}
|
|
|
|
|
2007-08-13 02:15:10 +04:00
|
|
|
# network libraries
|
|
|
|
if $(HOST_PLATFORM_HAIKU_COMPATIBLE) {
|
|
|
|
HOST_NETWORK_LIBS = network ;
|
2008-05-14 17:49:48 +04:00
|
|
|
HOST_NETAPI_LIB = bnetapi ;
|
2007-08-13 02:15:10 +04:00
|
|
|
HOST_SELECT_UNAME_ETC_LIB = ; # libroot
|
|
|
|
} else {
|
2018-11-24 00:29:57 +03:00
|
|
|
# Linux, ...
|
2007-08-13 02:15:10 +04:00
|
|
|
HOST_NETWORK_LIBS = ;
|
|
|
|
HOST_NETAPI_LIB = ;
|
|
|
|
HOST_SELECT_UNAME_ETC_LIB = ;
|
|
|
|
}
|
|
|
|
|
2005-10-29 20:27:43 +04:00
|
|
|
# define the executable MIME type
|
|
|
|
HOST_EXECUTABLE_MIME_TYPE = "application/x-vnd.Be-elfexecutable" ;
|
|
|
|
|
|
|
|
if $(METROWERKS) {
|
|
|
|
# at least parts of Haiku still can be compiled with
|
|
|
|
# the Metrowerks compiler on BeOS/PPC
|
|
|
|
HOST_EXECUTABLE_MIME_TYPE = "application/x-be-executable" ;
|
|
|
|
}
|
|
|
|
|
|
|
|
# Be API compatibility
|
|
|
|
HOST_BE_API_HEADERS = ;
|
|
|
|
HOST_BE_API_CCFLAGS = ;
|
|
|
|
HOST_BE_API_C++FLAGS = ;
|
2006-11-29 21:08:00 +03:00
|
|
|
|
|
|
|
# Add directory with system headers we need when building something for the host
|
|
|
|
# platform, e.g. containing missing POSIX/GNU headers.
|
|
|
|
HOST_HDRS += [ FDirName $(HAIKU_TOP) headers build host $(HOST_PLATFORM) ] ;
|
|
|
|
|
2013-09-30 03:42:12 +04:00
|
|
|
if $(HOST_PLATFORM) = freebsd {
|
2013-09-30 04:55:11 +04:00
|
|
|
# FreeBSD's gcc doesn't include /usr/local/* in its search paths,
|
|
|
|
# though that's where most things from ports wind up being installed.
|
2017-12-28 07:05:50 +03:00
|
|
|
HOST_HDRS += /usr/local/include /usr/include/gnu ;
|
2014-05-01 14:50:11 +04:00
|
|
|
HOST_LINKFLAGS += -L/usr/local/lib ;
|
2013-09-30 03:42:12 +04:00
|
|
|
}
|
|
|
|
|
2014-02-02 22:10:57 +04:00
|
|
|
if $(HOST_PLATFORM) = darwin {
|
2018-02-17 03:21:09 +03:00
|
|
|
HOST_HDRS += [ FDirName $(HAIKU_TOP) src build libgnuregex ] ;
|
|
|
|
|
2015-07-23 14:00:02 +03:00
|
|
|
# Mac OS X users may be using macports libraries, in which case the headers
|
|
|
|
# and the libs are located in /opt/local/.
|
|
|
|
HOST_HDRS += /opt/local/include ;
|
|
|
|
HOST_LINKFLAGS += -L/opt/local/lib ;
|
2017-01-19 12:15:28 +03:00
|
|
|
|
|
|
|
# Mac OS X users may be using homebrew libraries, in which case the headers
|
|
|
|
# and the libs are locted in the /usr/local/.
|
|
|
|
HOST_HDRS += /usr/local/include ;
|
|
|
|
HOST_LINKFLAGS += -L/usr/local/lib ;
|
2014-02-02 22:10:57 +04:00
|
|
|
}
|
|
|
|
|
2013-05-09 20:08:55 +04:00
|
|
|
HOST_BE_API_HEADERS =
|
|
|
|
[ FDirName $(HAIKU_TOP) headers build ]
|
|
|
|
[ FDirName $(HAIKU_TOP) headers build os ]
|
2013-11-22 15:20:39 +04:00
|
|
|
[ FDirName $(HAIKU_TOP) headers build os add-ons registrar ]
|
2013-05-09 20:08:55 +04:00
|
|
|
[ FDirName $(HAIKU_TOP) headers build os app ]
|
2016-04-22 22:55:55 +03:00
|
|
|
[ FDirName $(HAIKU_TOP) headers build os bluetooth ]
|
2013-05-09 20:08:55 +04:00
|
|
|
[ FDirName $(HAIKU_TOP) headers build os drivers ]
|
|
|
|
[ FDirName $(HAIKU_TOP) headers build os kernel ]
|
|
|
|
[ FDirName $(HAIKU_TOP) headers build os interface ]
|
|
|
|
[ FDirName $(HAIKU_TOP) headers build os locale ]
|
|
|
|
[ FDirName $(HAIKU_TOP) headers build os storage ]
|
|
|
|
[ FDirName $(HAIKU_TOP) headers build os support ]
|
|
|
|
[ FDirName $(HAIKU_TOP) headers build private ]
|
|
|
|
;
|
2018-08-01 00:49:38 +03:00
|
|
|
HOST_BE_API_CCFLAGS = -include [ FDirName $(HAIKU_TOP) headers build
|
|
|
|
BeOSBuildCompatibility.h ] ;
|
|
|
|
HOST_BE_API_C++FLAGS = $(HOST_BE_API_CCFLAGS) ;
|
2007-08-25 01:05:20 +04:00
|
|
|
|
2019-03-02 22:23:12 +03:00
|
|
|
if ! $(HOST_PYTHON) {
|
|
|
|
Echo "HOST_PYTHON variable not defined --> will default to 'python'" ;
|
|
|
|
HOST_PYTHON ?= "python" ;
|
|
|
|
}
|
2005-10-29 20:27:43 +04:00
|
|
|
|
2013-08-01 10:51:16 +04:00
|
|
|
#pragma mark - target platform settings
|
2005-10-29 20:27:43 +04:00
|
|
|
|
|
|
|
|
|
|
|
# check the target platform compatibility
|
|
|
|
SetPlatformCompatibilityFlagVariables TARGET_PLATFORM : TARGET : target ;
|
|
|
|
|
2017-02-17 21:52:31 +03:00
|
|
|
# Haiku architecture is undefined on host-only builds
|
|
|
|
# set here to host arch to prevent recusive loops.
|
|
|
|
if $(HAIKU_HOST_BUILD_ONLY) = 1 {
|
2022-01-24 01:40:09 +03:00
|
|
|
Echo "Host tools build for $(HOST_ARCH)" ;
|
2017-02-17 21:52:31 +03:00
|
|
|
HAIKU_ARCH = $(HOST_ARCH) ;
|
|
|
|
HAIKU_KERNEL_ARCH = $(HOST_ARCH) ;
|
2022-01-24 01:40:09 +03:00
|
|
|
HAIKU_KERNEL_ARCH_DIR = $(HAIKU_KERNEL_ARCH) ;
|
2017-02-17 21:52:31 +03:00
|
|
|
}
|
|
|
|
|
2005-10-29 20:27:43 +04:00
|
|
|
# Set TARGET_* variables either from HAIKU_* or HOST_* depending on the
|
2013-08-01 10:51:16 +04:00
|
|
|
# specified TARGET_PLATFORM. Some variables are package architecture dependent
|
|
|
|
# and their name gets a respective suffix. A few variables exist both with and
|
|
|
|
# without suffix. The latter is either equivalent to the variable with the
|
|
|
|
# primary architecture suffix (e.g. TARGET_ARCH) or is (additionally) applicable
|
|
|
|
# for all architectures (e.g. TARGET_DEFINES).
|
2005-10-29 20:27:43 +04:00
|
|
|
|
|
|
|
local buildVars =
|
2021-10-01 23:26:45 +03:00
|
|
|
ARCH ARCHS KERNEL_ARCH KERNEL_ARCH_DIR PACKAGING_ARCH PACKAGING_ARCHS
|
2005-10-29 20:27:43 +04:00
|
|
|
|
2013-08-01 10:51:16 +04:00
|
|
|
DEFINES
|
2008-01-11 03:36:44 +03:00
|
|
|
KERNEL_DEFINES
|
2005-10-29 20:27:43 +04:00
|
|
|
|
|
|
|
KERNEL_CCFLAGS KERNEL_C++FLAGS
|
2012-07-19 20:53:46 +04:00
|
|
|
KERNEL_PIC_CCFLAGS KERNEL_PIC_LINKFLAGS KERNEL_ADDON_LINKFLAGS
|
2016-04-14 10:15:55 +03:00
|
|
|
BOOT_CCFLAGS BOOT_C++FLAGS BOOT_LINKFLAGS BOOT_LDFLAGS
|
2005-10-29 20:27:43 +04:00
|
|
|
|
|
|
|
KERNEL_WARNING_CCFLAGS KERNEL_WARNING_C++FLAGS
|
|
|
|
|
|
|
|
KERNEL_DEBUG_$(HAIKU_DEBUG_LEVELS)_CCFLAGS
|
|
|
|
KERNEL_DEBUG_$(HAIKU_DEBUG_LEVELS)_C++FLAGS
|
|
|
|
|
|
|
|
PRIVATE_KERNEL_HEADERS
|
|
|
|
|
2007-08-13 02:15:10 +04:00
|
|
|
NETWORK_LIBS NETAPI_LIB SELECT_UNAME_ETC_LIB
|
|
|
|
|
2013-08-01 10:51:16 +04:00
|
|
|
EXECUTABLE_MIME_TYPE
|
|
|
|
|
|
|
|
OBJECT_BASE_DIR COMMON_ARCH_OBJECT_DIR
|
|
|
|
;
|
|
|
|
|
|
|
|
local archDependentBuildVars =
|
2020-10-07 06:46:18 +03:00
|
|
|
ARCH CPU
|
2013-08-01 10:51:16 +04:00
|
|
|
|
|
|
|
AR CC C++ ELFEDIT LD OBJCOPY RANLIB STRIP
|
|
|
|
|
2020-10-07 06:46:18 +03:00
|
|
|
CC_IS_LEGACY_GCC CC_IS_CLANG
|
|
|
|
|
2013-08-01 10:51:16 +04:00
|
|
|
ARFLAGS ASFLAGS UNARFLAGS CPPFLAGS CCFLAGS C++FLAGS HDRS LDFLAGS
|
|
|
|
LINK LINKFLAGS
|
|
|
|
|
Fix kernel -Werror support
The introduction of secondary arch support for kernel files disabled
-Werror for all kernel files, since the -Werror flags were moved from
{CC,C++}FLAGS to TARGET_WARNING_{CC,C++}FLAGS_<arch>, which, however,
was overwritten by the SetupKernel rule. This commit introduces new
global variables {HAIKU,HOST,TARGET}_WERROR_FLAGS[_<arch>], which
contain the additional -Werror flags to be applied for the architecture.
The config variable WARNINGS can be set to "treatAsErrors" to cause
-Werror and {HOST,TARGET}_WERROR_FLAGS[_<arch>] to be appended to the
compilation flags.
Fixes #10280.
2013-12-05 15:37:14 +04:00
|
|
|
WARNING_CCFLAGS WARNING_C++FLAGS WERROR_FLAGS
|
2013-08-01 10:51:16 +04:00
|
|
|
|
|
|
|
DEBUG_$(HAIKU_DEBUG_LEVELS)_CCFLAGS DEBUG_$(HAIKU_DEBUG_LEVELS)_C++FLAGS
|
|
|
|
|
|
|
|
INCLUDES_SEPARATOR LOCAL_INCLUDES_OPTION SYSTEM_INCLUDES_OPTION
|
|
|
|
|
|
|
|
PRIVATE_SYSTEM_HEADERS
|
|
|
|
|
|
|
|
ARCH_OBJECT_DIR COMMON_DEBUG_OBJECT_DIR
|
2005-10-29 20:27:43 +04:00
|
|
|
DEBUG_$(HAIKU_DEBUG_LEVELS)_OBJECT_DIR
|
2013-08-01 10:51:16 +04:00
|
|
|
;
|
2005-10-29 20:27:43 +04:00
|
|
|
|
2018-01-01 00:10:55 +03:00
|
|
|
# target platform setup
|
|
|
|
local var ;
|
|
|
|
for var in $(buildVars) {
|
|
|
|
TARGET_$(var) = $(HAIKU_$(var)) ;
|
|
|
|
}
|
2005-10-29 20:27:43 +04:00
|
|
|
|
2018-01-01 00:10:55 +03:00
|
|
|
for var in $(archDependentBuildVars)_$(TARGET_PACKAGING_ARCHS) {
|
|
|
|
TARGET_$(var) = $(HAIKU_$(var)) ;
|
|
|
|
}
|
2012-05-27 00:47:27 +04:00
|
|
|
|
2018-01-01 00:10:55 +03:00
|
|
|
TARGET_BOOT_LIBGCC = $(HAIKU_BOOT_LIBGCC_$(TARGET_PACKAGING_ARCH)) ;
|
|
|
|
TARGET_BOOT_LIBSUPC++ = $(HAIKU_BOOT_LIBSUPC++_$(TARGET_PACKAGING_ARCH)) ;
|
* Reintroduced third LinkAgainst parameter <mapLibs>, defaulting to true.
Library names are now mapped for all targets but "host" (not only for
"haiku") -- added one more level of indirection to achieve that.
(TARGET_LIBRARY_NAME_MAP -> *_LIBRARY_NAME_MAP_*).
* Renamed build/HaikuBuildCompatibility.h to BeOSBuildCompatibility.h
(auto-included when compiling something that uses the Be API for platform
"host" on anon-BeOS platform), and introduced build/HaikuBuildCompatibility.h,
which can be included when compiling something that can be built for both,
Haiku and BeOS compatible platforms.
* Introduced libhaikucompat.a, a library that adds a few functions existing
under Haiku, but not under BeOS.
* New rule AddSubDirSupportedPlatforms.
* Renamed libopenbeos.so to libbe_haiku.so.
* Introduced new target platform "libbe_test", which is basically equivalent
to a BeOS compatible host platform target, with the exception, that instead
of the host platform's libbe.so a special build of Haiku's libbe.so
(libbe_haiku.so (formerly known as libopenbeos.so)) is used. Furthermore
Haiku's public app, interface, storage, and support kit headers are used
when compiling. This replaces the less nice way in which the test app server
and applications for this test environment were built.
When building for platform "libbe_test", the library name "be" is
autotranslated to "libbe_haiku.so". Thus most applications don't need
special fiddling when them building them for the app server test environment;
usually an "AddSubDirSupportedPlatforms libbe_test ;" will suffice.
* Reduced the dependencies of <syscalls.h> and fixed problems caused by this
(e.g. source files not including the needed headers directly).
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@14749 a95241bf-73f2-0310-859d-f6bbb57e9c96
2005-11-07 19:07:25 +03:00
|
|
|
|
2018-10-09 03:28:00 +03:00
|
|
|
TARGET_KERNEL_PLATFORM ?= $(HAIKU_KERNEL_PLATFORM) ;
|
2013-08-01 10:51:16 +04:00
|
|
|
|
2018-01-01 00:10:55 +03:00
|
|
|
local architecture ;
|
|
|
|
for architecture in $(TARGET_PACKAGING_ARCHS) {
|
|
|
|
TARGET_DEFINES_$(architecture) = $(HAIKU_DEFINES_$(architecture)) ;
|
|
|
|
TARGET_LIBRARY_NAME_MAP_$(architecture)
|
|
|
|
= HAIKU_LIBRARY_NAME_MAP_$(architecture) ;
|
2005-10-29 20:27:43 +04:00
|
|
|
}
|
|
|
|
|
2005-11-01 19:24:29 +03:00
|
|
|
# define macro, for identifying the platform
|
|
|
|
switch $(TARGET_PLATFORM) {
|
* Reintroduced third LinkAgainst parameter <mapLibs>, defaulting to true.
Library names are now mapped for all targets but "host" (not only for
"haiku") -- added one more level of indirection to achieve that.
(TARGET_LIBRARY_NAME_MAP -> *_LIBRARY_NAME_MAP_*).
* Renamed build/HaikuBuildCompatibility.h to BeOSBuildCompatibility.h
(auto-included when compiling something that uses the Be API for platform
"host" on anon-BeOS platform), and introduced build/HaikuBuildCompatibility.h,
which can be included when compiling something that can be built for both,
Haiku and BeOS compatible platforms.
* Introduced libhaikucompat.a, a library that adds a few functions existing
under Haiku, but not under BeOS.
* New rule AddSubDirSupportedPlatforms.
* Renamed libopenbeos.so to libbe_haiku.so.
* Introduced new target platform "libbe_test", which is basically equivalent
to a BeOS compatible host platform target, with the exception, that instead
of the host platform's libbe.so a special build of Haiku's libbe.so
(libbe_haiku.so (formerly known as libopenbeos.so)) is used. Furthermore
Haiku's public app, interface, storage, and support kit headers are used
when compiling. This replaces the less nice way in which the test app server
and applications for this test environment were built.
When building for platform "libbe_test", the library name "be" is
autotranslated to "libbe_haiku.so". Thus most applications don't need
special fiddling when them building them for the app server test environment;
usually an "AddSubDirSupportedPlatforms libbe_test ;" will suffice.
* Reduced the dependencies of <syscalls.h> and fixed problems caused by this
(e.g. source files not including the needed headers directly).
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@14749 a95241bf-73f2-0310-859d-f6bbb57e9c96
2005-11-07 19:07:25 +03:00
|
|
|
case haiku : TARGET_DEFINES += HAIKU_TARGET_PLATFORM_HAIKU ;
|
|
|
|
case libbe_test : TARGET_DEFINES += HAIKU_TARGET_PLATFORM_LIBBE_TEST ;
|
|
|
|
}
|
|
|
|
|
|
|
|
# define macro, for identifying the host platform
|
|
|
|
switch $(HOST_PLATFORM) {
|
2007-08-03 01:13:56 +04:00
|
|
|
case haiku_host : HOST_DEFINES += HAIKU_HOST_PLATFORM_HAIKU ;
|
2006-01-24 19:31:27 +03:00
|
|
|
case linux : HOST_DEFINES += HAIKU_HOST_PLATFORM_LINUX ;
|
2006-01-26 02:55:14 +03:00
|
|
|
case freebsd : HOST_DEFINES += HAIKU_HOST_PLATFORM_FREEBSD ;
|
2007-05-18 19:59:04 +04:00
|
|
|
case darwin : HOST_DEFINES += HAIKU_HOST_PLATFORM_DARWIN ;
|
* Reintroduced third LinkAgainst parameter <mapLibs>, defaulting to true.
Library names are now mapped for all targets but "host" (not only for
"haiku") -- added one more level of indirection to achieve that.
(TARGET_LIBRARY_NAME_MAP -> *_LIBRARY_NAME_MAP_*).
* Renamed build/HaikuBuildCompatibility.h to BeOSBuildCompatibility.h
(auto-included when compiling something that uses the Be API for platform
"host" on anon-BeOS platform), and introduced build/HaikuBuildCompatibility.h,
which can be included when compiling something that can be built for both,
Haiku and BeOS compatible platforms.
* Introduced libhaikucompat.a, a library that adds a few functions existing
under Haiku, but not under BeOS.
* New rule AddSubDirSupportedPlatforms.
* Renamed libopenbeos.so to libbe_haiku.so.
* Introduced new target platform "libbe_test", which is basically equivalent
to a BeOS compatible host platform target, with the exception, that instead
of the host platform's libbe.so a special build of Haiku's libbe.so
(libbe_haiku.so (formerly known as libopenbeos.so)) is used. Furthermore
Haiku's public app, interface, storage, and support kit headers are used
when compiling. This replaces the less nice way in which the test app server
and applications for this test environment were built.
When building for platform "libbe_test", the library name "be" is
autotranslated to "libbe_haiku.so". Thus most applications don't need
special fiddling when them building them for the app server test environment;
usually an "AddSubDirSupportedPlatforms libbe_test ;" will suffice.
* Reduced the dependencies of <syscalls.h> and fixed problems caused by this
(e.g. source files not including the needed headers directly).
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@14749 a95241bf-73f2-0310-859d-f6bbb57e9c96
2005-11-07 19:07:25 +03:00
|
|
|
}
|
|
|
|
|
2009-11-24 21:57:49 +03:00
|
|
|
# define host platform 64 bit macro
|
|
|
|
if $(HOST_PLATFORM_IS_64_BIT) {
|
|
|
|
HOST_DEFINES += HAIKU_HOST_PLATFORM_64_BIT ;
|
|
|
|
}
|
* Reintroduced third LinkAgainst parameter <mapLibs>, defaulting to true.
Library names are now mapped for all targets but "host" (not only for
"haiku") -- added one more level of indirection to achieve that.
(TARGET_LIBRARY_NAME_MAP -> *_LIBRARY_NAME_MAP_*).
* Renamed build/HaikuBuildCompatibility.h to BeOSBuildCompatibility.h
(auto-included when compiling something that uses the Be API for platform
"host" on anon-BeOS platform), and introduced build/HaikuBuildCompatibility.h,
which can be included when compiling something that can be built for both,
Haiku and BeOS compatible platforms.
* Introduced libhaikucompat.a, a library that adds a few functions existing
under Haiku, but not under BeOS.
* New rule AddSubDirSupportedPlatforms.
* Renamed libopenbeos.so to libbe_haiku.so.
* Introduced new target platform "libbe_test", which is basically equivalent
to a BeOS compatible host platform target, with the exception, that instead
of the host platform's libbe.so a special build of Haiku's libbe.so
(libbe_haiku.so (formerly known as libopenbeos.so)) is used. Furthermore
Haiku's public app, interface, storage, and support kit headers are used
when compiling. This replaces the less nice way in which the test app server
and applications for this test environment were built.
When building for platform "libbe_test", the library name "be" is
autotranslated to "libbe_haiku.so". Thus most applications don't need
special fiddling when them building them for the app server test environment;
usually an "AddSubDirSupportedPlatforms libbe_test ;" will suffice.
* Reduced the dependencies of <syscalls.h> and fixed problems caused by this
(e.g. source files not including the needed headers directly).
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@14749 a95241bf-73f2-0310-859d-f6bbb57e9c96
2005-11-07 19:07:25 +03:00
|
|
|
|
2013-07-05 12:51:42 +04:00
|
|
|
# define Haiku packaging architecture macro for host build
|
|
|
|
HOST_DEFINES += HAIKU_PACKAGING_ARCH=\\\"$(HAIKU_PACKAGING_ARCH)\\\" ;
|
|
|
|
|
|
|
|
|
* Reintroduced third LinkAgainst parameter <mapLibs>, defaulting to true.
Library names are now mapped for all targets but "host" (not only for
"haiku") -- added one more level of indirection to achieve that.
(TARGET_LIBRARY_NAME_MAP -> *_LIBRARY_NAME_MAP_*).
* Renamed build/HaikuBuildCompatibility.h to BeOSBuildCompatibility.h
(auto-included when compiling something that uses the Be API for platform
"host" on anon-BeOS platform), and introduced build/HaikuBuildCompatibility.h,
which can be included when compiling something that can be built for both,
Haiku and BeOS compatible platforms.
* Introduced libhaikucompat.a, a library that adds a few functions existing
under Haiku, but not under BeOS.
* New rule AddSubDirSupportedPlatforms.
* Renamed libopenbeos.so to libbe_haiku.so.
* Introduced new target platform "libbe_test", which is basically equivalent
to a BeOS compatible host platform target, with the exception, that instead
of the host platform's libbe.so a special build of Haiku's libbe.so
(libbe_haiku.so (formerly known as libopenbeos.so)) is used. Furthermore
Haiku's public app, interface, storage, and support kit headers are used
when compiling. This replaces the less nice way in which the test app server
and applications for this test environment were built.
When building for platform "libbe_test", the library name "be" is
autotranslated to "libbe_haiku.so". Thus most applications don't need
special fiddling when them building them for the app server test environment;
usually an "AddSubDirSupportedPlatforms libbe_test ;" will suffice.
* Reduced the dependencies of <syscalls.h> and fixed problems caused by this
(e.g. source files not including the needed headers directly).
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@14749 a95241bf-73f2-0310-859d-f6bbb57e9c96
2005-11-07 19:07:25 +03:00
|
|
|
#pragma mark -
|
|
|
|
|
2006-08-03 21:50:19 +04:00
|
|
|
# special target libbe_test
|
|
|
|
|
|
|
|
if $(TARGET_PLATFORM) = libbe_test {
|
|
|
|
# headers and flags
|
2013-08-01 10:51:16 +04:00
|
|
|
TARGET_HDRS_$(TARGET_PACKAGING_ARCH) +=
|
2012-04-05 00:23:14 +04:00
|
|
|
[ PublicHeaders $(DOT) app drivers game interface kernel locale storage
|
2007-10-21 14:15:57 +04:00
|
|
|
support ]
|
2006-08-03 21:50:19 +04:00
|
|
|
[ PrivateHeaders $(DOT) ] ;
|
|
|
|
TARGET_DEFINES += __HAIKU__ ;
|
* Reintroduced third LinkAgainst parameter <mapLibs>, defaulting to true.
Library names are now mapped for all targets but "host" (not only for
"haiku") -- added one more level of indirection to achieve that.
(TARGET_LIBRARY_NAME_MAP -> *_LIBRARY_NAME_MAP_*).
* Renamed build/HaikuBuildCompatibility.h to BeOSBuildCompatibility.h
(auto-included when compiling something that uses the Be API for platform
"host" on anon-BeOS platform), and introduced build/HaikuBuildCompatibility.h,
which can be included when compiling something that can be built for both,
Haiku and BeOS compatible platforms.
* Introduced libhaikucompat.a, a library that adds a few functions existing
under Haiku, but not under BeOS.
* New rule AddSubDirSupportedPlatforms.
* Renamed libopenbeos.so to libbe_haiku.so.
* Introduced new target platform "libbe_test", which is basically equivalent
to a BeOS compatible host platform target, with the exception, that instead
of the host platform's libbe.so a special build of Haiku's libbe.so
(libbe_haiku.so (formerly known as libopenbeos.so)) is used. Furthermore
Haiku's public app, interface, storage, and support kit headers are used
when compiling. This replaces the less nice way in which the test app server
and applications for this test environment were built.
When building for platform "libbe_test", the library name "be" is
autotranslated to "libbe_haiku.so". Thus most applications don't need
special fiddling when them building them for the app server test environment;
usually an "AddSubDirSupportedPlatforms libbe_test ;" will suffice.
* Reduced the dependencies of <syscalls.h> and fixed problems caused by this
(e.g. source files not including the needed headers directly).
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@14749 a95241bf-73f2-0310-859d-f6bbb57e9c96
2005-11-07 19:07:25 +03:00
|
|
|
|
2013-08-01 10:51:16 +04:00
|
|
|
TARGET_PRIVATE_SYSTEM_HEADERS_$(TARGET_PACKAGING_ARCH) =
|
2008-06-19 04:05:48 +04:00
|
|
|
[ PrivateHeaders $(DOT) system system/arch/$(TARGET_ARCH) ] ;
|
|
|
|
|
* Reintroduced third LinkAgainst parameter <mapLibs>, defaulting to true.
Library names are now mapped for all targets but "host" (not only for
"haiku") -- added one more level of indirection to achieve that.
(TARGET_LIBRARY_NAME_MAP -> *_LIBRARY_NAME_MAP_*).
* Renamed build/HaikuBuildCompatibility.h to BeOSBuildCompatibility.h
(auto-included when compiling something that uses the Be API for platform
"host" on anon-BeOS platform), and introduced build/HaikuBuildCompatibility.h,
which can be included when compiling something that can be built for both,
Haiku and BeOS compatible platforms.
* Introduced libhaikucompat.a, a library that adds a few functions existing
under Haiku, but not under BeOS.
* New rule AddSubDirSupportedPlatforms.
* Renamed libopenbeos.so to libbe_haiku.so.
* Introduced new target platform "libbe_test", which is basically equivalent
to a BeOS compatible host platform target, with the exception, that instead
of the host platform's libbe.so a special build of Haiku's libbe.so
(libbe_haiku.so (formerly known as libopenbeos.so)) is used. Furthermore
Haiku's public app, interface, storage, and support kit headers are used
when compiling. This replaces the less nice way in which the test app server
and applications for this test environment were built.
When building for platform "libbe_test", the library name "be" is
autotranslated to "libbe_haiku.so". Thus most applications don't need
special fiddling when them building them for the app server test environment;
usually an "AddSubDirSupportedPlatforms libbe_test ;" will suffice.
* Reduced the dependencies of <syscalls.h> and fixed problems caused by this
(e.g. source files not including the needed headers directly).
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@14749 a95241bf-73f2-0310-859d-f6bbb57e9c96
2005-11-07 19:07:25 +03:00
|
|
|
# directories
|
|
|
|
TARGET_OBJECT_BASE_DIR
|
|
|
|
= [ FDirName $(HAIKU_OBJECT_DIR) $(TARGET_PLATFORM) ] ;
|
|
|
|
TARGET_COMMON_ARCH_OBJECT_DIR
|
|
|
|
= [ FDirName $(TARGET_OBJECT_BASE_DIR) common ] ;
|
2013-08-01 10:51:16 +04:00
|
|
|
TARGET_ARCH_OBJECT_DIR_$(TARGET_PACKAGING_ARCH)
|
* Reintroduced third LinkAgainst parameter <mapLibs>, defaulting to true.
Library names are now mapped for all targets but "host" (not only for
"haiku") -- added one more level of indirection to achieve that.
(TARGET_LIBRARY_NAME_MAP -> *_LIBRARY_NAME_MAP_*).
* Renamed build/HaikuBuildCompatibility.h to BeOSBuildCompatibility.h
(auto-included when compiling something that uses the Be API for platform
"host" on anon-BeOS platform), and introduced build/HaikuBuildCompatibility.h,
which can be included when compiling something that can be built for both,
Haiku and BeOS compatible platforms.
* Introduced libhaikucompat.a, a library that adds a few functions existing
under Haiku, but not under BeOS.
* New rule AddSubDirSupportedPlatforms.
* Renamed libopenbeos.so to libbe_haiku.so.
* Introduced new target platform "libbe_test", which is basically equivalent
to a BeOS compatible host platform target, with the exception, that instead
of the host platform's libbe.so a special build of Haiku's libbe.so
(libbe_haiku.so (formerly known as libopenbeos.so)) is used. Furthermore
Haiku's public app, interface, storage, and support kit headers are used
when compiling. This replaces the less nice way in which the test app server
and applications for this test environment were built.
When building for platform "libbe_test", the library name "be" is
autotranslated to "libbe_haiku.so". Thus most applications don't need
special fiddling when them building them for the app server test environment;
usually an "AddSubDirSupportedPlatforms libbe_test ;" will suffice.
* Reduced the dependencies of <syscalls.h> and fixed problems caused by this
(e.g. source files not including the needed headers directly).
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@14749 a95241bf-73f2-0310-859d-f6bbb57e9c96
2005-11-07 19:07:25 +03:00
|
|
|
= [ FDirName $(TARGET_OBJECT_BASE_DIR) $(TARGET_ARCH) ] ;
|
2013-08-01 10:51:16 +04:00
|
|
|
TARGET_COMMON_DEBUG_OBJECT_DIR_$(TARGET_PACKAGING_ARCH)
|
|
|
|
= [ FDirName $(TARGET_ARCH_OBJECT_DIR_$(TARGET_PACKAGING_ARCH))
|
|
|
|
common ] ;
|
|
|
|
TARGET_DEBUG_0_OBJECT_DIR_$(TARGET_PACKAGING_ARCH)
|
|
|
|
= [ FDirName $(TARGET_ARCH_OBJECT_DIR_$(TARGET_PACKAGING_ARCH))
|
|
|
|
release ] ;
|
* Reintroduced third LinkAgainst parameter <mapLibs>, defaulting to true.
Library names are now mapped for all targets but "host" (not only for
"haiku") -- added one more level of indirection to achieve that.
(TARGET_LIBRARY_NAME_MAP -> *_LIBRARY_NAME_MAP_*).
* Renamed build/HaikuBuildCompatibility.h to BeOSBuildCompatibility.h
(auto-included when compiling something that uses the Be API for platform
"host" on anon-BeOS platform), and introduced build/HaikuBuildCompatibility.h,
which can be included when compiling something that can be built for both,
Haiku and BeOS compatible platforms.
* Introduced libhaikucompat.a, a library that adds a few functions existing
under Haiku, but not under BeOS.
* New rule AddSubDirSupportedPlatforms.
* Renamed libopenbeos.so to libbe_haiku.so.
* Introduced new target platform "libbe_test", which is basically equivalent
to a BeOS compatible host platform target, with the exception, that instead
of the host platform's libbe.so a special build of Haiku's libbe.so
(libbe_haiku.so (formerly known as libopenbeos.so)) is used. Furthermore
Haiku's public app, interface, storage, and support kit headers are used
when compiling. This replaces the less nice way in which the test app server
and applications for this test environment were built.
When building for platform "libbe_test", the library name "be" is
autotranslated to "libbe_haiku.so". Thus most applications don't need
special fiddling when them building them for the app server test environment;
usually an "AddSubDirSupportedPlatforms libbe_test ;" will suffice.
* Reduced the dependencies of <syscalls.h> and fixed problems caused by this
(e.g. source files not including the needed headers directly).
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@14749 a95241bf-73f2-0310-859d-f6bbb57e9c96
2005-11-07 19:07:25 +03:00
|
|
|
|
|
|
|
local level ;
|
|
|
|
for level in $(HAIKU_DEBUG_LEVELS[2-]) {
|
2013-08-01 10:51:16 +04:00
|
|
|
TARGET_DEBUG_$(level)_OBJECT_DIR_$(TARGET_PACKAGING_ARCH)
|
|
|
|
= [ FDirName $(TARGET_ARCH_OBJECT_DIR_$(TARGET_PACKAGING_ARCH))
|
|
|
|
debug_$(level) ] ;
|
* Reintroduced third LinkAgainst parameter <mapLibs>, defaulting to true.
Library names are now mapped for all targets but "host" (not only for
"haiku") -- added one more level of indirection to achieve that.
(TARGET_LIBRARY_NAME_MAP -> *_LIBRARY_NAME_MAP_*).
* Renamed build/HaikuBuildCompatibility.h to BeOSBuildCompatibility.h
(auto-included when compiling something that uses the Be API for platform
"host" on anon-BeOS platform), and introduced build/HaikuBuildCompatibility.h,
which can be included when compiling something that can be built for both,
Haiku and BeOS compatible platforms.
* Introduced libhaikucompat.a, a library that adds a few functions existing
under Haiku, but not under BeOS.
* New rule AddSubDirSupportedPlatforms.
* Renamed libopenbeos.so to libbe_haiku.so.
* Introduced new target platform "libbe_test", which is basically equivalent
to a BeOS compatible host platform target, with the exception, that instead
of the host platform's libbe.so a special build of Haiku's libbe.so
(libbe_haiku.so (formerly known as libopenbeos.so)) is used. Furthermore
Haiku's public app, interface, storage, and support kit headers are used
when compiling. This replaces the less nice way in which the test app server
and applications for this test environment were built.
When building for platform "libbe_test", the library name "be" is
autotranslated to "libbe_haiku.so". Thus most applications don't need
special fiddling when them building them for the app server test environment;
usually an "AddSubDirSupportedPlatforms libbe_test ;" will suffice.
* Reduced the dependencies of <syscalls.h> and fixed problems caused by this
(e.g. source files not including the needed headers directly).
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@14749 a95241bf-73f2-0310-859d-f6bbb57e9c96
2005-11-07 19:07:25 +03:00
|
|
|
}
|
|
|
|
|
|
|
|
# library name map
|
2013-08-01 10:51:16 +04:00
|
|
|
TARGET_LIBRARY_NAME_MAP_$(TARGET_PACKAGING_ARCH) = LIBBE_LIBRARY_NAME_MAP ;
|
2009-08-19 18:17:13 +04:00
|
|
|
LIBBE_LIBRARY_NAME_MAP_be = libbe_test.so ;
|
2005-11-01 19:24:29 +03:00
|
|
|
}
|
|
|
|
|
2005-10-29 20:27:43 +04:00
|
|
|
|
2013-08-01 10:51:16 +04:00
|
|
|
#pragma mark - common stuff
|
2005-10-29 20:27:43 +04:00
|
|
|
|
|
|
|
|
2007-08-02 21:50:17 +04:00
|
|
|
# start with a clean state
|
2005-10-29 20:27:43 +04:00
|
|
|
CCFLAGS = ;
|
|
|
|
C++FLAGS = ;
|
|
|
|
DEFINES = ;
|
|
|
|
|
|
|
|
# Set CC, C++, LINK to invalid values, so that we realize early, that we use
|
|
|
|
# the wrong compiler.
|
|
|
|
CC = bad-cc ;
|
|
|
|
C++ = bad-c++ ;
|
|
|
|
LINK = bad-link ;
|
|
|
|
|
|
|
|
|
|
|
|
# Defaults for warnings, optimization, and debugging.
|
|
|
|
#
|
|
|
|
WARNINGS ?= 1 ;
|
|
|
|
OPTIM ?= -O2 ;
|
|
|
|
DEBUG ?= 0 ;
|
|
|
|
|
|
|
|
|
2014-08-11 22:54:20 +04:00
|
|
|
# Set a sane default for whether this is a CI build.
|
|
|
|
HAIKU_CONTINUOUS_INTEGRATION_BUILD ?= 0 ;
|
|
|
|
|
|
|
|
|
2005-10-29 20:27:43 +04:00
|
|
|
# Set the defaults for PLATFORM and SUPPORTED_PLATFORMS. PLATFORM is only
|
|
|
|
# overridden for targets to be built for the host platform. SUPPORTED_PLATFORMS
|
|
|
|
# can be overridden by the author of a component.
|
|
|
|
PLATFORM = $(TARGET_PLATFORM) ;
|
|
|
|
SUPPORTED_PLATFORMS = haiku ;
|
|
|
|
|
|
|
|
|
2014-07-31 16:13:01 +04:00
|
|
|
# Define two pseudo targets for the target and buildhost platform. The main
|
|
|
|
# build rules (Cc, C++, As, ...) depend on these pseude targets such that global
|
|
|
|
# initializations that are required before anything is built for a specific
|
|
|
|
# platform can be forced by depending the pseudo target for the platform on the
|
|
|
|
# initializations.
|
2014-07-31 20:05:36 +04:00
|
|
|
# This is currently used to unpack the external headers from the
|
|
|
|
# gcc_syslibs_devel build feature before anything is built for the target
|
|
|
|
# platform.
|
2014-07-31 16:13:01 +04:00
|
|
|
NotFile $(TARGET_PLATFORM) ;
|
|
|
|
NotFile host ;
|
|
|
|
|
|
|
|
|
2005-10-29 20:27:43 +04:00
|
|
|
# Instructs the Library rule to not make its object files temporary.
|
|
|
|
# This is needed as some objects are used in a static library and for an
|
|
|
|
# executable.
|
|
|
|
KEEPOBJS = true ;
|
|
|
|
|
|
|
|
|
2008-04-02 18:02:52 +04:00
|
|
|
# Set permissions to how they should be on the image.
|
|
|
|
EXEMODE = 755 ;
|
|
|
|
FILEMODE = 644 ;
|
|
|
|
SHELLMODE = 755 ;
|
|
|
|
|
|
|
|
|
2005-10-29 20:27:43 +04:00
|
|
|
# output directories
|
|
|
|
# TODO: Review this.
|
|
|
|
HAIKU_DOCUMENTATION_DIR ?= [ FDirName $(HAIKU_OUTPUT_DIR) documentation ] ;
|
2008-04-02 18:02:52 +04:00
|
|
|
HAIKU_DOCUMENTATION_OBJECT_DIR ?= [ FDirName $(HAIKU_COMMON_PLATFORM_OBJECT_DIR)
|
2005-10-29 20:27:43 +04:00
|
|
|
documentation ] ;
|
|
|
|
|
|
|
|
# TODO: Rethink test stuff.
|
2008-10-02 03:56:12 +04:00
|
|
|
HAIKU_TEST_DIR ?= [ FDirName $(HAIKU_OUTPUT_DIR) tests
|
|
|
|
$(TARGET_PLATFORM) $(HAIKU_ARCH) ] ;
|
2005-10-29 20:27:43 +04:00
|
|
|
HAIKU_APP_TEST_DIR ?= [ FDirName $(HAIKU_TEST_DIR) apps ] ;
|
|
|
|
HAIKU_APP_TEST_LIB_DIR ?= [ FDirName $(HAIKU_APP_TEST_DIR) lib ] ;
|
|
|
|
HAIKU_TMP_DIR ?= [ FDirName $(HAIKU_OUTPUT_DIR) tmp ] ;
|
|
|
|
|
2013-08-01 10:51:16 +04:00
|
|
|
local architecture ;
|
|
|
|
for architecture in $(HAIKU_PACKAGING_ARCHS) {
|
|
|
|
local baseDir
|
|
|
|
= [ FDirName $(TARGET_OBJECT_BASE_DIR) $(architecture) packaging ] ;
|
|
|
|
HAIKU_PACKAGES_DIR_$(architecture) = [ FDirName $(baseDir) packages ] ;
|
|
|
|
HAIKU_PACKAGES_BUILD_DIR_$(architecture)
|
|
|
|
= [ FDirName $(baseDir) packages_build ] ;
|
|
|
|
HAIKU_PACKAGE_REPOSITORIES_DIR_$(architecture)
|
|
|
|
= [ FDirName $(baseDir) repositories ] ;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
2013-07-06 04:29:51 +04:00
|
|
|
HAIKU_PACKAGE_INFOS_DIR = [ FDirName $(HAIKU_TOP) src data
|
|
|
|
package_infos ] ;
|
2005-10-29 20:27:43 +04:00
|
|
|
|
2005-11-09 19:17:31 +03:00
|
|
|
TARGET_TEST_DIR ?= [ FDirName $(HAIKU_TEST_DIR)
|
|
|
|
$(TARGET_PLATFORM) ] ;
|
|
|
|
TARGET_UNIT_TEST_DIR ?= [ FDirName $(TARGET_TEST_DIR) unittests ] ;
|
|
|
|
TARGET_UNIT_TEST_LIB_DIR ?= [ FDirName $(TARGET_UNIT_TEST_DIR) lib ] ;
|
|
|
|
|
2005-10-29 20:27:43 +04:00
|
|
|
# automatically setup the objects directory per subdirectory
|
|
|
|
SUBDIRRULES += SetupObjectsDir ;
|
|
|
|
|
|
|
|
# Add the standard (userland) warning flags variables to the ones restored in
|
|
|
|
# every subdirectory. Thus we can easily meddle with them in subdirectories
|
|
|
|
# with imported sources.
|
|
|
|
AUTO_SET_UP_CONFIG_VARIABLES +=
|
|
|
|
HOST_WARNING_CCFLAGS HOST_WARNING_C++FLAGS
|
2013-08-01 10:51:16 +04:00
|
|
|
TARGET_WARNING_CCFLAGS_$(TARGET_PACKAGING_ARCHS)
|
|
|
|
TARGET_WARNING_C++FLAGS_$(TARGET_PACKAGING_ARCHS)
|
|
|
|
;
|
2008-10-03 01:25:10 +04:00
|
|
|
|
2013-08-01 10:51:16 +04:00
|
|
|
# also add PLATFORM and SUPPORTED_PLATFORMS
|
|
|
|
AUTO_SET_UP_CONFIG_VARIABLES += PLATFORM SUPPORTED_PLATFORMS ;
|
2008-10-03 01:25:10 +04:00
|
|
|
|
2012-01-19 22:44:42 +04:00
|
|
|
|
2013-08-01 10:51:16 +04:00
|
|
|
# set up warnings
|
|
|
|
local architecture ;
|
|
|
|
for architecture in $(TARGET_PACKAGING_ARCHS) {
|
|
|
|
ArchitectureSetupWarnings $(architecture) ;
|
2008-10-03 01:25:10 +04:00
|
|
|
}
|
|
|
|
|
2009-07-22 21:34:13 +04:00
|
|
|
|
2013-08-05 09:09:45 +04:00
|
|
|
# set up architecture build features
|
|
|
|
local architecture ;
|
|
|
|
for architecture in $(TARGET_PACKAGING_ARCHS) {
|
|
|
|
InitArchitectureBuildFeatures $(architecture) ;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
2011-12-28 22:34:13 +04:00
|
|
|
# The following directories cannot currently be compiled with DEBUG=1
|
|
|
|
SetConfigVar DEBUG : HAIKU_TOP src add-ons disk_systems bfs : 0 : local ;
|
|
|
|
SetConfigVar DEBUG : HAIKU_TOP src add-ons kernel drivers audio hda : 0 : local ;
|
|
|
|
SetConfigVar DEBUG : HAIKU_TOP src add-ons kernel drivers audio ac97 auich : 0 : local ; # fails with gcc4 only
|
|
|
|
SetConfigVar DEBUG : HAIKU_TOP src add-ons kernel drivers audio ac97 auvia : 0 : local ; # fails with gcc4 only
|
|
|
|
SetConfigVar DEBUG : HAIKU_TOP src add-ons kernel drivers audio ac97 sis7018 : 0 : local ;
|
|
|
|
SetConfigVar DEBUG : HAIKU_TOP src add-ons kernel file_systems btrfs : 0 : local ;
|
|
|
|
SetConfigVar DEBUG : HAIKU_TOP src add-ons kernel file_systems ntfs libntfs : 0 : local ;
|
|
|
|
SetConfigVar DEBUG : HAIKU_TOP src add-ons kernel file_systems udf : 0 : local ;
|
2015-01-11 01:36:43 +03:00
|
|
|
SetConfigVar DEBUG : HAIKU_TOP src add-ons kernel file_systems userlandfs server : 0 : local ; # fails with gcc2 only
|
|
|
|
SetConfigVar DEBUG : HAIKU_TOP src add-ons kernel file_systems userlandfs server haiku : 0 : local ; # fails with gcc2 only
|
2011-12-28 22:34:13 +04:00
|
|
|
SetConfigVar DEBUG : HAIKU_TOP src add-ons media media-add-ons dvb : 0 : local ;
|
|
|
|
SetConfigVar DEBUG : HAIKU_TOP src add-ons print drivers gutenprint : 0 : local ;
|
|
|
|
SetConfigVar DEBUG : HAIKU_TOP src servers input : 0 : local ;
|
|
|
|
SetConfigVar DEBUG : HAIKU_TOP src servers media_addon : 0 : local ;
|
|
|
|
SetConfigVar DEBUG : HAIKU_TOP src system boot loader file_systems bfs : 0 : local ;
|