diff options
-rw-r--r-- | README | 10 | ||||
-rw-r--r-- | include/image.h | 2 | ||||
-rw-r--r-- | include/libfdt_env.h | 12 | ||||
-rw-r--r-- | tools/Makefile | 23 | ||||
-rw-r--r-- | tools/mingw_support.c | 79 | ||||
-rw-r--r-- | tools/mingw_support.h | 51 | ||||
-rw-r--r-- | tools/mkimage.h | 5 | ||||
-rw-r--r-- | tools/os_support.c | 24 | ||||
-rw-r--r-- | tools/os_support.h | 29 | ||||
-rw-r--r-- | tools/ubsha1.c | 3 |
10 files changed, 231 insertions, 7 deletions
@@ -2716,6 +2716,16 @@ necessary. For example using the ELDK on a 4xx CPU, please enter: $ CROSS_COMPILE=ppc_4xx- $ export CROSS_COMPILE +Note: If you wish to generate Windows versions of the utilities in + the tools directory you can use the MinGW toolchain + (http://www.mingw.org). Set your HOST tools to the MinGW + toolchain and execute 'make tools'. For example: + + $ make HOSTCC=i586-mingw32msvc-gcc HOSTSTRIP=i586-mingw32msvc-strip tools + + Binaries such as tools/mkimage.exe will be created which can + be executed on computers running Windows. + U-Boot is intended to be simple to build. After installing the sources you must configure U-Boot for one specific board type. This is done by typing: diff --git a/include/image.h b/include/image.h index 74a12400699..f183757c853 100644 --- a/include/image.h +++ b/include/image.h @@ -34,7 +34,9 @@ #define __IMAGE_H__ #if USE_HOSTCC +#ifndef __MINGW32__ #include <endian.h> +#endif /* new uImage format support enabled on host */ #define CONFIG_FIT 1 diff --git a/include/libfdt_env.h b/include/libfdt_env.h index ea474a56b12..1c67015a4a9 100644 --- a/include/libfdt_env.h +++ b/include/libfdt_env.h @@ -24,8 +24,13 @@ #ifdef USE_HOSTCC #include <stdint.h> #include <string.h> +#ifdef __MINGW32__ +#include <linux/types.h> +#include <linux/byteorder/swab.h> +#else #include <endian.h> #include <byteswap.h> +#endif /* __MINGW32__ */ #else #include <linux/string.h> #include <linux/types.h> @@ -36,10 +41,17 @@ extern struct fdt_header *working_fdt; /* Pointer to the working fdt */ #if __BYTE_ORDER == __LITTLE_ENDIAN +#ifdef __MINGW32__ +#define fdt32_to_cpu(x) ___swab32(x) +#define cpu_to_fdt32(x) ___swab32(x) +#define fdt64_to_cpu(x) ___swab64(x) +#define cpu_to_fdt64(x) ___swab64(x) +#else #define fdt32_to_cpu(x) bswap_32(x) #define cpu_to_fdt32(x) bswap_32(x) #define fdt64_to_cpu(x) bswap_64(x) #define cpu_to_fdt64(x) bswap_64(x) +#endif #else #define fdt32_to_cpu(x) (x) #define cpu_to_fdt32(x) (x) diff --git a/tools/Makefile b/tools/Makefile index 9fe5b1a0f9b..122e5bb7bb3 100644 --- a/tools/Makefile +++ b/tools/Makefile @@ -46,12 +46,15 @@ else HOST_CFLAGS += -pedantic endif +ifeq ($(HOSTOS),cygwin) +HOST_CFLAGS += -ansi +endif + # -# Cygwin needs .exe files :-( +# toolchains targeting win32 generate .exe files # -ifeq ($(HOSTOS),cygwin) +ifneq (,$(findstring WIN32 ,$(shell $(HOSTCC) -E -dM -xc /dev/null))) SFX = .exe -HOST_CFLAGS += -ansi else SFX = endif @@ -90,6 +93,7 @@ OBJ_FILES-$(CONFIG_LCD_LOGO) += bmp_logo.o OBJ_FILES-$(CONFIG_VIDEO_LOGO) += bmp_logo.o OBJ_FILES-$(CONFIG_INCA_IP) += inca-swap-bytes.o OBJ_FILES-$(CONFIG_NETCONSOLE) += ncb.o +OBJ_FILES-y += os_support.o # Don't build by default #ifeq ($(ARCH),ppc) @@ -125,13 +129,15 @@ LIBFDT_OBJS := $(addprefix $(obj),$(LIBFDT_OBJ_FILES-y)) # # Use native tools and options +# Define __KERNEL_STRICT_NAMES to prevent typedef overlaps # CPPFLAGS = -idirafter $(SRCTREE)/include \ -idirafter $(OBJTREE)/include2 \ -idirafter $(OBJTREE)/include \ -I $(SRCTREE)/libfdt \ -I $(SRCTREE)/tools \ - -DTEXT_BASE=$(TEXT_BASE) -DUSE_HOSTCC + -DTEXT_BASE=$(TEXT_BASE) -DUSE_HOSTCC \ + -D__KERNEL_STRICT_NAMES CFLAGS = $(HOST_CFLAGS) $(CPPFLAGS) -O # No -pedantic switch to avoid libfdt compilation warnings @@ -147,7 +153,7 @@ all: $(obj).depend $(BINS) $(LOGO-y) subdirs $(obj)envcrc$(SFX): $(obj)envcrc.o $(obj)crc32.o $(obj)env_embedded.o $(obj)sha1.o $(CC) $(CFLAGS) -o $@ $^ -$(obj)ubsha1$(SFX): $(obj)ubsha1.o $(obj)sha1.o +$(obj)ubsha1$(SFX): $(obj)ubsha1.o $(obj)sha1.o $(obj)os_support.o $(CC) $(CFLAGS) -o $@ $^ $(obj)img2srec$(SFX): $(obj)img2srec.o @@ -155,7 +161,7 @@ $(obj)img2srec$(SFX): $(obj)img2srec.o $(STRIP) $@ $(obj)mkimage$(SFX): $(obj)mkimage.o $(obj)crc32.o $(obj)image.o $(obj)md5.o \ - $(obj)sha1.o $(LIBFDT_OBJS) + $(obj)sha1.o $(LIBFDT_OBJS) $(obj)os_support.o $(CC) $(CFLAGS) $(HOST_LDFLAGS) -o $@ $^ $(STRIP) $@ @@ -183,13 +189,16 @@ $(obj)bin2header$(SFX): $(obj)bin2header.o $(CC) $(CFLAGS) $(HOST_LDFLAGS) -o $@ $^ $(STRIP) $@ -# image.c and mkimage.c require FIT_CFLAGS instead of standard CFLAGS +# Some files complain if compiled with -pedantic, use FIT_CFLAGS $(obj)image.o: $(SRCTREE)/tools/image.c $(CC) -g $(FIT_CFLAGS) -c -o $@ $< $(obj)mkimage.o: $(SRCTREE)/tools/mkimage.c $(CC) -g $(FIT_CFLAGS) -c -o $@ $< +$(obj)os_support.o: $(SRCTREE)/tools/os_support.c + $(CC) -g $(FIT_CFLAGS) -c -o $@ $< + # Some of the tool objects need to be accessed from outside the tools directory $(obj)%.o: $(SRCTREE)/common/%.c $(CC) -g $(FIT_CFLAGS) -c -o $@ $< diff --git a/tools/mingw_support.c b/tools/mingw_support.c new file mode 100644 index 00000000000..67cd6e115f4 --- /dev/null +++ b/tools/mingw_support.c @@ -0,0 +1,79 @@ +/* + * Copyright 2008 Extreme Engineering Solutions, Inc. + * + * mmap/munmap implementation derived from: + * Clamav Native Windows Port : mmap win32 compatibility layer + * Copyright (c) 2005-2006 Gianluigi Tiesi <sherpya@netfarm.it> + * Parts by Kees Zeelenberg <kzlg@users.sourceforge.net> (LibGW32C) + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU Library General Public + * License as published by the Free Software Foundation; either + * version 2 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Library General Public License for more details. + * + * You should have received a copy of the GNU Library General Public + * License along with this software; if not, write to the + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + */ + +#include "mingw_support.h" +#include <stdio.h> +#include <stdint.h> +#include <errno.h> +#include <io.h> + +int fsync(int fd) +{ + return _commit(fd); +} + +void *mmap(void *addr, size_t len, int prot, int flags, int fd, int offset) +{ + void *map = NULL; + HANDLE handle = INVALID_HANDLE_VALUE; + DWORD cfm_flags = 0, mvf_flags = 0; + + switch (prot) { + case PROT_READ | PROT_WRITE: + cfm_flags = PAGE_READWRITE; + mvf_flags = FILE_MAP_ALL_ACCESS; + break; + case PROT_WRITE: + cfm_flags = PAGE_READWRITE; + mvf_flags = FILE_MAP_WRITE; + break; + case PROT_READ: + cfm_flags = PAGE_READONLY; + mvf_flags = FILE_MAP_READ; + break; + default: + return MAP_FAILED; + } + + handle = CreateFileMappingA((HANDLE) _get_osfhandle(fd), NULL, + cfm_flags, HIDWORD(len), LODWORD(len), NULL); + if (!handle) + return MAP_FAILED; + + map = MapViewOfFile(handle, mvf_flags, HIDWORD(offset), + LODWORD(offset), len); + CloseHandle(handle); + + if (!map) + return MAP_FAILED; + + return map; +} + +int munmap(void *addr, size_t len) +{ + if (!UnmapViewOfFile(addr)) + return -1; + + return 0; +} diff --git a/tools/mingw_support.h b/tools/mingw_support.h new file mode 100644 index 00000000000..1fb6c93824c --- /dev/null +++ b/tools/mingw_support.h @@ -0,0 +1,51 @@ +/* + * Copyright 2008 Extreme Engineering Solutions, Inc. + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU Library General Public + * License as published by the Free Software Foundation; either + * version 2 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Library General Public License for more details. + * + * You should have received a copy of the GNU Library General Public + * License along with this software; if not, write to the + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + */ + +#ifndef __MINGW_SUPPORT_H_ +#define __WINGW_SUPPORT_H_ 1 + +/* Defining __INSIDE_MSYS__ helps to prevent u-boot/mingw overlap */ +#define __INSIDE_MSYS__ 1 + +#include <windows.h> + +/* mmap protections */ +#define PROT_READ 0x1 /* Page can be read */ +#define PROT_WRITE 0x2 /* Page can be written */ +#define PROT_EXEC 0x4 /* Page can be executed */ +#define PROT_NONE 0x0 /* Page can not be accessed */ + +/* Sharing types (must choose one and only one of these) */ +#define MAP_SHARED 0x01 /* Share changes */ +#define MAP_PRIVATE 0x02 /* Changes are private */ + +/* Return value of `mmap' in case of an error */ +#define MAP_FAILED ((void *) -1) + +/* Windows 64-bit access macros */ +#define LODWORD(x) ((DWORD)((DWORDLONG)(x))) +#define HIDWORD(x) ((DWORD)(((DWORDLONG)(x) >> 32) & 0xffffffff)) + +typedef UINT uint; +typedef ULONG ulong; + +int fsync(int fd); +void *mmap(void *, size_t, int, int, int, int); +int munmap(void *, size_t); + +#endif /* __MINGW_SUPPORT_H_ */ diff --git a/tools/mkimage.h b/tools/mkimage.h index a2d5248943d..c8df6e1f64f 100644 --- a/tools/mkimage.h +++ b/tools/mkimage.h @@ -20,6 +20,7 @@ * MA 02111-1307 USA */ +#include "os_support.h" #include <errno.h> #include <fcntl.h> #include <stdio.h> @@ -28,7 +29,11 @@ #ifndef __WIN32__ #include <netinet/in.h> /* for host / network byte order conversions */ #endif +#ifdef __MINGW32__ +#include <stdint.h> +#else #include <sys/mman.h> +#endif #include <sys/stat.h> #include <time.h> #include <unistd.h> diff --git a/tools/os_support.c b/tools/os_support.c new file mode 100644 index 00000000000..001fe647643 --- /dev/null +++ b/tools/os_support.c @@ -0,0 +1,24 @@ +/* + * Copyright 2009 Extreme Engineering Solutions, Inc. + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU Library General Public + * License as published by the Free Software Foundation; either + * version 2 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Library General Public License for more details. + * + * You should have received a copy of the GNU Library General Public + * License along with this software; if not, write to the + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + */ + +/* + * Include additional files required for supporting different operating systems + */ +#ifdef __MINGW32__ +#include "mingw_support.c" +#endif diff --git a/tools/os_support.h b/tools/os_support.h new file mode 100644 index 00000000000..f6f86b04d57 --- /dev/null +++ b/tools/os_support.h @@ -0,0 +1,29 @@ +/* + * Copyright 2009 Extreme Engineering Solutions, Inc. + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU Library General Public + * License as published by the Free Software Foundation; either + * version 2 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Library General Public License for more details. + * + * You should have received a copy of the GNU Library General Public + * License along with this software; if not, write to the + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + */ + +#ifndef __OS_SUPPORT_H_ +#define __OS_SUPPORT_H_ + +/* + * Include additional files required for supporting different operating systems + */ +#ifdef __MINGW32__ +#include "mingw_support.h" +#endif + +#endif /* __OS_SUPPORT_H_ */ diff --git a/tools/ubsha1.c b/tools/ubsha1.c index b37b2b72242..c4203ed99e3 100644 --- a/tools/ubsha1.c +++ b/tools/ubsha1.c @@ -21,13 +21,16 @@ * MA 02111-1307 USA */ +#include "os_support.h" #include <stdio.h> #include <stdlib.h> #include <unistd.h> #include <fcntl.h> #include <errno.h> #include <string.h> +#ifndef __MINGW32__ #include <sys/mman.h> +#endif #include <sys/stat.h> #include "sha1.h" |