This is the mail archive of the newlib@sourceware.org mailing list for the newlib project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

[PATCH 5/6] RISC-V: Add gdb sim and newlib nano support. Fix a few misc minor bugs.


From c0ef4ac3b769c2910487a2d274f4b8b34c769797 Mon Sep 17 00:00:00 2001
From: Jim Wilson <jimw@sifive.com>
Date: Mon, 13 Nov 2017 12:32:50 -0800
Subject: [PATCH 5/6] RISC-V: Add gdb sim and newlib nano support.  Fix a few
 misc minor bugs.

	libgloss/
	* riscv/Makefile.in (gloss_specs, install_specs, sbrk.o)
	(sim-syscalls.o, sim_c_objs, sim_c_deps, sim_lib): New.
	(gloss_objs): Renamed from objs.
	(gloss_lib): Change objs to gloss_objs.
	(junk): Change gloss_libs to glass_lib.  Add sim_lib, sim_c_objc,
	sim_c_deps.
	(deps): Add sim_c_deps.
	(install_libs): Add sim_lib.
	(install): Add install-specs.
	* riscv/nano.specs: New.
	* riscv/sim.specs: New.
	* riscv/syscalls.c (sbrk): Put inside USING_SIM_SPECS ifndef.
---
 libgloss/riscv/Makefile.in | 42 +++++++++++++++++++++++++++++++++++++-----
 libgloss/riscv/nano.specs  | 23 +++++++++++++++++++++++
 libgloss/riscv/sim.specs   |  8 ++++++++
 3 files changed, 68 insertions(+), 5 deletions(-)
 create mode 100644 libgloss/riscv/nano.specs
 create mode 100644 libgloss/riscv/sim.specs

diff --git a/libgloss/riscv/Makefile.in b/libgloss/riscv/Makefile.in
index 5035759..175a8d4 100644
--- a/libgloss/riscv/Makefile.in
+++ b/libgloss/riscv/Makefile.in
@@ -40,6 +40,9 @@ gloss_srcs = \
 	sys_wait.c \
 	sys_write.c 
 
+gloss_specs = \
+	nano.specs sim.specs
+
 # Extra files
 
 crt0_asm      = crt0.S
@@ -117,7 +120,7 @@ gloss_c_deps = $(patsubst %.c, %.d, $(notdir $(gloss_c_srcs)))
 $(gloss_c_objs) : %.o : %.c
 	$(COMPILE) -c $<
 
-objs += $(gloss_c_objs)
+gloss_objs += $(gloss_c_objs)
 deps += $(gloss_c_deps)
 junk += $(gloss_c_deps) $(gloss_c_objs)
 
@@ -132,7 +135,7 @@ gloss_asm_deps = $(patsubst %.S, %.d, $(notdir $(gloss_asm_srcs)))
 $(gloss_asm_objs) : %.o : %.S
 	$(COMPILE) -c $<
 
-objs += $(gloss_asm_objs)
+gloss_objs += $(gloss_asm_objs)
 deps += $(gloss_asm_deps)
 junk += $(gloss_asm_deps) $(gloss_asm_objs)
 
@@ -141,14 +144,37 @@ junk += $(gloss_asm_deps) $(gloss_asm_objs)
 #-------------------------------------------------------------------------
 
 gloss_lib  = libgloss.a
-$(gloss_lib) : $(objs)
+$(gloss_lib) : $(gloss_objs)
 	$(AR) rcv $@ $^
 	$(RANLIB) $@
 
-junk += $(gloss_libs)
+junk += $(gloss_lib)
 
 install_hdrs += $(gloss_hdrs)
 install_libs += $(gloss_lib)
+install_specs += $(gloss_specs)
+
+#-------------------------------------------------------------------------
+# Build libsim.a
+#-------------------------------------------------------------------------
+
+sbrk.o: $(src_dir)/../sbrk.c
+	$(COMPILE) -c $<
+sim-syscalls.o: syscalls.c
+	$(COMPILE) -c -DUSING_SIM_SPECS -o $@ $<
+
+sim_c_objs = sbrk.o sim-syscalls.o
+sim_c_deps = $(patsubst %.o, %.d, $(notdir $(sim_c_objs)))
+
+sim_lib  = libsim.a
+$(sim_lib) : $(sim_c_objs)
+	$(AR) rcv $@ $^
+	$(RANLIB) $@
+
+deps += $(sim_c_deps)
+junk += $(sim_lib) $(sim_c_objs) $(sim_c_deps)
+
+install_libs += $(sim_lib)
 
 #-------------------------------------------------------------------------
 # Build crt0.o
@@ -191,7 +217,13 @@ install-libs : $(install_libs)
 		$(INSTALL_DATA) $$file $(install_libs_dir)/$$file; \
 	done
 
-install : install-hdrs install-libs 
+install-specs : $(install_specs)
+	test -d $(install_libs_dir) || mkdir -p $(install_libs_dir)
+	for file in $^; do \
+		$(INSTALL_DATA) $$file $(install_libs_dir)/; \
+	done
+
+install : install-hdrs install-libs install-specs
 .PHONY : install install-hdrs install-libs
 
 #-------------------------------------------------------------------------
diff --git a/libgloss/riscv/nano.specs b/libgloss/riscv/nano.specs
new file mode 100644
index 0000000..89fd231
--- /dev/null
+++ b/libgloss/riscv/nano.specs
@@ -0,0 +1,23 @@
+%rename link                nano_link
+%rename link_gcc_c_sequence                nano_link_gcc_c_sequence
+%rename cpp		nano_cpp
+
+*cpp:
+-isystem =/include/newlib-nano %(nano_cpp)
+
+*nano_libc:
+-lc_nano
+
+*nano_libgloss:
+%{specs=nosys.specs:-lnosys} %{!specs=nosys.specs:-lgloss_nano}
+
+*link_gcc_c_sequence:
+%(nano_link_gcc_c_sequence) --start-group %G %(nano_libc) %(nano_libgloss) --end-group
+
+*link:
+%(nano_link) %:replace-outfile(-lc -lc_nano) %:replace-outfile(-lg -lg_nano)
+
+*lib:
+%{!shared:%{g*:-lg_nano} %{!p:%{!pg:-lc_nano}}%{p:-lc_p}%{pg:-lc_p}}
+
+# ??? Maybe put --gc-sections option in here?
diff --git a/libgloss/riscv/sim.specs b/libgloss/riscv/sim.specs
new file mode 100644
index 0000000..fe1f149
--- /dev/null
+++ b/libgloss/riscv/sim.specs
@@ -0,0 +1,8 @@
+%rename lib	sim_lib
+%rename link	sim_link
+
+*lib:
+--start-group -lc -lsim --end-group
+
+*link:
+%(sim_link) %:replace-outfile(-lgloss -lsim)
-- 
2.7.4


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]