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>
This commit is contained in:
Tamar Christina 2017-07-05 13:02:30 +01:00 committed by Corinna Vinschen
parent bfa3bbcf33
commit cc142edbe7
9 changed files with 147 additions and 17 deletions

View File

@ -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

View File

@ -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

View File

@ -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:

View File

@ -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}

View File

@ -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.

View File

@ -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}

View File

@ -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.

View File

@ -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}

View File

@ -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: