X-Git-Url: http://repo.macrolet.net/gitweb/?a=blobdiff_plain;f=src%2Fruntime%2FGNUmakefile;h=a426e2fff67f7076b5f6a1fd9251ef13aaeb7985;hb=d4d6c4b16a3655ce99a87d43f411391363531260;hp=5f44e706816dbeda59f7860e755cdf4a32edd9e2;hpb=fdf07da187cb31fd5bdd872c73245fd72877b1a1;p=sbcl.git diff --git a/src/runtime/GNUmakefile b/src/runtime/GNUmakefile index 5f44e70..a426e2f 100644 --- a/src/runtime/GNUmakefile +++ b/src/runtime/GNUmakefile @@ -1,4 +1,4 @@ -# makefile for the C-level run-time support for SBCL +# -*- makefile -*- for the C-level run-time support for SBCL # This software is part of the SBCL system. See the README file for # more information. @@ -9,53 +9,81 @@ # provided with absolutely no warranty. See the COPYING and CREDITS # files for more information. -all: sbcl sbcl.nm -.PHONY: all +.PHONY: all clean TAGS tags -# defaults which might be overridden or modified by values in the -# Config file -# -# -CFLAGS = -g -Wall -O3 -ASFLAGS = $(CFLAGS) -DEPEND_FLAGS = -CPPFLAGS = -I. +all: sbcl sbcl.nm -# Some of these things might be Config-dependent in future versions, -# but they're the same on most systems right now. If you need to -# override one of these, do it in Config -CPP = cpp +# Defaults which might be overridden or modified by values in the +# Config file. Most of them are same on most systems right now. +# If you need to override one of these, do it in Config. LD = ld LINKFLAGS = -g NM = nm -gp +DEPEND_FLAGS = -MM +GREP = grep + +CFLAGS = -g -Wall -O3 +ASFLAGS = $(CFLAGS) +CPPFLAGS = -I. # The Config file is the preferred place for tweaking options which -# are appropriate for particular setups (OS, CPU, whatever). Make a +# are appropriate for particular setups (OS, ARCH, whatever). Make a # Config-foo file for setup foo, then arrange for Config to be a # symlink to Config-foo. +# Commonly used variables in Config are: ARCH_SRC, ASSEM_SRC, GC_SRC, +# OS_SRC, OS_LIBS, OS_OBJS, OS_CLEAN_FILES include Config -SRCS = alloc.c backtrace.c breakpoint.c coreparse.c \ - dynbind.c globals.c interr.c interrupt.c \ - monitor.c parse.c print.c purify.c \ +COMMON_SRC = alloc.c backtrace.c breakpoint.c coreparse.c \ + dynbind.c gc-common.c globals.c interr.c interrupt.c \ + monitor.c os-common.c parse.c print.c purify.c \ regnames.c run-program.c runtime.c save.c search.c \ - time.c util.c validate.c vars.c wrap.c \ - ${ARCH_SRC} ${ASSEM_SRC} ${OS_SRC} ${GC_SRC} + thread.c time.c util.c validate.c vars.c wrap.c -OBJS = $(patsubst %.c,%.o,$(patsubst %.S,%.o,$(patsubst %.s,%.o,$(SRCS)))) +C_SRC = $(COMMON_SRC) ${ARCH_SRC} ${OS_SRC} ${GC_SRC} + +SRCS = $(C_SRC) ${ASSEM_SRC} + +OBJS = $(C_SRC:.c=.o) $(ASSEM_SRC:.S=.o) ${OS_OBJS} + +LIBS = ${OS_LIBS} -lm + +sbcl: $(OBJS) + $(CC) ${LINKFLAGS} -o $@ $^ $(LIBS) sbcl.nm: sbcl - $(NM) sbcl | grep -v " F \| U " > ,$@ + $(NM) sbcl | $(GREP) -v " F \| U " > ,$@ mv -f ,$@ $@ -sbcl: ${OBJS} - $(CC) ${LINKFLAGS} ${OS_LINK_FLAGS} -o $@ ${OBJS} ${OS_LIBS} -lm +sbcl.h: $(wildcard genesis/*.h) + echo '#include "genesis/config.h"' >sbcl.h + echo '#include "genesis/constants.h"' >>sbcl.h + +TAGS tags: $(SRCS) + etags $(SRCS) -.PHONY: clean all clean: - rm -f depend *.o sbcl sbcl.nm core *.tmp ; true + -rm -f *.[do] sbcl sbcl.nm sbcl.h core *.tmp $(OS_CLEAN_FILES) + # the depend file is obsolete + -rm -f depend + +# depend target for backward compatibility +.PHONY: depend +depend: + +%.d: %.c sbcl.h + @$(CC) $(DEPEND_FLAGS) $(CPPFLAGS) $< > $@.tmp; \ + sed 's,\($*\)\.o[ :]*,\1.o $@ : ,g' < $@.tmp > $@; \ + rm -f $@.tmp + +%.d: %.S sbcl.h + @$(CC) $(DEPEND_FLAGS) $(CPPFLAGS) $< > $@.tmp; \ + sed 's,\($*\)\.o[ :]*,\1.o $@ : ,g' < $@.tmp > $@; \ + rm -f $@.tmp -depend: ${SRCS} sbcl.h - $(CC) -MM -E ${DEPEND_FLAGS} ${CFLAGS} ${CPPFLAGS} $? > depend.tmp - mv -f depend.tmp depend +# By including those files, we cause GNU make to automatically re-make +# all dependencies of the .c file if necessary. +ifneq ($(MAKECMDGOALS),clean) +-include $(C_SRC:.c=.d) $(ASSEM_SRC:.S=.d) +endif