From 49abfada1f475fe670e22c05e6efdfa46fbd0804 Mon Sep 17 00:00:00 2001 From: Felix Fietkau Date: Wed, 27 Sep 2006 17:03:36 +0000 Subject: [PATCH] add portability fixes for toolchain/tools (full tools/toolchain build works on osx now) SVN-Revision: 4867 --- openwrt/include/host-build.mk | 1 + openwrt/rules.mk | 2 +- openwrt/toolchain/Makefile | 6 -- openwrt/tools/Makefile | 4 +- openwrt/tools/include/byteswap.h | 3 + openwrt/tools/include/endian.h | 29 +++++++++ openwrt/tools/include/getline.h | 62 ++++++++++++++++++ openwrt/tools/mkimage/src/mkimage.c | 4 +- openwrt/tools/mtd-utils/Makefile | 7 ++- .../patches/110-portability_fix.patch | 63 +++++++++++++++++++ 10 files changed, 170 insertions(+), 11 deletions(-) create mode 100644 openwrt/tools/include/byteswap.h create mode 100644 openwrt/tools/include/endian.h create mode 100644 openwrt/tools/include/getline.h create mode 100644 openwrt/tools/mtd-utils/patches/110-portability_fix.patch diff --git a/openwrt/include/host-build.mk b/openwrt/include/host-build.mk index 9a5a41317e..c19cb8fd1c 100644 --- a/openwrt/include/host-build.mk +++ b/openwrt/include/host-build.mk @@ -4,6 +4,7 @@ # This is free software, licensed under the GNU General Public License v2. # See /LICENSE for more information. # +OS:=$(shell uname) ifneq ($(strip $(PKG_CAT)),) ifeq ($(PKG_CAT),unzip) UNPACK=unzip -d $(PKG_BUILD_DIR) $(DL_DIR)/$(PKG_SOURCE) diff --git a/openwrt/rules.mk b/openwrt/rules.mk index f0d21a2797..eebc758224 100644 --- a/openwrt/rules.mk +++ b/openwrt/rules.mk @@ -106,7 +106,7 @@ IPKG:= \ # invoke ipkg-build with some default options IPKG_BUILD:= \ - ipkg-build -c -o root -g root + ipkg-build -c -o 0 -g 0 ifeq ($(CONFIG_ENABLE_LOCALE),true) DISABLE_NLS:= diff --git a/openwrt/toolchain/Makefile b/openwrt/toolchain/Makefile index d324325a68..ed563f00ed 100644 --- a/openwrt/toolchain/Makefile +++ b/openwrt/toolchain/Makefile @@ -37,12 +37,6 @@ TOOLCHAIN_STAMP_DIR:=$(STAGING_DIR)/stampfiles $(TOOLCHAIN_STAMP_DIR): mkdir -p $@ -$(STAGING_DIR): - @mkdir -p $@/lib - @mkdir -p $@/include - @mkdir -p $@/$(REAL_GNU_TARGET_NAME) - @ln -sf ../lib $@/$(REAL_GNU_TARGET_NAME)/lib - $(TOOLCHAIN_BUILD_DIR): @mkdir -p $@ diff --git a/openwrt/tools/Makefile b/openwrt/tools/Makefile index 21d6a94f9a..741fd48f6a 100644 --- a/openwrt/tools/Makefile +++ b/openwrt/tools/Makefile @@ -28,8 +28,10 @@ $(TOOL_STAMP_DIR): $(STAGING_DIR): @mkdir -p $@/lib @mkdir -p $@/include - @mkdir -p $@/$(REAL_GNU_TARGET_NAME) + @mkdir -p $@/include-host + $(CP) ./include/*.h $@/include-host/ @ln -sf ../lib $@/$(REAL_GNU_TARGET_NAME)/lib + @mkdir -p $@/$(REAL_GNU_TARGET_NAME) $(TOOL_BUILD_DIR): @mkdir -p $@ diff --git a/openwrt/tools/include/byteswap.h b/openwrt/tools/include/byteswap.h new file mode 100644 index 0000000000..61047167c3 --- /dev/null +++ b/openwrt/tools/include/byteswap.h @@ -0,0 +1,3 @@ +#ifdef __linux__ +#include_next +#endif diff --git a/openwrt/tools/include/endian.h b/openwrt/tools/include/endian.h new file mode 100644 index 0000000000..4ea34cdd0f --- /dev/null +++ b/openwrt/tools/include/endian.h @@ -0,0 +1,29 @@ +#ifndef __endian_compat_h +#define __endian_compat_h + +#if defined(__linux__) +#include_next +#elif defined(__APPLE__) +#include +#include +#define bswap_16(x) NXSwapShort(x) +#define bswap_32(x) NXSwapInt(x) +#define bswap_64(x) NXSwapLongLong(x) +#else +#include +#define bswap_16(x) swap16(x) +#define bswap_32(x) swap32(x) +#define bswap_64(x) swap64(x) +#endif + +#ifndef __BYTE_ORDER +#define __BYTE_ORDER BYTE_ORDER +#endif +#ifndef __BIG_ENDIAN +#define __BIG_ENDIAN BIG_ENDIAN +#endif +#ifndef __LITTLE_ENDIAN +#define __LITTLE_ENDIAN LITTLE_ENDIAN +#endif + +#endif diff --git a/openwrt/tools/include/getline.h b/openwrt/tools/include/getline.h new file mode 100644 index 0000000000..219be75204 --- /dev/null +++ b/openwrt/tools/include/getline.h @@ -0,0 +1,62 @@ +/*- + * Copyright (c) 2006 SPARTA, Inc. + * All rights reserved. + * + * This software was developed by SPARTA ISSO under SPAWAR contract + * N66001-04-C-6019 ("SEFOS"). + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + */ + +#ifndef __linux__ +#include +#include +#include +#include + +/* + * Emulate glibc getline() via BSD fgetln(). + * Note that outsize is not changed unless memory is allocated. + */ +static inline ssize_t +getline(char **outbuf, size_t *outsize, FILE *fp) +{ + char *buf; + size_t len; + + buf = fgetln(fp, &len); + if (buf == NULL) + return (-1); + + /* Assumes realloc() accepts NULL for ptr (C99) */ + if (*outbuf == NULL || *outsize < len + 1) { + void *tmp = realloc(*outbuf, len + 1); + if (tmp == NULL) + return (-1); + *outbuf = tmp; + *outsize = len + 1; + } + memcpy(*outbuf, buf, len); + (*outbuf)[len] = '\0'; + return (len); +} +#endif diff --git a/openwrt/tools/mkimage/src/mkimage.c b/openwrt/tools/mkimage/src/mkimage.c index 6490da8c1c..136075c50a 100644 --- a/openwrt/tools/mkimage/src/mkimage.c +++ b/openwrt/tools/mkimage/src/mkimage.c @@ -440,7 +440,7 @@ NXTARG: ; } /* We're a bit of paranoid */ -#if defined(_POSIX_SYNCHRONIZED_IO) && !defined(__sun__) && !defined(__FreeBSD__) +#if defined(_POSIX_SYNCHRONIZED_IO) && !defined(__sun__) && !defined(__FreeBSD__) && !defined(__APPLE__) (void) fdatasync (ifd); #else (void) fsync (ifd); @@ -490,7 +490,7 @@ NXTARG: ; (void) munmap((void *)ptr, sbuf.st_size); /* We're a bit of paranoid */ -#if defined(_POSIX_SYNCHRONIZED_IO) && !defined(__sun__) && !defined(__FreeBSD__) +#if defined(_POSIX_SYNCHRONIZED_IO) && !defined(__sun__) && !defined(__FreeBSD__) && !defined(__APPLE__) (void) fdatasync (ifd); #else (void) fsync (ifd); diff --git a/openwrt/tools/mtd-utils/Makefile b/openwrt/tools/mtd-utils/Makefile index a0a26776f7..55dd88a785 100644 --- a/openwrt/tools/mtd-utils/Makefile +++ b/openwrt/tools/mtd-utils/Makefile @@ -18,8 +18,13 @@ PKG_BUILD_DIR:=$(TOOL_BUILD_DIR)/$(PKG_NAME)-$(PKG_VERSION).orig include $(INCLUDE_DIR)/host-build.mk +CFLAGS := $(HOSTCFLAGS) -O2 -I../include +ifneq ($(OS),Linux) +CFLAGS += -Dloff_t=off_t -D__BYTE_ORDER=BYTE_ORDER -I$(STAGING_DIR)/include-host -include getline.h +endif + define Build/Compile - $(MAKE) -C $(PKG_BUILD_DIR)/util LINUXDIR=$(LINUX_HEADERS_DIR) + $(MAKE) -C $(PKG_BUILD_DIR)/util LINUXDIR="$(LINUX_HEADERS_DIR)" CFLAGS="$(CFLAGS)" TARGETS=mkfs.jffs2 endef define Build/Install diff --git a/openwrt/tools/mtd-utils/patches/110-portability_fix.patch b/openwrt/tools/mtd-utils/patches/110-portability_fix.patch new file mode 100644 index 0000000000..b5e91d576b --- /dev/null +++ b/openwrt/tools/mtd-utils/patches/110-portability_fix.patch @@ -0,0 +1,63 @@ +diff -urN mtd.old/include/asm/types.h mtd.dev/include/asm/types.h +--- mtd.old/include/asm/types.h 1970-01-01 01:00:00.000000000 +0100 ++++ mtd.dev/include/asm/types.h 2006-09-27 16:50:03.000000000 +0200 +@@ -0,0 +1,3 @@ ++#ifdef linux ++#include_next ++#endif +diff -urN mtd.old/util/mkfs.jffs2.c mtd.dev/util/mkfs.jffs2.c +--- mtd.old/util/mkfs.jffs2.c 2004-11-27 00:00:13.000000000 +0100 ++++ mtd.dev/util/mkfs.jffs2.c 2006-09-27 16:51:56.000000000 +0200 +@@ -68,6 +68,7 @@ + #include + #undef crc32 + #include "crc32.h" ++#include + + /* Do not use the wierd XPG version of basename */ + #undef basename +@@ -1032,7 +1033,7 @@ + case S_IFDIR: + if (verbose) { + printf("\td %04o %9lu %5d:%-3d %s\n", +- e->sb.st_mode & ~S_IFMT, e->sb.st_size, ++ e->sb.st_mode & ~S_IFMT, (unsigned long)e->sb.st_size, + (int) (e->sb.st_uid), (int) (e->sb.st_gid), + e->name); + } +@@ -1041,7 +1042,7 @@ + case S_IFSOCK: + if (verbose) { + printf("\ts %04o %9lu %5d:%-3d %s\n", +- e->sb.st_mode & ~S_IFMT, e->sb.st_size, ++ e->sb.st_mode & ~S_IFMT, (unsigned long)e->sb.st_size, + (int) e->sb.st_uid, (int) e->sb.st_gid, e->name); + } + write_pipe(e); +@@ -1049,7 +1050,7 @@ + case S_IFIFO: + if (verbose) { + printf("\tp %04o %9lu %5d:%-3d %s\n", +- e->sb.st_mode & ~S_IFMT, e->sb.st_size, ++ e->sb.st_mode & ~S_IFMT, (unsigned long)e->sb.st_size, + (int) e->sb.st_uid, (int) e->sb.st_gid, e->name); + } + write_pipe(e); +@@ -1075,7 +1076,7 @@ + case S_IFLNK: + if (verbose) { + printf("\tl %04o %9lu %5d:%-3d %s -> %s\n", +- e->sb.st_mode & ~S_IFMT, e->sb.st_size, ++ e->sb.st_mode & ~S_IFMT, (unsigned long)e->sb.st_size, + (int) e->sb.st_uid, (int) e->sb.st_gid, e->name, + e->link); + } +@@ -1084,7 +1085,7 @@ + case S_IFREG: + if (verbose) { + printf("\tf %04o %9lu %5d:%-3d %s\n", +- e->sb.st_mode & ~S_IFMT, e->sb.st_size, ++ e->sb.st_mode & ~S_IFMT, (unsigned long)e->sb.st_size, + (int) e->sb.st_uid, (int) e->sb.st_gid, e->name); + } + write_regular_file(e); -- 2.30.2