summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--README10
-rw-r--r--include/image.h2
-rw-r--r--include/libfdt_env.h12
-rw-r--r--tools/Makefile23
-rw-r--r--tools/mingw_support.c79
-rw-r--r--tools/mingw_support.h51
-rw-r--r--tools/mkimage.h5
-rw-r--r--tools/os_support.c24
-rw-r--r--tools/os_support.h29
-rw-r--r--tools/ubsha1.c3
10 files changed, 231 insertions, 7 deletions
diff --git a/README b/README
index fcc4d7c5f37..142dbccec1a 100644
--- a/README
+++ b/README
@@ -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"