File: Makefile.common

package info (click to toggle)
ghc-cvs 20040725-2
  • links: PTS
  • area: main
  • in suites: sarge
  • size: 68,484 kB
  • ctags: 19,658
  • sloc: haskell: 251,945; ansic: 109,709; asm: 24,961; sh: 12,825; perl: 5,786; makefile: 5,334; xml: 3,884; python: 682; yacc: 650; lisp: 477; cpp: 337; ml: 76; fortran: 24; csh: 18
file content (123 lines) | stat: -rw-r--r-- 4,699 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
# This Makefile.common is used only in an nhc98 build of the libraries.
# It is included from each package's individual Makefile.nhc98.
# We assume the following definitions have already been made in
# the importing Makefile.
#
# THISPKG = e.g. mypkg
# SEARCH  = e.g. -P../IO -P../PreludeIO -package base
# SRCS    = all .hs .gc and .c files
#
# EXTRA_H_FLAGS = e.g. -prelude
# EXTRA_C_FLAGS = e.g. -I../Binary
include ../Makefile.inc

# nasty hack - replace flags for ghc, nhc98, with hbc specific ones
ifeq "hbc" "${BUILDCOMP}"
EXTRA_H_FLAGS := ${EXTRA_HBC_FLAGS}
endif

DIRS     = $(shell ${LOCAL}pkgdirlist ${THISPKG})

OBJDIR   = ${BUILDDIR}/${OBJ}/libraries/${THISPKG}
OBJDIRS  = $(patsubst %, ${OBJDIR}/%, ${DIRS})
FINALLIB = ${DST}/libHS${THISPKG}.$A
INCDIRS  = ${INCDIR}/packages/${THISPKG} \
	   $(patsubst %, ${INCDIR}/packages/${THISPKG}/%, ${DIRS})
.SUFFIXES: .hi .hs .lhs .o .gc .c .hc .p.o .p.c .z.o .z.c .hsc


OBJS_HS  = $(patsubst %.hs, ${OBJDIR}/%.$O, $(filter %.hs, ${SRCS}))
OBJS_LHS = $(patsubst %.lhs,${OBJDIR}/%.$O, $(filter %.lhs,${SRCS}))
OBJS_GC  = $(patsubst %.gc, ${OBJDIR}/%.$O, $(filter %.gc, ${SRCS}))
OBJS_C   = $(patsubst %.c,  ${OBJDIR}/%.$O, $(filter %.c,  ${SRCS}))
OBJS_HSC = $(patsubst %.hsc,${OBJDIR}/%.$O, $(filter %.hsc,${SRCS}))
OBJS = ${OBJS_HS} ${OBJS_LHS} ${OBJS_GC} ${OBJS_C} ${OBJS_HSC}

CFILES_HS  = $(patsubst %.hs, %.$C, $(filter %.hs,  ${SRCS}))
CFILES_LHS = $(patsubst %.lhs,%.$C, $(filter %.lhs, ${SRCS}))
CFILES_GC  = $(patsubst %.gc, %.$C, $(filter %.gc,  ${SRCS}))
CFILES_XS  = $(patsubst %.gc, %_.$C, $(filter %.gc, ${SRCS})) \
             $(patsubst %.gc, %_.hs, $(filter %.gc, ${SRCS}))
CFILES_HSC = $(patsubst %.hsc,%.$C, $(filter %.hsc, ${SRCS}))
CFILES_GEN = ${CFILES_HS} ${CFILES_LHS} ${CFILES_GC} ${CFILES_HSC}

ifeq "p" "${PROFILING}"
HC += -p
endif
 
ifeq "z" "${TPROF}"
HC += -z
endif

all: ${OBJDIR} ${OBJDIRS} ${INCDIRS} ${OBJS} extra ${FINALLIB}
extra:
cfiles: extracfiles ${CFILES_GEN}
extracfiles:
fromC: ${OBJDIR} ${OBJS_C} ${OBJDIRS}
	$(HC) -c -d $(OBJDIR) $(EXTRA_C_FLAGS) ${CFILES_GEN}
	echo $(OBJS) | xargs ar cr ${FINALLIB}
objdir: ${OBJDIR} ${OBJDIRS} ${INCDIR}/packages/${THISPKG}
${OBJDIR} ${OBJDIRS} ${INCDIRS}:
	mkdir -p $@
${FINALLIB}: ${OBJS}
	echo $(OBJS) | xargs ar cr $@
cleanhi:
	-rm -f $(patsubst %, %/*.hi, ${DIRS})
cleanC: cleanExtraC
	-rm -f ${CFILES_GEN} ${CFILES_XS}
clean:	cleanhi
	-rm -f $(patsubst %, ${OBJDIR}/%/*.$O, ${DIRS})
	-rm -f $(patsubst %.gc, %_.hs, $(filter %.gc, $(SRCS)))
	-rm -f $(patsubst %.gc, %_.$C,  $(filter %.gc, $(SRCS)))
cleanExtraC:

# general build rules for making objects from Haskell files
${OBJS_HS}: ${OBJDIR}/%.$O : %.hs
	$(HC) -c -cpp -I$(INCDIR)/packages/$(THISPKG) $(SEARCH) $(EXTRA_H_FLAGS) -o $@ $<
	mv $(patsubst %.hs, %.hi, $<) \
		$(patsubst %.hs, ${INCDIR}/packages/${THISPKG}/%.hi, $<)
${OBJS_LHS}: ${OBJDIR}/%.$O : %.lhs
	$(HC) -c -cpp -I$(INCDIR)/packages/$(THISPKG) $(SEARCH) $(EXTRA_H_FLAGS) -o $@ $<
	mv $(patsubst %.lhs, %.hi, $<) \
		$(patsubst %.lhs, ${INCDIR}/packages/${THISPKG}/%.hi, $<)
${OBJS_GC}: ${OBJDIR}/%.$O : %.gc
	${HC} -c -I$(INCDIR)/packages/$(THISPKG) ${SEARCH} $(EXTRA_H_FLAGS) -o $@ $<
	mv $(patsubst %.gc, %.hi, $<) \
		$(patsubst %.gc, ${INCDIR}/packages/${THISPKG}/%.hi, $<)
${OBJS_HSC}: ${OBJDIR}/%.$O : %.hsc
	$(LOCAL)hsc2hs ${SEARCH} $<
	${HC} -c -I$(INCDIR)/packages/$(THISPKG) ${SEARCH} $(EXTRA_H_FLAGS) -o $@ $(patsubst %.hsc, %.hs, $<)
	mv $(patsubst %.hsc, %.hi, $<) \
		$(patsubst %.hsc, ${INCDIR}/packages/${THISPKG}/%.hi, $<)

# general build rule for making objects from C files
${OBJS_C}: ${OBJDIR}/%.$O : %.c
	$(CC) -c -I$(INCDIR) $(ENDIAN) $(EXTRA_C_FLAGS) -o $@ $<

# general build rules for making C files from Haskell files
${CFILES_HS}: %.$C : %.hs
	$(HC) -C -cpp -I$(INCDIR)/packages/$(THISPKG) $(SEARCH) $(EXTRA_H_FLAGS) $<
	rm $(patsubst %.hs, %.hi, $<)
${CFILES_LHS}: %.$C : %.lhs
	$(HC) -C -cpp -I$(INCDIR)/packages/$(THISPKG) $(SEARCH) $(EXTRA_H_FLAGS) $<
	rm $(patsubst %.lhs, %.hi, $<)
${CFILES_GC}: %.$C : %.gc
	$(HC) -C -I$(INCDIR)/packages/$(THISPKG) $(SEARCH) $(EXTRA_H_FLAGS) $<
${CFILES_HSC}: %.$C : %.hsc
	$(LOCAL)hsc2hs ${SEARCH} $<
	$(HC) -C -I$(INCDIR)/packages/$(THISPKG) $(SEARCH) $(EXTRA_H_FLAGS) $(patsubst %.hsc, %.hs, $<)
	rm $(patsubst %.hsc, %.hi, $<)

# hack to get round mutual recursion between libraries
HIFILES = $(patsubst %.hs,../${THISLIB}/%.${HISUFFIX},$(filter %.hs, ${SRCS}))
${HIFILES}: ../${THISLIB}/%.${HISUFFIX} : %.hs
	$(HC) -c $(PART_FLAGS) -o /dev/null $<

# The importing Makefile should now define individual dependencies
#    e.g.
# ${OBJDIR}/Function.$O: Function.hs ${OBJDIR}/Other.$O
#
# and C-files dependencies likewise
#    e.g.
# AlignBin.c:    BinHandle.c