public inbox for newlib-cvs@sourceware.org
help / color / mirror / Atom feed
From: Corinna Vinschen <corinna@sourceware.org>
To: newlib-cvs@sourceware.org
Subject: [newlib-cygwin] Add the needed build system changes in order to compile and create the new libraries for Semihosting
Date: Wed, 05 Jul 2017 12:42:00 -0000	[thread overview]
Message-ID: <20170705124214.101353.qmail@sourceware.org> (raw)

https://sourceware.org/git/gitweb.cgi?p=newlib-cygwin.git;h=cc142edbe7af2f7d52a80b137ac0ad141408033d

commit cc142edbe7af2f7d52a80b137ac0ad141408033d
Author: Tamar Christina <tamar.christina@arm.com>
Date:   Wed Jul 5 13:02:30 2017 +0100

    Add the needed build system changes in order to compile and create the new libraries for Semihosting v2 for ARM.
    
    This uses the new recursive build target in multi-build.in
    
    The new spec files are:
    
    For AArch32/ARM (m for mixed mode):
      - rdimon-v2m.specs
      - aprofile-validation-v2m.specs
      - aprofile-ve-v2m.specs
    
    These spec files will be using the new libraries generated
    by multi-build.in.
    
    Signed-off-by: Tamar Christina <tamar.christina@arm.com>

Diff:
---
 libgloss/arm/Makefile.in                       | 58 ++++++++++++++++++++------
 libgloss/arm/coff-rdimon-v2m.specs             | 16 +++++++
 libgloss/arm/coff-rdimon.specs                 |  7 ++++
 libgloss/arm/elf-aprofile-validation-v2m.specs | 23 ++++++++++
 libgloss/arm/elf-aprofile-validation.specs     |  5 ++-
 libgloss/arm/elf-aprofile-ve-v2m.specs         | 22 ++++++++++
 libgloss/arm/elf-aprofile-ve.specs             |  4 +-
 libgloss/arm/elf-rdimon-v2m.specs              | 22 ++++++++++
 libgloss/arm/elf-rdimon.specs                  |  7 ++++
 9 files changed, 147 insertions(+), 17 deletions(-)

diff --git a/libgloss/arm/Makefile.in b/libgloss/arm/Makefile.in
index 3f87dea..e1bad17 100644
--- a/libgloss/arm/Makefile.in
+++ b/libgloss/arm/Makefile.in
@@ -29,8 +29,15 @@ MULTISRCTOP =
 MULTIBUILDTOP =
 MULTIDIRS =
 MULTISUBDIR =
+MULTILIBNAME =
 MULTIDO = true
 MULTICLEAN = true
+MULTI_FLAGS_FOR_TARGET = MULTI_DEFAULT_FLAGS
+MULTI_DEFAULT_FLAGS = -DSEMIHOST_V2
+
+MULTIDIRS += semihv2m
+MULTIDIR_semihv2m_FLAGS = $(MULTI_DEFAULT_FLAGS) -DSEMIHOST_V2_MIXED_MODE
+MULTIDIR_semihv2m_NAME = -v2m
 
 SHELL =	/bin/sh
 
@@ -75,10 +82,12 @@ RDPMON_OBJS	= ftruncate.o libcfunc.o syscalls.o trap.o truncate.o _exit.o _kill.
 RDPMON_SCRIPTS	= rdpmon.specs
 RDPMON_INSTALL	= install-rdpmon
 
-RDIMON_CRT0	= rdimon-crt0.o
-RDIMON_BSP	= librdimon.a
+RDIMON_CRT0	= rdimon-crt0${${MULTILIBNAME}}.o
+RDIMON_BSP	= librdimon${${MULTILIBNAME}}.a
 RDIMON_OBJS	= $(patsubst %,rdimon-%,$(RDPMON_OBJS))
-RDIMON_SCRIPTS	= rdimon.specs aprofile-validation.specs aprofile-ve.specs
+RDIMON_SCRIPTS	= rdimon${${MULTILIBNAME}}.specs \
+		  aprofile-validation${${MULTILIBNAME}}.specs \
+		  aprofile-ve${${MULTILIBNAME}}.specs
 RDIMON_INSTALL	= install-rdimon
 
 CFLAGS		= -g
@@ -110,6 +119,7 @@ all: ${CRT0} ${LINUX_CRT0} ${LINUX_BSP} ${REDBOOT_CRT0} ${REDBOOT_OBJS} ${RDPMON
 	    else true; fi; \
 	  else true; fi; \
 	done
+	$(MAKE) $(AM_MAKEFLAGS) all-recursive
 
 #
 # here's where we build the test programs for each target
@@ -121,33 +131,34 @@ test:
 crt0.o: crt0.S
 redboot-crt0.o: redboot-crt0.S
 redboot-syscalls.o: redboot-syscalls.c $(srcdir)/../syscall.h
+	$(CC) $(CFLAGS_FOR_TARGET) $($(MULTI_FLAGS_FOR_TARGET)) $(CFLAGS) $(INCLUDES) -o $@ -c $<
 
 rdpmon-crt0.o: crt0.S
-	$(CC) $(CFLAGS_FOR_TARGET) $(CFLAGS) $(INCLUDES) -DARM_RDP_MONITOR -o $@ -c $<
+	$(CC) $(CFLAGS_FOR_TARGET) $($(MULTI_FLAGS_FOR_TARGET)) $(CFLAGS) $(INCLUDES) -DARM_RDP_MONITOR -o $@ -c $<
 
-rdimon-crt0.o: crt0.S
-	$(CC) $(CFLAGS_FOR_TARGET) $(CFLAGS) $(INCLUDES) -DARM_RDI_MONITOR -o $@ -c $<
+rdimon-crt0${${MULTILIBNAME}}.o: crt0.S
+	$(CC) $(CFLAGS_FOR_TARGET) $($(MULTI_FLAGS_FOR_TARGET)) $(CFLAGS) $(INCLUDES) -DARM_RDI_MONITOR -o $@ -c $<
 
 rdimon-ftruncate.o: ftruncate.c
-	$(CC) $(CFLAGS_FOR_TARGET) $(CFLAGS) $(INCLUDES) -DARM_RDI_MONITOR -o $@ -c $<
+	$(CC) $(CFLAGS_FOR_TARGET) $($(MULTI_FLAGS_FOR_TARGET)) $(CFLAGS) $(INCLUDES) -DARM_RDI_MONITOR -o $@ -c $<
 
 rdimon-trap.o: trap.S
-	$(CC) $(CFLAGS_FOR_TARGET) $(CFLAGS) $(INCLUDES) -DARM_RDI_MONITOR -o $@ -c $<
+	$(CC) $(CFLAGS_FOR_TARGET) $($(MULTI_FLAGS_FOR_TARGET)) $(CFLAGS) $(INCLUDES) -DARM_RDI_MONITOR -o $@ -c $<
 
 rdimon-truncate.o: truncate.c
-	$(CC) $(CFLAGS_FOR_TARGET) $(CFLAGS) $(INCLUDES) -DARM_RDI_MONITOR -o $@ -c $<
+	$(CC) $(CFLAGS_FOR_TARGET) $($(MULTI_FLAGS_FOR_TARGET)) $(CFLAGS) $(INCLUDES) -DARM_RDI_MONITOR -o $@ -c $<
 
 rdimon-_exit.o: _exit.c
-	$(CC) $(CFLAGS_FOR_TARGET) $(CFLAGS) $(INCLUDES) -DARM_RDI_MONITOR -o $@ -c $<
+	$(CC) $(CFLAGS_FOR_TARGET) $($(MULTI_FLAGS_FOR_TARGET)) $(CFLAGS) $(INCLUDES) -DARM_RDI_MONITOR -o $@ -c $<
 
 rdimon-_kill.o: _kill.c
-	$(CC) $(CFLAGS_FOR_TARGET) $(CFLAGS) $(INCLUDES) -DARM_RDI_MONITOR -o $@ -c $<
+	$(CC) $(CFLAGS_FOR_TARGET) $($(MULTI_FLAGS_FOR_TARGET)) $(CFLAGS) $(INCLUDES) -DARM_RDI_MONITOR -o $@ -c $<
 
 rdimon-syscalls.o: syscalls.c
-	$(CC) $(CFLAGS_FOR_TARGET) $(CFLAGS) $(INCLUDES) -DARM_RDI_MONITOR -o $@ -c $<
+	$(CC) $(CFLAGS_FOR_TARGET) $($(MULTI_FLAGS_FOR_TARGET)) $(CFLAGS) $(INCLUDES) -DARM_RDI_MONITOR -o $@ -c $<
 
 rdimon-libcfunc.o: libcfunc.c
-	$(CC) $(CFLAGS_FOR_TARGET) $(CFLAGS) $(INCLUDES) -DARM_RDI_MONITOR -o $@ -c $<
+	$(CC) $(CFLAGS_FOR_TARGET) $($(MULTI_FLAGS_FOR_TARGET)) $(CFLAGS) $(INCLUDES) -DARM_RDI_MONITOR -o $@ -c $<
 
 $(LINUX_BSP): $(LINUX_OBJS)
 	${AR} ${ARFLAGS} $@ $^
@@ -161,6 +172,23 @@ $(RDIMON_BSP): $(RDIMON_OBJS)
 	${AR} ${ARFLAGS} $@ $^
 	${RANLIB} $@
 
+# Multilib support.
+.PHONY:  multi-do all-multi clean-multi install-multi
+
+all-recursive: all-multi
+clean-recursive: clean-multi
+install-recursive: install-multi
+
+# The $(MAKE) comments below are to enable parallel building.
+all-multi:
+	$(MAKE) $(AM_MAKEFLAGS) DO=all multi-do
+
+clean-multi:
+	$(MAKE) $(AM_MAKEFLAGS) DO=clean multi-do
+
+install-multi:
+	$(MAKE) $(AM_MAKEFLAGS) DO=install multi-do
+
 clean mostlyclean:
 	rm -f a.out core *.i *.o *-test *.srec *.dis *.x $(SIM_BSP) $(IQ80310_BSP)
 	@rootpre=`pwd`/; export rootpre; \
@@ -172,6 +200,7 @@ clean mostlyclean:
 	    else true; fi; \
 	  else true; fi; \
 	done
+	$(MAKE) $(AM_MAKEFLAGS) clean-recursive
 
 distclean maintainer-clean realclean: clean
 	rm -f Makefile config.status *~
@@ -187,6 +216,7 @@ install: ${CRT0_INSTALL} ${LINUX_INSTALL} ${REDBOOT_INSTALL} ${RDPMON_INSTALL} $
 	    else true; fi; \
 	  else true; fi; \
 	done
+	$(MAKE) $(AM_MAKEFLAGS) install-recursive
 
 install-nano:
 	set -e; for x in ${NANO_SCRIPTS}; do ${INSTALL_DATA} ${srcdir}/${objtype}$$x $(DESTDIR)${tooldir}/lib${MULTISUBDIR}/$$x; done
@@ -228,3 +258,5 @@ Makefile: Makefile.in config.status @host_makefile_frag_path@
 
 config.status: configure
 	$(SHELL) config.status --recheck
+
+include $(srcdir)/../multi-build.in
\ No newline at end of file
diff --git a/libgloss/arm/coff-rdimon-v2m.specs b/libgloss/arm/coff-rdimon-v2m.specs
new file mode 100644
index 0000000..c0f723e
--- /dev/null
+++ b/libgloss/arm/coff-rdimon-v2m.specs
@@ -0,0 +1,16 @@
+# rdimon-v2m.specs
+#
+# Spec file for AArch64 baremetal newlib with version 2 of the
+# AngelAPI semi-hosting. This version is intended for AArch64/AArch32
+# mixed mode executables and as such uses the HLT trap instructions.
+#
+# This version supports extensibility through an extension mechanism.
+
+%rename link                old_link
+
+*link:
+%(old_link) -lrdimon-v2m
+
+*startfile:
+rdimon-crt0-v2m%O%s
+
diff --git a/libgloss/arm/coff-rdimon.specs b/libgloss/arm/coff-rdimon.specs
index ace5506..89135cf 100644
--- a/libgloss/arm/coff-rdimon.specs
+++ b/libgloss/arm/coff-rdimon.specs
@@ -1,3 +1,10 @@
+# rdimon.specs
+#
+# Spec file for AArch64 baremetal newlib with version 2 of the
+# AngelAPI semi-hosting using the SVC trap instruction.
+#
+# This version supports extensibility through an extension mechanism.
+
 %rename link                old_link
 
 *link:
diff --git a/libgloss/arm/elf-aprofile-validation-v2m.specs b/libgloss/arm/elf-aprofile-validation-v2m.specs
new file mode 100644
index 0000000..accef99
--- /dev/null
+++ b/libgloss/arm/elf-aprofile-validation-v2m.specs
@@ -0,0 +1,23 @@
+# aprofile-validation-v2m.specs
+#
+# Spec file for AArch32 A profile baremetal newlib, libgloss on
+# VALIDATION platform with AngelAPI semi-hosting version 2 using the HLT
+# trap instruction.
+#
+# This Spec file is also appropriate for the foundation model.
+
+%rename link old_link
+
+*link:
+--defsym=_rdimon_vector_base=0x00000000 -Ttext-segment=0x00010000 %(old_link)
+
+%rename lib libc
+
+*libgloss:
+-lrdimon-v2m
+
+*lib:
+cpu-init/rdimon-aem.o%s --start-group %(libc) %(libgloss) --end-group
+
+*startfile:
+crti%O%s crtbegin%O%s %{!pg:rdimon-crt0-v2m%O%s} %{pg:rdimon-crt0-v2m%O%s}
diff --git a/libgloss/arm/elf-aprofile-validation.specs b/libgloss/arm/elf-aprofile-validation.specs
index 166a5de..4ef0e95 100644
--- a/libgloss/arm/elf-aprofile-validation.specs
+++ b/libgloss/arm/elf-aprofile-validation.specs
@@ -1,7 +1,8 @@
-# aem-validation.specs
+# aprofile-validation.specs
 #
 # Spec file for AArch32 A profile baremetal newlib, libgloss on
-# VALIDATION platform with AngelAPI semi-hosting.
+# VALIDATION platform with AngelAPI semi-hosting version 2 using the SVC
+# trap instruction.
 #
 # This Spec file is also appropriate for the foundation model.
 
diff --git a/libgloss/arm/elf-aprofile-ve-v2m.specs b/libgloss/arm/elf-aprofile-ve-v2m.specs
new file mode 100644
index 0000000..75f3802
--- /dev/null
+++ b/libgloss/arm/elf-aprofile-ve-v2m.specs
@@ -0,0 +1,22 @@
+# aprofile-ve-v2m.specs
+#
+# Spec file for AArch32 A profile baremetal newlib, libgloss on VE platform with AngelAPI
+# semi-hosting version 2 using the HLT trap instruction.
+#
+# This Spec file is also appropriate for the foundation model.
+
+%rename link old_link
+
+*link:
+--defsym=_rdimon_vector_base=0x80000000 -Ttext-segment=0x80010000 %(old_link)
+
+%rename lib libc
+
+*libgloss:
+-lrdimon-v2m
+
+*lib:
+cpu-init/rdimon-aem.o%s --start-group %(libc) %(libgloss) --end-group
+
+*startfile:
+crti%O%s crtbegin%O%s %{!pg:rdimon-crt0-v2m%O%s} %{pg:rdimon-crt0-v2m%O%s}
diff --git a/libgloss/arm/elf-aprofile-ve.specs b/libgloss/arm/elf-aprofile-ve.specs
index d94bb7a..1461b34 100644
--- a/libgloss/arm/elf-aprofile-ve.specs
+++ b/libgloss/arm/elf-aprofile-ve.specs
@@ -1,7 +1,7 @@
-# aem-ve.specs
+# aprofile-ve.specs
 #
 # Spec file for AArch32 A profile baremetal newlib, libgloss on VE platform with AngelAPI
-# semi-hosting.
+# semi-hosting version 2 using the SVC trap instruction.
 #
 # This Spec file is also appropriate for the foundation model.
 
diff --git a/libgloss/arm/elf-rdimon-v2m.specs b/libgloss/arm/elf-rdimon-v2m.specs
new file mode 100644
index 0000000..e4f2545
--- /dev/null
+++ b/libgloss/arm/elf-rdimon-v2m.specs
@@ -0,0 +1,22 @@
+# rdimon-v2m.specs
+#
+# Spec file for AArch64 baremetal newlib with version 2 of the
+# AngelAPI semi-hosting. This version is intended for AArch64/AArch32
+# mixed mode executables and as such uses the HLT trap instruction.
+#
+# This version supports extensibility through an extension mechanism.
+
+%rename link_gcc_c_sequence                rdimon_link_gcc_c_sequence
+
+*rdimon_libc:
+%{!specs=nano.specs:-lc} %{specs=nano.specs:-lc_nano}
+
+*rdimon_libgloss:
+%{!specs=nano.specs:-lrdimon-v2m} %{specs=nano.specs:-lrdimon_nano}
+
+*link_gcc_c_sequence:
+%(rdimon_link_gcc_c_sequence) --start-group %G %(rdimon_libc) %(rdimon_libgloss) --end-group
+
+*startfile:
+crti%O%s crtbegin%O%s %{!pg:rdimon-crt0-v2m%O%s} %{pg:rdimon-crt0-v2m%O%s}
+
diff --git a/libgloss/arm/elf-rdimon.specs b/libgloss/arm/elf-rdimon.specs
index c35061f..b4d020d 100644
--- a/libgloss/arm/elf-rdimon.specs
+++ b/libgloss/arm/elf-rdimon.specs
@@ -1,3 +1,10 @@
+# rdimon.specs
+#
+# Spec file for AArch64 baremetal newlib with version 2 of the
+# AngelAPI semi-hosting using the SVC trap instruction.
+#
+# This version supports extensibility through an extension mechanism.
+
 %rename link_gcc_c_sequence                rdimon_link_gcc_c_sequence
 
 *rdimon_libc:


                 reply	other threads:[~2017-07-05 12:42 UTC|newest]

Thread overview: [no followups] expand[flat|nested]  mbox.gz  Atom feed

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20170705124214.101353.qmail@sourceware.org \
    --to=corinna@sourceware.org \
    --cc=newlib-cvs@sourceware.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).