[new uImage] Add libfdt support to mkimage

Signed-off-by: Bartlomiej Sieka <tur@semihalf.com>
diff --git a/Makefile b/Makefile
index bacea3e..adfef9b 100644
--- a/Makefile
+++ b/Makefile
@@ -2927,6 +2927,9 @@
 	@rm -f $(obj)u-boot $(obj)u-boot.map $(obj)u-boot.hex $(ALL)
 	@rm -f $(obj)tools/crc32.c $(obj)tools/environment.c $(obj)tools/env/crc32.c
 	@rm -f $(obj)tools/sha1.c $(obj)tools/image.c
+	@rm -f $(obj)tools/fdt.c $(obj)tools/fdt_ro.c $(obj)tools/fdt_rw.c
+	@rm -f $(obj)tools/fdt_strerror.c $(obj)tools/fdt_wip.c
+	@rm -f $(obj)tools/libfdt_internal.h
 	@rm -f $(obj)tools/inca-swap-bytes $(obj)cpu/mpc824x/bedbug_603e.c
 	@rm -f $(obj)include/asm/proc $(obj)include/asm/arch $(obj)include/asm
 	@[ ! -d $(obj)nand_spl ] || find $(obj)nand_spl -lname "*" -print | xargs rm -f
diff --git a/include/libfdt_env.h b/include/libfdt_env.h
index 78f7258..98c522a 100644
--- a/include/libfdt_env.h
+++ b/include/libfdt_env.h
@@ -24,7 +24,11 @@
 #include <stddef.h>
 #include <linux/types.h>
 #include <asm/byteorder.h>
+#ifdef USE_HOSTCC
+#include <string.h>
+#else
 #include <linux/string.h>
+#endif /* USE_HOSTCC */
 
 extern struct fdt_header *fdt;  /* Pointer to the working fdt */
 
diff --git a/libfdt/fdt.c b/libfdt/fdt.c
index 586a361..071470d 100644
--- a/libfdt/fdt.c
+++ b/libfdt/fdt.c
@@ -50,8 +50,12 @@
  */
 #include "libfdt_env.h"
 
+#ifndef USE_HOSTCC
 #include <fdt.h>
 #include <libfdt.h>
+#else
+#include "fdt_host.h"
+#endif
 
 #include "libfdt_internal.h"
 
diff --git a/libfdt/fdt_ro.c b/libfdt/fdt_ro.c
index 12a37d5..1ae3a55 100644
--- a/libfdt/fdt_ro.c
+++ b/libfdt/fdt_ro.c
@@ -50,8 +50,12 @@
  */
 #include "libfdt_env.h"
 
+#ifndef USE_HOSTCC
 #include <fdt.h>
 #include <libfdt.h>
+#else
+#include "fdt_host.h"
+#endif
 
 #include "libfdt_internal.h"
 
diff --git a/libfdt/fdt_rw.c b/libfdt/fdt_rw.c
index 6673f8e..2fb81dd 100644
--- a/libfdt/fdt_rw.c
+++ b/libfdt/fdt_rw.c
@@ -50,8 +50,12 @@
  */
 #include "libfdt_env.h"
 
+#ifndef USE_HOSTCC
 #include <fdt.h>
 #include <libfdt.h>
+#else
+#include "fdt_host.h"
+#endif
 
 #include "libfdt_internal.h"
 
diff --git a/libfdt/fdt_strerror.c b/libfdt/fdt_strerror.c
index f9d32ef..abf792e 100644
--- a/libfdt/fdt_strerror.c
+++ b/libfdt/fdt_strerror.c
@@ -50,8 +50,12 @@
  */
 #include "libfdt_env.h"
 
+#ifndef USE_HOSTCC
 #include <fdt.h>
 #include <libfdt.h>
+#else
+#include "fdt_host.h"
+#endif
 
 #include "libfdt_internal.h"
 
diff --git a/libfdt/fdt_wip.c b/libfdt/fdt_wip.c
index 88e24b8..24e1724 100644
--- a/libfdt/fdt_wip.c
+++ b/libfdt/fdt_wip.c
@@ -50,8 +50,12 @@
  */
 #include "libfdt_env.h"
 
+#ifndef USE_HOSTCC
 #include <fdt.h>
 #include <libfdt.h>
+#else
+#include "fdt_host.h"
+#endif
 
 #include "libfdt_internal.h"
 
diff --git a/tools/.gitignore b/tools/.gitignore
index c33679a..0ce2e77 100644
--- a/tools/.gitignore
+++ b/tools/.gitignore
@@ -7,3 +7,10 @@
 /mkimage
 /sha1.c
 /ubsha1
+/image.c
+/fdt.c
+/fdt_ro.c
+/fdt_rw.c
+/fdt_strerror.c
+/fdt_wip.c
+/libfdt_internal.h
diff --git a/tools/Makefile b/tools/Makefile
index 0cc4cc9..aa4af18 100644
--- a/tools/Makefile
+++ b/tools/Makefile
@@ -37,6 +37,8 @@
 #OBJ_FILES	+= mpc86x_clk.o
 #endif
 
+LIBFDT_OBJ_FILES	= fdt.o fdt_ro.o fdt_rw.o fdt_strerror.o fdt_wip.o
+
 LOGO_H	= $(OBJTREE)/include/bmp_logo.h
 
 ifeq ($(LOGO_BMP),)
@@ -120,6 +122,10 @@
 		-idirafter $(OBJTREE)/include \
 		-DTEXT_BASE=$(TEXT_BASE) -DUSE_HOSTCC
 CFLAGS     = $(HOST_CFLAGS) $(CPPFLAGS) -O
+
+# No -pedantic switch to avoid libfdt compilation warnings
+FIT_CFLAGS = -Wall $(CPPFLAGS) -O
+
 AFLAGS	   = -D__ASSEMBLY__ $(CPPFLAGS)
 CC	   = $(HOSTCC)
 STRIP	   = $(HOSTSTRIP)
@@ -137,7 +143,7 @@
 		$(CC) $(CFLAGS) $(HOST_LDFLAGS) -o $@ $^
 		$(STRIP) $@
 
-$(obj)mkimage$(SFX):	$(obj)mkimage.o $(obj)crc32.o $(obj)image.o $(obj)sha1.o
+$(obj)mkimage$(SFX):	$(obj)mkimage.o $(obj)crc32.o $(obj)image.o $(obj)sha1.o $(LIBFDT_OBJ_FILES)
 		$(CC) $(CFLAGS) $(HOST_LDFLAGS) -o $@ $^
 		$(STRIP) $@
 
@@ -174,10 +180,10 @@
 		$(CC) -g $(CFLAGS) -c -o $@ $<
 
 $(obj)image.o:	$(obj)image.c
-		$(CC) -g $(CFLAGS) -c -o $@ $<
+		$(CC) -g $(FIT_CFLAGS) -c -o $@ $<
 
 $(obj)mkimage.o:	$(src)mkimage.c
-		$(CC) -g $(CFLAGS) -c -o $@ $<
+		$(CC) -g $(FIT_CFLAGS) -c -o $@ $<
 
 $(obj)ncb.o:		$(src)ncb.c
 		$(CC) -g $(CFLAGS) -c -o $@ $<
@@ -191,6 +197,21 @@
 $(obj)mpc86x_clk.o:	$(src)mpc86x_clk.c
 		$(CC) -g $(CFLAGS) -c -o $@ $<
 
+$(obj)fdt.o:	$(obj)fdt.c
+		$(CC) -g $(FIT_CFLAGS) -c -o $@ $<
+
+$(obj)fdt_ro.o:	$(obj)fdt_ro.c
+		$(CC) -g $(FIT_CFLAGS) -c -o $@ $<
+
+$(obj)fdt_rw.o:	$(obj)fdt_rw.c
+		$(CC) -g $(FIT_CFLAGS) -c -o $@ $<
+
+$(obj)fdt_strerror.o:	$(obj)fdt_strerror.c
+		$(CC) -g $(FIT_CFLAGS) -c -o $@ $<
+
+$(obj)fdt_wip.o:	$(obj)fdt_wip.c
+		$(CC) -g $(FIT_CFLAGS) -c -o $@ $<
+
 subdirs:
 ifeq ($(TOOLSUBDIRS),)
 		@:
@@ -224,6 +245,30 @@
 		@rm -f $(obj)image.c
 		ln -s $(src)../common/image.c $(obj)image.c
 
+$(obj)fdt.c:	libfdt_internal.h
+		@rm -f $(obj)fdt.c
+		ln -s $(src)../libfdt/fdt.c $(obj)fdt.c
+
+$(obj)fdt_ro.c:	libfdt_internal.h
+		@rm -f $(obj)fdt_ro.c
+		ln -s $(src)../libfdt/fdt_ro.c $(obj)fdt_ro.c
+
+$(obj)fdt_rw.c:	libfdt_internal.h
+		@rm -f $(obj)fdt_rw.c
+		ln -s $(src)../libfdt/fdt_rw.c $(obj)fdt_rw.c
+
+$(obj)fdt_strerror.c:	libfdt_internal.h
+		@rm -f $(obj)fdt_strerror.c
+		ln -s $(src)../libfdt/fdt_strerror.c $(obj)fdt_strerror.c
+
+$(obj)fdt_wip.c:	libfdt_internal.h
+		@rm -f $(obj)fdt_wip.c
+		ln -s $(src)../libfdt/fdt_wip.c $(obj)fdt_wip.c
+
+$(obj)libfdt_internal.h:
+		@rm -f $(obj)libfdt_internal.h
+		ln -s $(src)../libfdt/libfdt_internal.h $(obj)libfdt_internal.h
+
 $(LOGO_H):	$(obj)bmp_logo $(LOGO_BMP)
 		$(obj)./bmp_logo $(LOGO_BMP) >$@
 
diff --git a/tools/fdt_host.h b/tools/fdt_host.h
new file mode 100644
index 0000000..085013e
--- /dev/null
+++ b/tools/fdt_host.h
@@ -0,0 +1,28 @@
+/*
+ * (C) Copyright 2008 Semihalf
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License as
+ * published by the Free Software Foundation; either version 2 of
+ * the License, or (at your option) any later version.
+ *
+ * This program 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 General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston,
+ * MA 02111-1307 USA
+ */
+
+#ifndef __FDT_HOST_H__
+#define __FDT_HOST_H__
+
+/* Make sure to include u-boot version of libfdt include files */
+#include "../include/fdt.h"
+#include "../include/libfdt.h"
+#include "../include/fdt_support.h"
+
+#endif /* __FDT_HOST_H__ */
diff --git a/tools/mkimage.h b/tools/mkimage.h
index a01977e..cdd52bc 100644
--- a/tools/mkimage.h
+++ b/tools/mkimage.h
@@ -33,6 +33,7 @@
 #include <time.h>
 #include <unistd.h>
 #include <sha1.h>
+#include "fdt_host.h"
 
 #if defined(__BEOS__) || defined(__NetBSD__) || defined(__APPLE__)
 #include <inttypes.h>