[RFC][AArch64] Support in-tree building with libgloss and linker scripts (specs files)

Richard Earnshaw rearnsha@arm.com
Fri Jan 24 14:46:00 GMT 2014


When using libgloss and linker scripts unified source tree builds
(gcc+newlib+binutils) fail when building the libraries because the
linker scripts have not been installed at that time.

A suitable solution to this is to make copies of the scripts in the
build area, which the compiler is configured to search during the build.
 Then using LDFLAGS_FOR_TARGET=-specs=<spec-file> flag will correctly
pick up the appropriate libgloss specs file.

I've marked this as an RFC as I'm not sure if the pattern-based rule is
GNUmake specific, and if it is, whether this is not appropriate for
newlib -- it could be written out long-hand, but this rule makes the
construct trivial to port to other libgloss targets.

This was the only patch I needed to make an aarch64-elf unified tree
build and run the gcc testsuite.

Thoughts please?

R.

	* aarch64/Makefile.in (RDIMON_SCRIPTS): Build local copies
	during make all.
-------------- next part --------------
Index: Makefile.in
===================================================================
RCS file: /cvs/src/src/libgloss/aarch64/Makefile.in,v
retrieving revision 1.4
diff -p -r1.4 Makefile.in
*** Makefile.in	18 Nov 2013 10:04:55 -0000	1.4
--- Makefile.in	21 Jan 2014 17:32:01 -0000
*************** CFLAGS		= -g
*** 93,99 ****
  # build a test program for each target board. Just trying to get
  # it to link is a good test, so we ignore all the errors for now.
  #
! all: ${CRT0} ${RDIMON_CRT0} ${RDIMON_BSP}
  	@rootpre=`pwd`/; export rootpre; \
  	srcrootpre=`cd $(srcdir); pwd`/; export srcrootpre; \
  	for dir in .. ${SUBDIRS}; do \
--- 93,99 ----
  # build a test program for each target board. Just trying to get
  # it to link is a good test, so we ignore all the errors for now.
  #
! all: ${CRT0} ${RDIMON_CRT0} ${RDIMON_BSP} ${RDIMON_SCRIPTS}
  	@rootpre=`pwd`/; export rootpre; \
  	srcrootpre=`cd $(srcdir); pwd`/; export srcrootpre; \
  	for dir in .. ${SUBDIRS}; do \
*************** install-rdimon:
*** 175,180 ****
--- 175,183 ----
  	set -e; for x in ${RDIMON_CRT0} ${RDIMON_BSP}; do ${INSTALL_DATA} $$x $(DESTDIR)${tooldir}/lib${MULTISUBDIR}/$$x; done
  	set -e; for x in ${RDIMON_SCRIPTS}; do ${INSTALL_DATA} ${srcdir}/${objtype}$$x $(DESTDIR)${tooldir}/lib${MULTISUBDIR}/$$x; done
  
+ # Make copies of the scripts to facilitate in-tree bootstrapping.
+ ${RDIMON_SCRIPTS}: %: ${objtype}%
+ 	cp $< $@
  
  doc:
  info:


More information about the Newlib mailing list