This is the mail archive of the
newlib@sourceware.org
mailing list for the newlib project.
[PATCH 5/6] RISC-V: Add gdb sim and newlib nano support. Fix a few misc minor bugs.
- From: Kito Cheng <kito dot cheng at gmail dot com>
- To: Newlib <newlib at sourceware dot org>
- Cc: patches at groups dot riscv dot org, Jim Wilson <jimw at sifive dot com>
- Date: Sun, 17 Dec 2017 17:37:02 +0800
- Subject: [PATCH 5/6] RISC-V: Add gdb sim and newlib nano support. Fix a few misc minor bugs.
- Authentication-results: sourceware.org; auth=none
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