Patchwork [avr] PR55243: Mistimed use of STAMP in Ada build

login
register
mail settings
Submitter Georg-Johann Lay
Date Jan. 7, 2013, 12:34 p.m.
Message ID <50EAC0BB.3030101@gjlay.de>
Download mbox | patch
Permalink /patch/209907/
State New
Headers show

Comments

Georg-Johann Lay - Jan. 7, 2013, 12:34 p.m.
This patch is a rewrite of t-avr so that STAMP is not needed.

Ada triggers a mistimed re-build of targets using STAMP which causes PR55243
because the respective places in gnattools ada/gcc-interface don't set STAMP.

With this patch, files that were formerly auto-generated must be generated by
hand after avr-mcus.def is changed.

Ok to apply?

Johann


	PR55243
	* config/avr/t-avr: Don't automatically rebuild
	$(srcdir)/config/avr/t-multilib
	$(srcdir)/config/avr/avr-tables.opt
	$(srcdir)/doc/avr-mmcu.texi
	(avr-mcus): New phony target to build them on request.
	(s-avr-mlib, s-avr-mmcu-texi): Remove.
	* avr/avr-mcus.def: Adjust comments.
Denis Chertykov - Jan. 7, 2013, 12:39 p.m.
2013/1/7 Georg-Johann Lay <avr@gjlay.de>:
> This patch is a rewrite of t-avr so that STAMP is not needed.
>
> Ada triggers a mistimed re-build of targets using STAMP which causes PR55243
> because the respective places in gnattools ada/gcc-interface don't set STAMP.
>
> With this patch, files that were formerly auto-generated must be generated by
> hand after avr-mcus.def is changed.
>
> Ok to apply?
>
> Johann
>
>
>         PR55243
>         * config/avr/t-avr: Don't automatically rebuild
>         $(srcdir)/config/avr/t-multilib
>         $(srcdir)/config/avr/avr-tables.opt
>         $(srcdir)/doc/avr-mmcu.texi
>         (avr-mcus): New phony target to build them on request.
>         (s-avr-mlib, s-avr-mmcu-texi): Remove.
>         * avr/avr-mcus.def: Adjust comments.

Please, apply.

Denis.

Patch

Index: config/avr/t-avr
===================================================================
--- config/avr/t-avr	(revision 194964)
+++ config/avr/t-avr	(working copy)
@@ -40,48 +40,36 @@  avr.o avr-c.o: $(srcdir)/config/avr/buil
 
 AVR_MCUS = $(srcdir)/config/avr/avr-mcus.def
 
+# Run `avr-mcus' after you changed or added devices in  avr-mcus.def
+
+.PHONY: avr-mcus
+
+avr-mcus: $(srcdir)/config/avr/t-multilib \
+	  $(srcdir)/config/avr/avr-tables.opt \
+	  $(srcdir)/doc/avr-mmcu.texi ; @true
+
+# Make sure that -mmcu= is supported for devices from avr-mcus.def and
+# is displaed all -mmcu= values are displayed on the help screen
 $(srcdir)/config/avr/avr-tables.opt: $(srcdir)/config/avr/genopt.sh $(AVR_MCUS)
 	$(SHELL) $< $(AVR_MCUS) > $@
 
+# Make sure that -mmcu= support is in sync with -mmcu= documentation.
 gen-avr-mmcu-texi$(build_exeext): $(srcdir)/config/avr/gen-avr-mmcu-texi.c \
   $(AVR_MCUS) $(srcdir)/config/avr/avr-devices.c \
   $(srcdir)/config/avr/avr-arch.h
 	$(CC_FOR_BUILD) $(CFLAGS_FOR_BUILD) $< -o $@
 
-# Make sure that the -mmcu= documentation is in sync with the compiler.
-$(srcdir)/doc/avr-mmcu.texi: s-avr-mmcu-texi; @true
-
-# invoke.texi @includes avr-mmcu.texi.  Put this dependency here instead
-# of in the global Makefile so that developers of other backends are not
-# bothered with AVR stuff. 
-$(srcdir)/doc/invoke.texi: $(srcdir)/doc/avr-mmcu.texi
-
-# Ensure that device support is in sync with -mmcu= documentation.
-s-avr-mmcu-texi: gen-avr-mmcu-texi$(build_exeext)
-	$(RUN_GEN) ./$< > tmp-avr-mmcu.texi
-	$(SHELL) $(srcdir)/../move-if-change tmp-avr-mmcu.texi avr-mmcu.texi
-	@if cmp -s $(srcdir)/doc/avr-mmcu.texi avr-mmcu.texi; then \
-	  $(STAMP) $@;		\
-	else			\
-	  echo >&2 ;		\
-	  echo "***" >&2 ;	\
-	  echo "*** Verify that you have permission to grant a" >&2 ;	\
-	  echo "*** GFDL license for all new text in" >&2 ; 		\
-	  echo "*** avr-mmcu.texi, then copy it to $(srcdir)/doc/avr-mmcu.texi" >&2 ; \
-	  echo "***" >&2 ;	\
-	  false; 		\
-	fi
+$(srcdir)/doc/avr-mmcu.texi: gen-avr-mmcu-texi$(build_exeext)
+	$(RUN_GEN) ./$< > $@
 
+# Map -mmcu= to the right multilib variant
 # MULTILIB_OPTIONS
 # MULTILIB_DIRNAMES
 # MULTILIB_EXCEPTIONS
 # MULTILIB_MATCHES
-$(srcdir)/config/avr/t-multilib: s-avr-mlib; @true
 
 s-mlib: $(srcdir)/config/avr/t-multilib
 
-s-avr-mlib: $(srcdir)/config/avr/genmultilib.awk $(AVR_MCUS)
-	$(AWK) -f $< -v FORMAT=Makefile   $< $(AVR_MCUS) > tmp-avr-mlib
-	$(SHELL) $(srcdir)/../move-if-change \
-		tmp-avr-mlib 	$(srcdir)/config/avr/t-multilib
-	$(STAMP) $@
+$(srcdir)/config/avr/t-multilib: $(srcdir)/config/avr/genmultilib.awk \
+				 $(AVR_MCUS)
+	$(AWK) -f $< -v FORMAT=Makefile   $< $(AVR_MCUS) > $@
Index: config/avr/avr-mcus.def
===================================================================
--- config/avr/avr-mcus.def	(revision 194964)
+++ config/avr/avr-mcus.def	(working copy)
@@ -18,19 +18,50 @@ 
    along with GCC; see the file COPYING3.  If not see
    <http://www.gnu.org/licenses/>.  */
 
-/* List of all known AVR MCU types - if updated, it has to be kept
-   in sync in several places (FIXME: is there a better way?):
-    - here;
-    - gas/config/tc-avr.c;
-    - avr-libc.
+/* List of all known AVR MCU types.  If updated, cd to $(builddir)/gcc and run
+
+   $ make avr-mcus
+
+   This will regenerate / update the following source files:
+
+   -  $(srcdir)/config/avr/t-multilib
+   -  $(srcdir)/config/avr/avr-tables.opt
+   -  $(srcdir)/doc/avr-mmcu.texi
+
+   After that, rebuild everything and check-in the new sources to the repo.
+   The device list below has to be kept in sync with the following places:
+
+   -  here
+   -  gas/config/tc-avr.c
+   -  avr-libc
 
    Before including this file, define a macro:
 
-   AVR_MCU (NAME, ARCH, MACRO, SHORT_SP, ERRATA_SKIP, DATA_SEC, N_FLASH, LIBRARY_NAME)
+   AVR_MCU (NAME, ARCH, MACRO, SHORT_SP, ERRATA_SKIP, DATA_SEC, N_FLASH,
+            LIBRARY_NAME)
+
+   where the arguments are the fields of struct mcu_type_s:
+   
+       NAME         Accept -mmcu=<NAME>
+
+       ARCH         Specifies the multilib variant together with SHORT_SP
+
+       MACRO        If NULL, this is a core and not a device.  If non-NULL,
+                    supply respective built-in macro.
+
+       SHORT_SP     The device / multilib has an 8-bit stack pointer (no SPH).
+
+       ERRATA_SKIP  Apply work-around for the "skip 32-bit instruction"
+                    silicon bug:  Don't skip 32-bit instrctions.
+
+       DATA_SEC     First address of SRAM, used in  -Tdata=  by the driver.
+
+       N_FLASH      Number of 64 KiB flash segments, rounded up.
 
-   where the arguments are the fields of struct mcu_type_s.  */
+       LIBRARY_NAME Used by the driver to linke startup code from avr-libc
+                    as of  crt<LIBRARY_NAME>.o
 
-/* "avr2" must be first for the "0" default to work as intended.  */
+   "avr2" must be first for the "0" default to work as intended.  */
 
 /* Classic, <= 8K.  */
 AVR_MCU ("avr2",                 ARCH_AVR2, NULL,                        0, 1, 0x0060, 6, "s8515")