New build system for objects. Support profiling and -jN.

This commit is contained in:
Don Stewart 2005-04-28 11:27:38 +00:00
parent e2917a8184
commit f7d579641b
9 changed files with 87 additions and 32 deletions

View File

@ -3,18 +3,15 @@
# cut down reimplementation of $fptools/mk directory # cut down reimplementation of $fptools/mk directory
MAKEFLAGS += --no-builtin-rules
.SUFFIXES:
.PHONY: build all .PHONY: build all
all: build headers all: build EvalHaskell.h
build: build::
cd src && $(MAKE) cd src && $(MAKE)
headers: build EvalHaskell.h: build
cp src/eval/Eval/Haskell_stub.h EvalHaskell.h cp src/eval/Eval/Haskell_stub.h $@
# #
# installing # installing
@ -25,6 +22,7 @@ install:
$(INSTALL_DATA_DIR) $(LIBDIR)/include $(INSTALL_DATA_DIR) $(LIBDIR)/include
$(INSTALL_DATA) EvalHaskell.h $(LIBDIR)/include $(INSTALL_DATA) EvalHaskell.h $(LIBDIR)/include
@(cd src && $(MAKE) install) @(cd src && $(MAKE) install)
$(INSTALL_DATA_DIR) $(PREFIX)/bin
# #
# and register the library with ghc package system # and register the library with ghc package system

View File

@ -36,7 +36,7 @@ GHC_LD_OPTS =
GHC_PKG = @GHCPKG@-@GHC_VERSION@ GHC_PKG = @GHCPKG@-@GHC_VERSION@
LD = @LD@ LD = @LD@
LD_X = -x LD_X = @LD@ -x
HAPPY = @HAPPY@ HAPPY = @HAPPY@
HAPPY_OPTS = -a -g -c HAPPY_OPTS = -a -g -c

View File

@ -11,11 +11,11 @@ altdata:
@cd altdata && $(MAKE) @cd altdata && $(MAKE)
hi: hi:
@cd hi && $(MAKE) @cd hi && $(MAKE)
plugins: plugins: altdata hi
@cd plugins && $(MAKE) @cd plugins && $(MAKE)
eval: eval: plugins
@cd eval && $(MAKE) @cd eval && $(MAKE)
printf: printf: plugins
@cd printf && $(MAKE) @cd printf && $(MAKE)
install: i_altdata i_hi i_plugins i_eval i_printf install: i_altdata i_hi i_plugins i_eval i_printf

View File

@ -1,7 +1,11 @@
PKG = altdata PKG = altdata
UPKG = AltData UPKG = AltData
ALL_SRCS=$(wildcard $(patsubst ./%, %, $(patsubst %, %/*.hs, . $(UPKG))))
TOP=../.. TOP=../..
include ../build.mk include ../build.mk
install: install-me install: install-me
-include depend

View File

@ -3,32 +3,69 @@
# LGPL version 2.1 or later (see http://www.gnu.org/copyleft/lesser.html) # LGPL version 2.1 or later (see http://www.gnu.org/copyleft/lesser.html)
# #
MAKEFLAGS += --no-builtin-rules
.SUFFIXES:
include $(TOP)/config.mk include $(TOP)/config.mk
# If $(way) is set then we define $(way_) and $(_way) from it in the
# obvious fashion.
ifeq "$(way)" "p"
way_ := $(way)_
_way := _$(way)
endif
#
# building the profiled way
#
ifeq "$(way)" "p"
PROF_OPTS = -prof -auto-all -Icbits
LD_OPTS += $(PROF_OPTS)
HC_OPTS += $(PROF_OPTS)
HC_OPTS += -hisuf $(way_)hi -hcsuf $(way_)hc -osuf $(way_)o
endif
MAIN = $(UPKG).hs MAIN = $(UPKG).hs
LIBRARY = libHS$(PKG).a LIBRARY = libHS$(PKG)$(_way).a
GHCI_LIBRARY = HS$(PKG).o GHCI_LIBRARY = $(patsubst lib%.a,%.o,$(LIBRARY))
OBJS = $(UPKG).o $(UPKG)/*.o OBJS = $(UPKG).o $(UPKG)/*.o
HC_OPTS = -package-name $(PKG) HC_OPTS += -package-name $(PKG)
HC_OPTS += -O -Wall -Werror -fno-warn-missing-signatures $(GHC_EXTRA_OPTS) HC_OPTS += -O -Wall -Werror -fno-warn-missing-signatures $(GHC_EXTRA_OPTS)
HC_OPTS += -threaded HC_OPTS += -threaded
CLEANS += $(LIBRARY) $(GHCI_LIBRARY) CLEANS += $(LIBRARY) $(GHCI_LIBRARY)
CLEAN_FILES += *.conf.inplace* *.conf.*.old *.conf.in *.h *.in CLEAN_FILES += *.conf.inplace* *.conf.*.old *.conf.in *.h *.in
.PHONY: clean all alt_objs inplace-pkg-conf happy banner OBJS= $(addsuffix .$(way_)o,$(basename $(ALL_SRCS)))
all : $(LIBRARY) inplace-pkg-conf $(PKG).conf.in .PHONY: clean all alt_objs plugins.conf.inplace happy banner
all : $(LIBRARY) $(TOP)/plugins.conf.inplace $(PKG).conf.in
# libraries # libraries
$(LIBRARY): banner $(COBJ) $(XOBJ) $(YOBJ) objs $(LIBRARY): depend $(COBJ) $(XOBJ) $(YOBJ) $(OBJS)
@$(RM) -f $@ @$(RM) -f $@
@$(AR) cq $@ $(OBJS) @$(AR) cq $@ $(OBJS) $(COBJ) $(STUBOBJS)
@$(RANLIB) $@ @$(RANLIB) $@
banner: $(GHCI_LIBRARY) : $(OBJS)
@echo "=========== building $(PKG) =============" $(LD_X) -r -o $@ $(OBJS) $(COBJ) $(STUBOBJS)
#
# Dependency generation
#
depend: $(ALL_SRCS)
@echo -n "Rebuilding dependencies ... "
@$(GHC) -cpp $(HC_OPTS) $(PKG_OPTS) $(HTOOLKIT) -M -optdep-f \
-optdepdepend $(ALL_SRCS) || rm depend
@echo "done."
%.$(way_)hi : %.$(way_)o
@:
%.$(way_)o: %.hs
$(GHC) $(HC_OPTS) -c $< -o $@ -ohi $(basename $@).$(way_)hi
# happy files # happy files
$(YOBJ): $(YSRC) $(YOBJ): $(YSRC)
@ -38,21 +75,16 @@ $(YOBJ): $(YSRC)
$(XOBJ): $(XSRC) $(XOBJ): $(XSRC)
$(ALEX) $(ALEX_OPTS) -o $@ $(XSRC) $(ALEX) $(ALEX_OPTS) -o $@ $(XSRC)
# objects
objs::
$(GHC) $(HC_OPTS) --make -no-hs-main -no-link $(MAIN)
$(COBJ): $(CSRC) $(COBJ): $(CSRC)
$(GHC) -c $(CSRC) -o $@ $(GHC) -c $(CSRC) -o $@
# package.confs and friends # package.confs and friends
# ghc-6.2.2 needs TOP as env var. # ghc-6.2.2 needs TOP as env var.
inplace-pkg-conf: $(LIBRARY) $(TOP)/plugins.conf.inplace: $(PKG).conf.in.cpp $(LIBRARY) $(GHCI_LIBRARY)
@rm -f $(GHCI_LIBRARY)
@cpp -DTOP=$(TOP) -DGLASGOW_HASKELL=$(GLASGOW_HASKELL) -DCABAL=$(CABAL) -undef < $(PKG).conf.in.cpp | sed -e 's/""//g' -e 's/\[ *,/[ /g' -e '/^#/d' > $(PKG).conf.inplace.in @cpp -DTOP=$(TOP) -DGLASGOW_HASKELL=$(GLASGOW_HASKELL) -DCABAL=$(CABAL) -undef < $(PKG).conf.in.cpp | sed -e 's/""//g' -e 's/\[ *,/[ /g' -e '/^#/d' > $(PKG).conf.inplace.in
@(cd $(TOP) ;\ @(cd $(TOP) ;\
if [ ! -f plugins.conf.inplace ]; then echo [] > plugins.conf.inplace; fi;\ if [ ! -f $(TOP)/plugins.conf.inplace ]; then echo [] > $(TOP)/plugins.conf.inplace; fi;\
env TOP=$(TOP) $(GHC_PKG) -g -f plugins.conf.inplace -u < src/$(PKG)/$(PKG).conf.inplace.in) env TOP=$(TOP) $(GHC_PKG) --force -f $@ -u < src/$(PKG)/$(PKG).conf.inplace.in)
# installation pkg.confs # installation pkg.confs
$(PKG).conf.in : $(PKG).conf.in.cpp $(PKG).conf.in : $(PKG).conf.in.cpp
@ -64,15 +96,15 @@ $(PKG).conf.in : $(PKG).conf.in.cpp
.PHONY: install install-me .PHONY: install install-me
install-me: install-me:
$(INSTALL_DATA_DIR) $(LIBDIR)/imports/$(UPKG) $(INSTALL_DATA_DIR) $(LIBDIR)/imports/$(UPKG)
@for i in $(TOP)/src/$(PKG)/*.hi ; do \ @for i in $(TOP)/src/$(PKG)/*.$(way_)hi ; do \
echo $(INSTALL_DATA) $$i $(LIBDIR)/imports/ ; \ echo $(INSTALL_DATA) $$i $(LIBDIR)/imports/ ; \
$(INSTALL_DATA) $$i $(LIBDIR)/imports/ ; \ $(INSTALL_DATA) $$i $(LIBDIR)/imports/ ; \
done done
@for i in $(TOP)/src/$(PKG)/$(UPKG)/*.hi ; do \ @for i in $(TOP)/src/$(PKG)/$(UPKG)/*.$(way_)hi ; do \
echo $(INSTALL_DATA) $$i $(LIBDIR)/imports/$(UPKG)/ ; \ echo $(INSTALL_DATA) $$i $(LIBDIR)/imports/$(UPKG)/ ; \
$(INSTALL_DATA) $$i $(LIBDIR)/imports/$(UPKG)/ ; \ $(INSTALL_DATA) $$i $(LIBDIR)/imports/$(UPKG)/ ; \
done done
$(INSTALL_DATA) $(TOP)/src/$(PKG)/libHS$(PKG).a $(LIBDIR) $(INSTALL_DATA) $(TOP)/src/$(PKG)/libHS$(PKG)$(_way).a $(LIBDIR)
$(RANLIB) $(LIBDIR)/libHS$(PKG).a $(RANLIB) $(LIBDIR)/libHS$(PKG).a
$(INSTALL_DATA) $(TOP)/src/$(PKG)/HS$(PKG).o $(LIBDIR) $(INSTALL_DATA) $(TOP)/src/$(PKG)/HS$(PKG).o $(LIBDIR)
$(INSTALL_DATA) $(TOP)/src/$(PKG)/$(PKG).conf.in $(LIBDIR) $(INSTALL_DATA) $(TOP)/src/$(PKG)/$(PKG).conf.in $(LIBDIR)
@ -80,11 +112,14 @@ install-me:
clean: clean:
rm -f $(CLEAN_FILES) rm -f $(CLEAN_FILES)
find . -name '*.a' -exec rm {} \; find . -name '*.a' -exec rm {} \;
find . -name depend -exec rm {} \;
find . -name '*.in' -exec rm {} \; find . -name '*.in' -exec rm {} \;
find . -name '*~' -exec rm {} \; find . -name '*~' -exec rm {} \;
find . -name 'a.out' -exec rm {} \; find . -name 'a.out' -exec rm {} \;
find . -name '*.hi' -exec rm {} \; find . -name '*.hi' -exec rm {} \;
find . -name '*.p_hi' -exec rm {} \;
find . -name '*.o' -exec rm {} \; find . -name '*.o' -exec rm {} \;
find . -name '*.p_o' -exec rm {} \;
find . -name '*.old' -exec rm {} \; find . -name '*.old' -exec rm {} \;
find . -name '*.core' -exec rm {} \; find . -name '*.core' -exec rm {} \;
find . -name '*_stub.c' -exec rm {} \; find . -name '*_stub.c' -exec rm {} \;

View File

@ -1,6 +1,10 @@
PKG = eval PKG = eval
UPKG = Eval UPKG = Eval
ALL_SRCS=$(wildcard $(patsubst ./%, %, $(patsubst %, %/*.hs, . $(UPKG))))
STUBOBJS =Eval/Haskell_stub.o
TOP=../.. TOP=../..
include ../build.mk include ../build.mk
@ -10,3 +14,5 @@ HC_OPTS += -package plugins
GHC6_3_HC_OPTS += -package template-haskell GHC6_3_HC_OPTS += -package template-haskell
install: install-me install: install-me
-include depend

View File

@ -4,9 +4,13 @@ UPKG = Hi
CSRC = $(UPKG)/hschooks.c CSRC = $(UPKG)/hschooks.c
COBJ = $(UPKG)/hschooks.o COBJ = $(UPKG)/hschooks.o
ALL_SRCS=$(wildcard $(patsubst ./%, %, $(patsubst %, %/*.hs, . $(UPKG))))
TOP=../.. TOP=../..
include ../build.mk include ../build.mk
HC_OPTS += -I$(UPKG) HC_OPTS += -I$(UPKG)
install: install-me install: install-me
-include depend

View File

@ -12,6 +12,8 @@ YOBJ = $(UPKG)/ParsePkgConfLite.hs
YSRC = $(UPKG)/ParsePkgConfLite.y YSRC = $(UPKG)/ParsePkgConfLite.y
endif endif
ALL_SRCS=$(wildcard $(patsubst ./%, %, $(patsubst %, %/*.hs, . $(UPKG))))
include ../build.mk include ../build.mk
HC_OPTS += -package-conf $(TOP)/plugins.conf.inplace HC_OPTS += -package-conf $(TOP)/plugins.conf.inplace
@ -24,3 +26,5 @@ HC_OPTS += -package posix
endif endif
install: install-me install: install-me
-include depend

View File

@ -7,6 +7,8 @@ YSRC = $(UPKG)/Parser.y
XOBJ = $(UPKG)/Lexer.hs XOBJ = $(UPKG)/Lexer.hs
XSRC = $(UPKG)/Lexer.x XSRC = $(UPKG)/Lexer.x
ALL_SRCS=$(wildcard $(patsubst ./%, %, $(patsubst %, %/*.hs, . $(UPKG))))
TOP=../.. TOP=../..
include ../build.mk include ../build.mk
@ -14,3 +16,5 @@ HC_OPTS += -package-conf $(TOP)/plugins.conf.inplace
HC_OPTS += -package eval HC_OPTS += -package eval
install: install-me install: install-me
-include depend