New build system for objects. Support profiling and -jN.
This commit is contained in:
parent
e2917a8184
commit
f7d579641b
12
Makefile
12
Makefile
@ -3,18 +3,15 @@
|
||||
|
||||
# cut down reimplementation of $fptools/mk directory
|
||||
|
||||
MAKEFLAGS += --no-builtin-rules
|
||||
.SUFFIXES:
|
||||
|
||||
.PHONY: build all
|
||||
|
||||
all: build headers
|
||||
all: build EvalHaskell.h
|
||||
|
||||
build:
|
||||
build::
|
||||
cd src && $(MAKE)
|
||||
|
||||
headers: build
|
||||
cp src/eval/Eval/Haskell_stub.h EvalHaskell.h
|
||||
EvalHaskell.h: build
|
||||
cp src/eval/Eval/Haskell_stub.h $@
|
||||
|
||||
#
|
||||
# installing
|
||||
@ -25,6 +22,7 @@ install:
|
||||
$(INSTALL_DATA_DIR) $(LIBDIR)/include
|
||||
$(INSTALL_DATA) EvalHaskell.h $(LIBDIR)/include
|
||||
@(cd src && $(MAKE) install)
|
||||
$(INSTALL_DATA_DIR) $(PREFIX)/bin
|
||||
|
||||
#
|
||||
# and register the library with ghc package system
|
||||
|
@ -36,7 +36,7 @@ GHC_LD_OPTS =
|
||||
GHC_PKG = @GHCPKG@-@GHC_VERSION@
|
||||
|
||||
LD = @LD@
|
||||
LD_X = -x
|
||||
LD_X = @LD@ -x
|
||||
|
||||
HAPPY = @HAPPY@
|
||||
HAPPY_OPTS = -a -g -c
|
||||
|
@ -11,11 +11,11 @@ altdata:
|
||||
@cd altdata && $(MAKE)
|
||||
hi:
|
||||
@cd hi && $(MAKE)
|
||||
plugins:
|
||||
plugins: altdata hi
|
||||
@cd plugins && $(MAKE)
|
||||
eval:
|
||||
eval: plugins
|
||||
@cd eval && $(MAKE)
|
||||
printf:
|
||||
printf: plugins
|
||||
@cd printf && $(MAKE)
|
||||
|
||||
install: i_altdata i_hi i_plugins i_eval i_printf
|
||||
|
@ -1,7 +1,11 @@
|
||||
PKG = altdata
|
||||
UPKG = AltData
|
||||
|
||||
ALL_SRCS=$(wildcard $(patsubst ./%, %, $(patsubst %, %/*.hs, . $(UPKG))))
|
||||
|
||||
TOP=../..
|
||||
include ../build.mk
|
||||
|
||||
install: install-me
|
||||
|
||||
-include depend
|
||||
|
77
src/build.mk
77
src/build.mk
@ -3,32 +3,69 @@
|
||||
# LGPL version 2.1 or later (see http://www.gnu.org/copyleft/lesser.html)
|
||||
#
|
||||
|
||||
MAKEFLAGS += --no-builtin-rules
|
||||
.SUFFIXES:
|
||||
|
||||
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
|
||||
LIBRARY = libHS$(PKG).a
|
||||
GHCI_LIBRARY = HS$(PKG).o
|
||||
LIBRARY = libHS$(PKG)$(_way).a
|
||||
GHCI_LIBRARY = $(patsubst lib%.a,%.o,$(LIBRARY))
|
||||
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 += -threaded
|
||||
HC_OPTS += -threaded
|
||||
|
||||
CLEANS += $(LIBRARY) $(GHCI_LIBRARY)
|
||||
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
|
||||
$(LIBRARY): banner $(COBJ) $(XOBJ) $(YOBJ) objs
|
||||
$(LIBRARY): depend $(COBJ) $(XOBJ) $(YOBJ) $(OBJS)
|
||||
@$(RM) -f $@
|
||||
@$(AR) cq $@ $(OBJS)
|
||||
@$(AR) cq $@ $(OBJS) $(COBJ) $(STUBOBJS)
|
||||
@$(RANLIB) $@
|
||||
|
||||
banner:
|
||||
@echo "=========== building $(PKG) ============="
|
||||
$(GHCI_LIBRARY) : $(OBJS)
|
||||
$(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
|
||||
$(YOBJ): $(YSRC)
|
||||
@ -38,21 +75,16 @@ $(YOBJ): $(YSRC)
|
||||
$(XOBJ): $(XSRC)
|
||||
$(ALEX) $(ALEX_OPTS) -o $@ $(XSRC)
|
||||
|
||||
# objects
|
||||
objs::
|
||||
$(GHC) $(HC_OPTS) --make -no-hs-main -no-link $(MAIN)
|
||||
|
||||
$(COBJ): $(CSRC)
|
||||
$(GHC) -c $(CSRC) -o $@
|
||||
|
||||
# package.confs and friends
|
||||
# ghc-6.2.2 needs TOP as env var.
|
||||
inplace-pkg-conf: $(LIBRARY)
|
||||
@rm -f $(GHCI_LIBRARY)
|
||||
$(TOP)/plugins.conf.inplace: $(PKG).conf.in.cpp $(LIBRARY) $(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
|
||||
@(cd $(TOP) ;\
|
||||
if [ ! -f plugins.conf.inplace ]; then echo [] > plugins.conf.inplace; fi;\
|
||||
env TOP=$(TOP) $(GHC_PKG) -g -f plugins.conf.inplace -u < src/$(PKG)/$(PKG).conf.inplace.in)
|
||||
if [ ! -f $(TOP)/plugins.conf.inplace ]; then echo [] > $(TOP)/plugins.conf.inplace; fi;\
|
||||
env TOP=$(TOP) $(GHC_PKG) --force -f $@ -u < src/$(PKG)/$(PKG).conf.inplace.in)
|
||||
|
||||
# installation pkg.confs
|
||||
$(PKG).conf.in : $(PKG).conf.in.cpp
|
||||
@ -64,15 +96,15 @@ $(PKG).conf.in : $(PKG).conf.in.cpp
|
||||
.PHONY: install install-me
|
||||
install-me:
|
||||
$(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/ ; \
|
||||
$(INSTALL_DATA) $$i $(LIBDIR)/imports/ ; \
|
||||
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)/ ; \
|
||||
$(INSTALL_DATA) $$i $(LIBDIR)/imports/$(UPKG)/ ; \
|
||||
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
|
||||
$(INSTALL_DATA) $(TOP)/src/$(PKG)/HS$(PKG).o $(LIBDIR)
|
||||
$(INSTALL_DATA) $(TOP)/src/$(PKG)/$(PKG).conf.in $(LIBDIR)
|
||||
@ -80,11 +112,14 @@ install-me:
|
||||
clean:
|
||||
rm -f $(CLEAN_FILES)
|
||||
find . -name '*.a' -exec rm {} \;
|
||||
find . -name depend -exec rm {} \;
|
||||
find . -name '*.in' -exec rm {} \;
|
||||
find . -name '*~' -exec rm {} \;
|
||||
find . -name 'a.out' -exec rm {} \;
|
||||
find . -name '*.hi' -exec rm {} \;
|
||||
find . -name '*.p_hi' -exec rm {} \;
|
||||
find . -name '*.o' -exec rm {} \;
|
||||
find . -name '*.p_o' -exec rm {} \;
|
||||
find . -name '*.old' -exec rm {} \;
|
||||
find . -name '*.core' -exec rm {} \;
|
||||
find . -name '*_stub.c' -exec rm {} \;
|
||||
|
@ -1,6 +1,10 @@
|
||||
PKG = eval
|
||||
UPKG = Eval
|
||||
|
||||
ALL_SRCS=$(wildcard $(patsubst ./%, %, $(patsubst %, %/*.hs, . $(UPKG))))
|
||||
|
||||
STUBOBJS =Eval/Haskell_stub.o
|
||||
|
||||
TOP=../..
|
||||
include ../build.mk
|
||||
|
||||
@ -10,3 +14,5 @@ HC_OPTS += -package plugins
|
||||
GHC6_3_HC_OPTS += -package template-haskell
|
||||
|
||||
install: install-me
|
||||
|
||||
-include depend
|
||||
|
@ -4,9 +4,13 @@ UPKG = Hi
|
||||
CSRC = $(UPKG)/hschooks.c
|
||||
COBJ = $(UPKG)/hschooks.o
|
||||
|
||||
ALL_SRCS=$(wildcard $(patsubst ./%, %, $(patsubst %, %/*.hs, . $(UPKG))))
|
||||
|
||||
TOP=../..
|
||||
include ../build.mk
|
||||
|
||||
HC_OPTS += -I$(UPKG)
|
||||
|
||||
install: install-me
|
||||
|
||||
-include depend
|
||||
|
@ -12,6 +12,8 @@ YOBJ = $(UPKG)/ParsePkgConfLite.hs
|
||||
YSRC = $(UPKG)/ParsePkgConfLite.y
|
||||
endif
|
||||
|
||||
ALL_SRCS=$(wildcard $(patsubst ./%, %, $(patsubst %, %/*.hs, . $(UPKG))))
|
||||
|
||||
include ../build.mk
|
||||
|
||||
HC_OPTS += -package-conf $(TOP)/plugins.conf.inplace
|
||||
@ -24,3 +26,5 @@ HC_OPTS += -package posix
|
||||
endif
|
||||
|
||||
install: install-me
|
||||
|
||||
-include depend
|
||||
|
@ -7,6 +7,8 @@ YSRC = $(UPKG)/Parser.y
|
||||
XOBJ = $(UPKG)/Lexer.hs
|
||||
XSRC = $(UPKG)/Lexer.x
|
||||
|
||||
ALL_SRCS=$(wildcard $(patsubst ./%, %, $(patsubst %, %/*.hs, . $(UPKG))))
|
||||
|
||||
TOP=../..
|
||||
include ../build.mk
|
||||
|
||||
@ -14,3 +16,5 @@ HC_OPTS += -package-conf $(TOP)/plugins.conf.inplace
|
||||
HC_OPTS += -package eval
|
||||
|
||||
install: install-me
|
||||
|
||||
-include depend
|
||||
|
Loading…
x
Reference in New Issue
Block a user