340 lines
8.4 KiB
Makefile
340 lines
8.4 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
|
|
|
|
# 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 := @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)
|
|
|
|
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
|