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