start a linker script helper file
authorMike Frysinger <vapier@gentoo.org>
Sun, 23 Aug 2009 06:47:59 +0000 (02:47 -0400)
committerWolfgang Denk <wd@denx.de>
Sun, 23 Aug 2009 20:33:33 +0000 (22:33 +0200)
Start a common header file for common linker script code (such as
workarounds for older linkers) rather than doing this in the build system.

As fallout, we no longer execute the linker every time config.mk is
included by a build file (which can easily be 70+ times), but rather only
execute it once.

This also fixes a bug in the major version checking by creating a macro to
easily compare versions and keep people from making the same common
mistake (forgetting to check major and minor together).

Signed-off-by: Mike Frysinger <vapier@gentoo.org>
Makefile
config.mk
include/u-boot/u-boot.lds.h [new file with mode: 0644]

index 8fb6562974ebffc5cf37133a060fd34dc512ef48..02393b680b2ed0b48016d3741b1b10f8f00bc5b7 100644 (file)
--- a/Makefile
+++ b/Makefile
@@ -267,6 +267,14 @@ endif
 PLATFORM_LIBS += $(PLATFORM_LIBGCC)
 export PLATFORM_LIBS
 
+# Special flags for CPP when processing the linker script.
+# Pass the version down so we can handle backwards compatibility
+# on the fly.
+LDPPFLAGS += \
+       -include $(TOPDIR)/include/u-boot/u-boot.lds.h \
+       $(shell $(LD) --version | \
+         sed -ne 's/GNU ld version \([0-9][0-9]*\)\.\([0-9][0-9]*\).*/-DLD_MAJOR=\1 -DLD_MINOR=\2/p')
+
 ifeq ($(CONFIG_NAND_U_BOOT),y)
 NAND_SPL = nand_spl
 U_BOOT_NAND = $(obj)u-boot-nand.bin
index 7bc7315d5d28e62185faa5a4d441e144b363de4b..885215799e6bde51c9b5e65c0a44d764e6826248 100644 (file)
--- a/config.mk
+++ b/config.mk
@@ -171,16 +171,6 @@ ifneq ($(TEXT_BASE),)
 LDFLAGS += -Ttext $(TEXT_BASE)
 endif
 
-# Special flags for CPP when processing the linker script
-# Linker versions prior to 2.16 don't understand the builting
-# functions SORT_BY_ALIGNMENT() and SORT_BY_NAME(), so disable these
-ifeq ($(shell $(LD) -v | \
-       sed -ne 's/GNU ld version \([0-9][0-9]*\)\.\([0-9][0-9]*\) .*/[ \1 -lt 2 ] || [ \2 -lt 16 ] \&\& echo old_ld/p' | \
-       sh),old_ld)
-LDPPFLAGS += -D'SORT_BY_ALIGNMENT(x)=x' -D'SORT_BY_NAME(x)=x'
-endif
-
-
 # Location of a usable BFD library, where we define "usable" as
 # "built for ${HOST}, supports ${TARGET}".  Sensible values are
 # - When cross-compiling: the root of the cross-environment
diff --git a/include/u-boot/u-boot.lds.h b/include/u-boot/u-boot.lds.h
new file mode 100644 (file)
index 0000000..ead37d0
--- /dev/null
@@ -0,0 +1,25 @@
+/*
+ * Linker script helper macros
+ *
+ * Copyright (c) 2009 Analog Devices Inc.
+ *
+ * Licensed under the GPL-2 or later.
+ */
+
+#ifndef __U_BOOT_LDS__
+#define __U_BOOT_LDS__
+
+/* See if the linker version is at least the specified version */
+#define LD_AT_LEAST(major, minor) \
+       ((major > LD_MAJOR) || (major == LD_MAJOR && minor <= LD_MINOR))
+
+/*
+ * Linker versions prior to 2.16 don't understand the builtin
+ * functions SORT_BY_ALIGNMENT() and SORT_BY_NAME(), so disable these
+ */
+#if !LD_AT_LEAST(2, 16)
+# define SORT_BY_ALIGNMENT(x) x
+# define SORT_BY_NAME(x) x
+#endif
+
+#endif