| #------------------------------------------------------------------------- |
| # Source files |
| #------------------------------------------------------------------------- |
| |
| gloss_hdrs = \ |
| machine/syscall.h \ |
| |
| gloss_srcs = \ |
| syscalls.c \ |
| |
| # 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 $< |
| |
| objs += $(gloss_c_objs) |
| deps += $(gloss_c_deps) |
| junk += $(gloss_c_deps) $(gloss_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 $< |
| |
| objs += $(gloss_asm_objs) |
| deps += $(gloss_asm_deps) |
| junk += $(gloss_asm_deps) $(gloss_asm_objs) |
| |
| #------------------------------------------------------------------------- |
| # Build libgloss.a |
| #------------------------------------------------------------------------- |
| |
| gloss_lib = libgloss.a |
| $(gloss_lib) : $(objs) |
| $(AR) rcv $@ $^ |
| $(RANLIB) $@ |
| |
| junk += $(gloss_libs) |
| |
| install_hdrs += $(gloss_hdrs) |
| install_libs += $(gloss_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 : install-hdrs install-libs |
| .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 |