From 6dcd0ccf238263a3e5eb2e2a44e2ed0da1617a42 Mon Sep 17 00:00:00 2001 From: Ingo Weinhold Date: Fri, 18 May 2007 15:59:04 +0000 Subject: [PATCH] Patch by Morgan Howe (slightly modified): Several changes to support building on Mac OS X (Darwin). A problem with makebootable remains. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@21165 a95241bf-73f2-0310-859d-f6bbb57e9c96 --- build/jam/BuildSetup | 16 ++++++++++++++-- build/jam/MainBuildRules | 10 ++++++++-- build/scripts/build_haiku_image | 2 +- configure | 1 + headers/build/BeOSBuildCompatibility.h | 2 +- headers/build/host/darwin/endian.h | 10 ++++++++++ headers/build/host/darwin/regex.h | 16 ++++++++++++++++ src/tools/Jamfile | 15 +++++++++------ src/tools/gensyscalls/Jamfile | 4 ++-- src/tools/keymap/Jamfile | 1 + .../makebootable/platform/bios_ia32/Jamfile | 2 +- src/tools/rc/Jamfile | 2 +- src/tools/resattr/Jamfile | 2 +- 13 files changed, 66 insertions(+), 17 deletions(-) create mode 100644 headers/build/host/darwin/endian.h create mode 100644 headers/build/host/darwin/regex.h diff --git a/build/jam/BuildSetup b/build/jam/BuildSetup index c49c7ede0e..568fbc94a5 100644 --- a/build/jam/BuildSetup +++ b/build/jam/BuildSetup @@ -335,9 +335,11 @@ HOST_AR = $(HOST_AR[1]) ; HOST_UNARFLAGS ?= x ; # check the host platform compatibility -SetPlatformCompatibilityFlagVariables HOST_PLATFORM : HOST : host : linux freebsd ; +SetPlatformCompatibilityFlagVariables HOST_PLATFORM : HOST : host + : linux freebsd darwin ; -if $(HOST_PLATFORM) = linux || $(HOST_PLATFORM) = freebsd { +if $(HOST_PLATFORM) = linux || $(HOST_PLATFORM) = freebsd + || $(HOST_PLATFORM) = darwin { # don't use lex: otherwise rc will not work correctly if $(LEX) = lex { LEX = flex ; @@ -404,6 +406,7 @@ switch $(HOST_PLATFORM) { case haiku : HOST_DEBUG_FLAGS ?= -ggdb ; case linux : HOST_DEBUG_FLAGS ?= -ggdb ; case freebsd : HOST_DEBUG_FLAGS ?= -ggdb ; + case darwin : HOST_DEBUG_FLAGS ?= -ggdb ; case * : HOST_DEBUG_FLAGS ?= -g ; } @@ -465,10 +468,17 @@ if $(HOST_PLATFORM_BEOS_COMPATIBLE) { HOST_LIBSUPC++ = supc++ ; } + if $(HOST_PLATFORM) = darwin { + HOST_LIBSUPC++ = gcc_s.1 ; + } + # Unlike glibc FreeBSD's libc doesn't have built-in regex support. if $(HOST_PLATFORM) = freebsd { HOST_LIBROOT += /usr/lib/libgnuregex.so ; + } else if $(HOST_PLATFORM) = darwin { + HOST_LIBROOT += /opt/local/lib/libgnuregex.dylib ; } + # The BeOS compilers define __INTEL__ respectively __POWERPC__. On the # build platform we need to make sure, this is also defined. @@ -635,6 +645,7 @@ switch $(TARGET_PLATFORM) { case haiku : TARGET_DEFINES += HAIKU_TARGET_PLATFORM_HAIKU ; case linux : TARGET_DEFINES += HAIKU_TARGET_PLATFORM_LINUX ; case freebsd : TARGET_DEFINES += HAIKU_TARGET_PLATFORM_FREEBSD ; + case darwin : TARGET_DEFINES += HAIKU_TARGET_PLATFORM_DARWIN ; case libbe_test : TARGET_DEFINES += HAIKU_TARGET_PLATFORM_LIBBE_TEST ; } @@ -646,6 +657,7 @@ switch $(HOST_PLATFORM) { case haiku : HOST_DEFINES += HAIKU_HOST_PLATFORM_HAIKU ; case linux : HOST_DEFINES += HAIKU_HOST_PLATFORM_LINUX ; case freebsd : HOST_DEFINES += HAIKU_HOST_PLATFORM_FREEBSD ; + case darwin : HOST_DEFINES += HAIKU_HOST_PLATFORM_DARWIN ; } diff --git a/build/jam/MainBuildRules b/build/jam/MainBuildRules index 652a9d4f7f..25cfe2cba6 100644 --- a/build/jam/MainBuildRules +++ b/build/jam/MainBuildRules @@ -457,8 +457,14 @@ rule BuildPlatformSharedLibrary local libs = $(3) ; BuildPlatformMain $(target) : $(sources) : $(libs) ; - LINKFLAGS on $(target) = [ on $(target) return $(LINKFLAGS) ] - -shared -Xlinker -soname=\"$(target:G=)\" ; + + if $(HOST_PLATFORM) = darwin { + LINKFLAGS on $(target) = [ on $(target) return $(LINKFLAGS) ] + -dynamic -dynamiclib -Xlinker -flat_namespace ; + } else { + LINKFLAGS on $(target) = [ on $(target) return $(LINKFLAGS) ] + -shared -Xlinker -soname=\"$(target:G=)\" ; + } } rule BuildPlatformMergeObject diff --git a/build/scripts/build_haiku_image b/build/scripts/build_haiku_image index 1c7ab54172..5608d2fe55 100755 --- a/build/scripts/build_haiku_image +++ b/build/scripts/build_haiku_image @@ -56,7 +56,7 @@ if [ $isImage ]; then echo if [ ! $updateOnly ]; then echo "Creating image ..." - dd if=/dev/zero of=$imagePath bs=1M count=$imageSize + dd if=/dev/zero of=$imagePath bs=1048576 count=$imageSize $bfsShell --initialize $imagePath Haiku $makebootable $imagePath fi diff --git a/configure b/configure index 6d4d04f0f7..5256f2fb95 100755 --- a/configure +++ b/configure @@ -272,6 +272,7 @@ case "${platform}" in ;; Linux) buildPlatform=linux ;; FreeBSD) buildPlatform=freebsd ;; + Darwin) buildPlatform=darwin ;; *) echo Unsupported platform: ${platform} exit 1 ;; esac diff --git a/headers/build/BeOSBuildCompatibility.h b/headers/build/BeOSBuildCompatibility.h index 677af9e881..ff9e3f4e5c 100644 --- a/headers/build/BeOSBuildCompatibility.h +++ b/headers/build/BeOSBuildCompatibility.h @@ -16,7 +16,7 @@ extern "C" { extern size_t strlcpy(char *dest, const char *source, size_t length); extern size_t strlcat(char *dest, const char *source, size_t length); -#ifdef HAIKU_HOST_PLATFORM_FREEBSD +#if defined(HAIKU_HOST_PLATFORM_FREEBSD) || defined(HAIKU_HOST_PLATFORM_DARWIN) extern size_t strnlen(const char *string, size_t length); #endif diff --git a/headers/build/host/darwin/endian.h b/headers/build/host/darwin/endian.h new file mode 100644 index 0000000000..f8b52f1731 --- /dev/null +++ b/headers/build/host/darwin/endian.h @@ -0,0 +1,10 @@ +#ifndef _HAIKU_BUILD_COMPATIBILITY_DARWIN_ENDIAN +#define _HAIKU_BUILD_COMPATIBILITY_DARWIN_ENDIAN + +#include + +#define __LITTLE_ENDIAN LITTLE_ENDIAN +#define __BIG_ENDIAN BIG_ENDIAN +#define __PDP_ENDIAN PDP_ENDIAN + +#endif // _HAIKU_BUILD_COMPATIBILITY_DARWIN_ENDIAN diff --git a/headers/build/host/darwin/regex.h b/headers/build/host/darwin/regex.h new file mode 100644 index 0000000000..b8c1cef30e --- /dev/null +++ b/headers/build/host/darwin/regex.h @@ -0,0 +1,16 @@ +#ifndef _HAIKU_BUILD_COMPATIBILITY_DARWIN_REGEX +#define _HAIKU_BUILD_COMPATIBILITY_DARWIN_REGEX + +// Include the darwin port of gnuregex + +#ifdef __cplusplus +extern "C" { +#endif + +#include + +#ifdef __cplusplus +} +#endif + +#endif // _HAIKU_BUILD_COMPATIBILITY_DARWIN_REGEX diff --git a/src/tools/Jamfile b/src/tools/Jamfile index 38b38a083f..30143b1a07 100644 --- a/src/tools/Jamfile +++ b/src/tools/Jamfile @@ -22,7 +22,7 @@ USES_BE_API on $(tools) = true ; BuildPlatformMain catattr : catattr.cpp : $(HOST_LIBBE) ; BuildPlatformMain copyattr : copyattr.cpp - : $(HOST_LIBBE) $(HOST_LIBSTDC++) ; + : $(HOST_LIBBE) $(HOST_LIBSTDC++) $(HOST_LIBSUPC++) ; BuildPlatformMain listattr : listattr.cpp : $(HOST_LIBBE) ; @@ -35,7 +35,7 @@ BuildPlatformMain mimeset : database_support.cpp UpdateMimeInfoThread.cpp MimeUpdateThread.cpp - : $(HOST_LIBBE) + : $(HOST_LIBBE) $(HOST_LIBSTDC++) $(HOST_LIBSUPC++) ; BuildPlatformMain mkindex : mkindex.cpp : $(HOST_LIBBE) ; @@ -43,13 +43,16 @@ BuildPlatformMain mkindex : mkindex.cpp : $(HOST_LIBBE) ; BuildPlatformMain rmattr : rmattr.cpp : $(HOST_LIBBE) ; BuildPlatformMain set_haiku_revision : set_haiku_revision.cpp - : $(HOST_LIBSTDC++) ; + : $(HOST_LIBSTDC++) $(HOST_LIBSUPC++) ; -BuildPlatformMain settype : settype.cpp : $(HOST_LIBBE) ; +BuildPlatformMain settype : settype.cpp : $(HOST_LIBBE) + $(HOST_LIBSTDC++) $(HOST_LIBSUPC++) ; -BuildPlatformMain setversion : setversion.cpp : $(HOST_LIBBE) ; +BuildPlatformMain setversion : setversion.cpp : $(HOST_LIBBE) + $(HOST_LIBSTDC++) $(HOST_LIBSUPC++) ; -BuildPlatformMain xres : xres.cpp : $(HOST_LIBBE) $(HOST_LIBSTDC++) ; +BuildPlatformMain xres : xres.cpp : $(HOST_LIBBE) $(HOST_LIBSTDC++) + $(HOST_LIBSUPC++) ; SEARCH on [ FGristFiles Mime.cpp diff --git a/src/tools/gensyscalls/Jamfile b/src/tools/gensyscalls/Jamfile index 8c392b5076..7c09ce4294 100644 --- a/src/tools/gensyscalls/Jamfile +++ b/src/tools/gensyscalls/Jamfile @@ -62,7 +62,7 @@ PreprocessSyscalls $(syscallsHeaderPP) : $(syscallsHeader) ; BuildPlatformMain gensyscallinfos : gensyscallinfos.cpp - : $(HOST_LIBSTDC++) + : $(HOST_LIBSTDC++) $(HOST_LIBSUPC++) ; @@ -88,7 +88,7 @@ SubDirHdrs [ FDirName $(SUBDIR) arch $(TARGET_ARCH) ] ; # build gensyscalls BuildPlatformMain gensyscalls : gensyscalls.cpp $(syscallInfos) ; -LinkAgainst gensyscalls : $(HOST_LIBSTDC++) ; +LinkAgainst gensyscalls : $(HOST_LIBSTDC++) $(HOST_LIBSUPC++) ; # Explicitly tell jam that gensyscalls.cpp includes the generated header. Includes [ FGristFiles gensyscalls.cpp ] : $(syscallsHeaderPP) ; diff --git a/src/tools/keymap/Jamfile b/src/tools/keymap/Jamfile index cc52f54f8f..c99ce0d8e3 100644 --- a/src/tools/keymap/Jamfile +++ b/src/tools/keymap/Jamfile @@ -7,6 +7,7 @@ USES_BE_API on keymap = true ; BuildPlatformMain keymap : main.cpp Keymap.cpp + : $(HOST_LIBSTDC++) $(HOST_LIBSUPC++) ; LinkAgainst keymap : $(HOST_LIBBE) ; diff --git a/src/tools/makebootable/platform/bios_ia32/Jamfile b/src/tools/makebootable/platform/bios_ia32/Jamfile index a87008487d..291fb3fe1d 100644 --- a/src/tools/makebootable/platform/bios_ia32/Jamfile +++ b/src/tools/makebootable/platform/bios_ia32/Jamfile @@ -23,5 +23,5 @@ AddFileDataResource makebootable : RAWT:666:BootCode : stage1.bin ; BuildPlatformMain makebootable : makebootable.cpp $(hostPlatformSources) - : $(HOST_LIBBE) + : $(HOST_LIBBE) $(HOST_LIBSTDC++) $(HOST_LIBSUPC++) ; diff --git a/src/tools/rc/Jamfile b/src/tools/rc/Jamfile index e22fd0e681..7382aa3fba 100644 --- a/src/tools/rc/Jamfile +++ b/src/tools/rc/Jamfile @@ -21,7 +21,7 @@ BuildPlatformMain rc : strlcat.c ; LinkAgainst rc - : librdef.a $(HOST_LIBSTDC++) $(HOST_LIBBE) ; + : librdef.a $(HOST_LIBSTDC++) $(HOST_LIBBE) $(HOST_LIBSUPC++) ; SEARCH on [ FGristFiles strlcat.c strlcpy.c diff --git a/src/tools/resattr/Jamfile b/src/tools/resattr/Jamfile index 3d65d0e06a..4c33c26ff6 100644 --- a/src/tools/resattr/Jamfile +++ b/src/tools/resattr/Jamfile @@ -3,5 +3,5 @@ SubDir HAIKU_TOP src tools resattr ; USES_BE_API on resattr = true ; BuildPlatformMain resattr : resattr.cpp ; -LinkAgainst resattr : $(HOST_LIBBE) ; +LinkAgainst resattr : $(HOST_LIBBE) $(HOST_LIBSTDC++) $(HOST_LIBSUPC++) ;