276 lines
		
	
	
		
			6.7 KiB
		
	
	
	
		
			Makefile
		
	
	
	
			
		
		
	
	
			276 lines
		
	
	
		
			6.7 KiB
		
	
	
	
		
			Makefile
		
	
	
	
#-------------------------------------------------------------------------
 | 
						|
# 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 
 | 
						|
 | 
						|
gloss_specs = \
 | 
						|
	nano.specs sim.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 := @srcdir@
 | 
						|
VPATH   := $(src_dir) $(src_dir)/machine
 | 
						|
 | 
						|
# Installation directories
 | 
						|
 | 
						|
prefix  := @prefix@
 | 
						|
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            := @CC@
 | 
						|
CFLAGS        := @CFLAGS@
 | 
						|
CPPFLAGS      := -I$(obj_dir) -I$(src_dir)
 | 
						|
COMPILE       := $(CC) -MMD -MP $(CPPFLAGS) $(CFLAGS)
 | 
						|
 | 
						|
# Library creation
 | 
						|
 | 
						|
AR            := @AR@
 | 
						|
RANLIB        := @RANLIB@
 | 
						|
 | 
						|
# Installation
 | 
						|
 | 
						|
INSTALL       := @INSTALL@
 | 
						|
INSTALL_DATA  := @INSTALL_DATA@
 | 
						|
 | 
						|
#-------------------------------------------------------------------------
 | 
						|
# 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)
 | 
						|
 | 
						|
#-------------------------------------------------------------------------
 | 
						|
# 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)
 | 
						|
 | 
						|
#-------------------------------------------------------------------------
 | 
						|
# 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 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
 |