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
|
# 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
|
||||||
|
@ -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
|
||||||
|
@ -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
|
||||||
|
@ -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
|
||||||
|
75
src/build.mk
75
src/build.mk
@ -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 {} \;
|
||||||
|
@ -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
|
||||||
|
@ -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
|
||||||
|
@ -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
|
||||||
|
@ -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
|
||||||
|
Loading…
x
Reference in New Issue
Block a user