#------------------------------------------------------------------------- # Source files #------------------------------------------------------------------------- gloss_hdrs = \ machine/syscall.h \ gloss_srcs = \ nanosleep.c \ sys_access.c \ sys_chdir.c \ sys_chmod.c \ sys_chown.c \ sys_close.c \ sys_conv_stat.c \ sys_execve.c \ sys_exit.c \ sys_faccessat.c \ sys_fork.c \ sys_fstatat.c \ sys_fstat.c \ sys_ftime.c \ sys_getcwd.c \ sys_getpid.c \ sys_gettimeofday.c \ sys_isatty.c \ sys_kill.c \ sys_link.c \ sys_lseek.c \ sys_lstat.c \ sys_openat.c \ sys_open.c \ sys_read.c \ sys_sbrk.c \ sys_stat.c \ sys_sysconf.c \ sys_times.c \ sys_unlink.c \ sys_utime.c \ sys_wait.c \ sys_write.c # libsemihost reuses some of the libgloss minimal implementations semihost_srcs = \ nanosleep.c \ sys_chdir.c \ sys_chmod.c \ sys_chown.c \ sys_execve.c \ sys_fork.c \ sys_getcwd.c \ sys_getpid.c \ sys_kill.c \ sys_utime.c \ sys_wait.c \ semihost-sys_close.c \ semihost-sys_exit.c \ semihost-sys_fdtable.c \ semihost-sys_fstat.c \ semihost-sys_ftime.c \ semihost-sys_isatty.c \ semihost-sys_link.c \ semihost-sys_lseek.c \ semihost-sys_open.c \ semihost-sys_read.c \ semihost-sys_sbrk.c \ semihost-sys_stat.c \ semihost-sys_stat_common.c \ semihost-sys_unlink.c \ semihost-sys_write.c gloss_specs = \ nano.specs sim.specs semihost.specs # Extra files crt0_asm = crt0.S # Multilib support variables. # TOP is used instead of MULTI{BUILD,SRC}TOP. MULTIDIRS = MULTISUBDIR = MULTIDO = true MULTICLEAN = true #------------------------------------------------------------------------- # Basic setup #------------------------------------------------------------------------- # Remove all default implicit rules since they can cause subtle bugs # and they just make things run slower .SUFFIXES: % : %,v % : RCS/%,v % : RCS/% % : s.% % : SCCS/s.% # Default is to build the prereqs of the all target (defined at bottom) default : all .PHONY : default # Source directory obj_dir := . src_dir := /home/seti/riscv-gnu-toolchain/newlib/libgloss/riscv VPATH := $(src_dir) $(src_dir)/machine # Installation directories prefix := /home/seti/riscv-gnu-toolchain/install-newlib-nano DESTDIR ?= $(prefix) install_hdrs_dir := $(DESTDIR)$(prefix)/$(target_alias)/include/machine install_libs_dir = $(DESTDIR)$(prefix)/$(target_alias)/lib${MULTISUBDIR} #------------------------------------------------------------------------- # Programs and flags #------------------------------------------------------------------------- # C compiler CC := riscv32-unknown-elf-gcc -B/home/seti/riscv-gnu-toolchain/build-newlib-nano/riscv32-unknown-elf/newlib/ -isystem /home/seti/riscv-gnu-toolchain/build-newlib-nano/riscv32-unknown-elf/newlib/targ-include -isystem /home/seti/riscv-gnu-toolchain/newlib/newlib/libc/include -B/home/seti/riscv-gnu-toolchain/build-newlib-nano/riscv32-unknown-elf/libgloss/riscv32 -L/home/seti/riscv-gnu-toolchain/build-newlib-nano/riscv32-unknown-elf/libgloss/libnosys -L/home/seti/riscv-gnu-toolchain/newlib/libgloss/riscv32 CFLAGS := @CFLAGS@ CPPFLAGS := -I$(obj_dir) -I$(src_dir) COMPILE := $(CC) -MMD -MP $(CPPFLAGS) $(CFLAGS) # Library creation AR := riscv32-unknown-elf-ar RANLIB := riscv32-unknown-elf-ranlib # Installation INSTALL := /usr/bin/install -c INSTALL_DATA := /usr/bin/install -c -m 644 #------------------------------------------------------------------------- # Build Object Files from C Source #------------------------------------------------------------------------- gloss_c_srcs = $(filter %.c, $(gloss_srcs)) gloss_c_objs = $(patsubst %.c, %.o, $(notdir $(gloss_c_srcs))) gloss_c_deps = $(patsubst %.c, %.d, $(notdir $(gloss_c_srcs))) $(gloss_c_objs) : %.o : %.c $(COMPILE) -c $< gloss_objs += $(gloss_c_objs) deps += $(gloss_c_deps) junk += $(gloss_c_deps) $(gloss_c_objs) sim_c_objs = $(patsubst %.c, sim-%.o, $(notdir $(gloss_c_srcs))) sim_c_deps = $(patsubst %.c, sim-%.d, $(notdir $(gloss_c_srcs))) $(sim_c_objs): sim-%.o : %.c $(COMPILE) -c -DUSING_SIM_SPECS -o $@ $< sim_objs += $(sim_c_objs) deps += $(sim_c_deps) junk += $(sim_c_deps) $(sim_c_objs) semihost_c_srcs = $(filter %.c, $(semihost_srcs)) semihost_c_objs = $(patsubst %.c, semihost-%.o, $(notdir $(semihost_c_srcs))) semihost_c_deps = $(patsubst %.c, semihost-%.d, $(notdir $(semihost_c_srcs))) $(semihost_c_objs): semihost-%.o : %.c $(COMPILE) -c -o $@ $< semihost_objs += $(semihost_c_objs) deps += $(semihost_c_deps) junk += $(semihost_c_deps) $(semihost_c_objs) #------------------------------------------------------------------------- # Build Object Files from Assembly Source #------------------------------------------------------------------------- gloss_asm_srcs = $(filter %.S, $(gloss_srcs)) gloss_asm_objs = $(patsubst %.S, %.o, $(notdir $(gloss_asm_srcs))) gloss_asm_deps = $(patsubst %.S, %.d, $(notdir $(gloss_asm_srcs))) $(gloss_asm_objs) : %.o : %.S $(COMPILE) -c -o $@ $< gloss_objs += $(gloss_asm_objs) deps += $(gloss_asm_deps) junk += $(gloss_asm_deps) $(gloss_asm_objs) sim_asm_objs = $(patsubst %.S, sim-%.o, $(notdir $(gloss_asm_srcs))) sim_asm_deps = $(patsubst %.S, sim-%.d, $(notdir $(gloss_asm_srcs))) $(sim_asm_objs) : sim-%.o : %.S $(COMPILE) -c -DUSING_SIM_SPECS -o $@ $< sim_objs += $(sim_asm_objs) deps += $(sim_asm_deps) junk += $(sim_asm_deps) $(sim_asm_objs) semihost_asm_objs = $(patsubst %.S, semihost-%.o, $(notdir $(gloss_asm_srcs))) semihost_asm_deps = $(patsubst %.S, semihost-%.d, $(notdir $(gloss_asm_srcs))) $(semihost_asm_objs) : semihost-%.o : %.S $(COMPILE) -c -DUSING_SEMIHOST_SPECS -o $@ $< semihost_objs += $(semihost_asm_objs) deps += $(semihost_asm_deps) junk += $(semihost_asm_deps) $(semihost_asm_objs) #------------------------------------------------------------------------- # Build libgloss.a #------------------------------------------------------------------------- gloss_lib = libgloss.a $(gloss_lib) : $(gloss_objs) $(AR) rcv $@ $^ $(RANLIB) $@ junk += $(gloss_lib) install_hdrs += $(gloss_hdrs) install_libs += $(gloss_lib) install_specs += $(gloss_specs) #------------------------------------------------------------------------- # Build libsim.a #------------------------------------------------------------------------- sim_lib = libsim.a $(sim_lib) : $(sim_objs) $(AR) rcv $@ $^ $(RANLIB) $@ junk += $(sim_lib) install_libs += $(sim_lib) #------------------------------------------------------------------------- # Build libsemihost.a #------------------------------------------------------------------------- semihost_lib = libsemihost.a $(semihost_lib) : $(semihost_objs) $(AR) rcv $@ $^ $(RANLIB) $@ junk += $(semihost_lib) install_libs += $(semihost_lib) #------------------------------------------------------------------------- # Build crt0.o #------------------------------------------------------------------------- crt0_obj = $(patsubst %.S, %.o, $(crt0_asm)) crt0_deps = $(patsubst %.S, %.d, $(crt0_asm)) $(crt0_obj) : %.o : %.S $(COMPILE) -c $< deps += $(crt0_deps) junk += $(crt0_deps) $(crt0_obj) install_libs += $(crt0_obj) #------------------------------------------------------------------------- # Autodependency files #------------------------------------------------------------------------- -include $(deps) deps : $(deps) .PHONY : deps #------------------------------------------------------------------------- # Installation #------------------------------------------------------------------------- install_hdrs_wdir += $(addprefix $(src_dir)/, $(install_hdrs)) install-hdrs : $(install_hdrs_wdir) test -d $(install_hdrs_dir) || mkdir -p $(install_hdrs_dir) for file in $^; do \ $(INSTALL_DATA) $$file $(install_hdrs_dir)/; \ done install-libs : $(install_libs) test -d $(install_libs_dir) || mkdir -p $(install_libs_dir) for file in $^; do \ $(INSTALL_DATA) $$file $(install_libs_dir)/$$file; \ done 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 #------------------------------------------------------------------------- # Regenerate configure information #------------------------------------------------------------------------- configure_prereq = \ $(src_dir)/configure.in \ $(src_dir)/configure : $(configure_prereq) cd $(src_dir) && autoconf config.status : $(src_dir)/configure ./config.status --recheck Makefile : $(src_dir)/Makefile.in config.status ./config.status dist_junk += config.status Makefile config.log #------------------------------------------------------------------------- # Default #------------------------------------------------------------------------- all : $(install_libs) .PHONY : all #------------------------------------------------------------------------- # Clean up junk #------------------------------------------------------------------------- clean : rm -rf *~ \#* $(junk) distclean : rm -rf *~ \#* $(junk) $(dist_junk) .PHONY : clean distclean