Updated Makefile for Mac OS X
[debian/pforth] / build / unix / Makefile
1 # makefile for pForth
2 # Portable Forth written in 'C'
3 # by Phil Burk
4 # For more info visit http://www.softsynth.com/pforth/
5
6 .SUFFIXES: .c .o
7
8 # Options include: PF_SUPPORT_FP PF_NO_MALLOC PF_NO_INIT PF_DEBUG
9 # See "docs/pf_ref.htm" file for more info.
10
11 # Note for Mac OS X, use cc instead of gcc
12 COMPILER = gcc
13
14 PFORTHDIR   := $(shell cd ../../; pwd)
15 CSRCDIR      = $(PFORTHDIR)/csrc
16 FTHDIR       = $(PFORTHDIR)/fth
17
18 PFDICAPP     = $(FTHDIR)/pforth
19 PFORTHDIC    = $(FTHDIR)/pforth.dic
20 PFDICDAT     = ${CSRCDIR}/pfdicdat.h
21 PFORTHAPP    = $(PFORTHDIR)/pforth_standalone
22 OBJECTDIR    = $(PFORTHDIR)/objects
23 TEMPOBJECTDIR = $(PFORTHDIR)/tempobjects
24
25 FULL_WARNINGS =  \
26         -fsigned-char \
27         -fno-builtin \
28         -fno-unroll-loops \
29         -fpeephole \
30         -fno-keep-inline-functions \
31         -Wcast-qual \
32         -Wall \
33         -Wwrite-strings \
34         -Winline  \
35         -Wmissing-prototypes \
36         -Wmissing-declarations
37         
38 CCOPTS = -DPF_SUPPORT_FP -DPF_POSIX_IO -O2 $(FULL_WARNINGS) $(EXTRA_CCOPTS)
39
40 EMBCCOPTS = -DPF_STATIC_DIC
41
42 #######################################
43 # Build file lists from wildcards.
44 PFITEMP    = ${wildcard ${CSRCDIR}/*.h}
45 PFINCLUDES = ${PFITEMP:${CSRCDIR}/pfdicdat.h=}
46 PFSOURCE   = ${wildcard ${CSRCDIR}/*.c} ${CSRCDIR}/posix/pf_io_posix.c
47 PFTEMP     = ${PFSOURCE:%.c=%.o}
48 PFOBJS     = ${PFTEMP:${CSRCDIR}/%=${TEMPOBJECTDIR}/%}
49 PFEMBOBJS  = ${PFTEMP:${CSRCDIR}/%=${OBJECTDIR}/%}
50
51 COMPILE = $(COMPILER) $(CCOPTS) $(CDEFS)
52         
53 ${TEMPOBJECTDIR}/%.o:  ${TEMPOBJECTDIR}/posix $(PFINCLUDES)  ${CSRCDIR}/%.c
54         $(COMPILE) -O -o ${TEMPOBJECTDIR}/$*.o -c ${CSRCDIR}/$*.c
55         
56 ${OBJECTDIR}/%.o:  ${OBJECTDIR}/posix $(PFINCLUDES) ${CSRCDIR}/%.c ${CSRCDIR}/pfdicdat.h 
57         $(COMPILE) -O -o ${OBJECTDIR}/$*.o -c ${CSRCDIR}/$*.c $(EMBCCOPTS)
58
59 all: $(PFORTHAPP)
60
61 pffiles:
62         @echo "ITEMP FILES -----------------"
63         @echo ${PFITEMP}
64         @echo "INCLUDE FILES -----------------"
65         @echo ${PFINCLUDES}
66         @echo "'C' FILES ---------------------"
67         @echo ${PFSOURCE}
68         @echo "OBJECT FILES ------------------"
69         @echo ${PFOBJS}
70         @echo "EMBEDDED OBJECT FILES ------------------"
71         @echo ${PFEMBOBJS}
72         
73 ${TEMPOBJECTDIR}/posix: 
74         mkdir -pv ${TEMPOBJECTDIR}/posix
75
76 ${OBJECTDIR}/posix: 
77         mkdir -pv ${OBJECTDIR}/posix
78
79 # build pforth by compiling 'C' source
80 $(PFDICAPP): $(PFINCLUDES) $(PFOBJS)
81         $(COMPILER) $(PFOBJS) -lm -o $(PFDICAPP)
82
83 pfdicapp: $(PFDICAPP)
84
85 # build basic dictionary by running newly built pforth and including system.fth
86 $(PFDICDAT): $(PFDICAPP)
87         cd $(FTHDIR); $(PFDICAPP) -i system.fth ; mv pfdicdat.h $(PFDICDAT)
88
89 $(PFORTHAPP): ${TEMPOBJECTDIR}/posix $(PFDICDAT) $(PFINCLUDES) $(PFEMBOBJS)
90         $(COMPILER) $(PFEMBOBJS) -lm -o $(PFORTHAPP)
91         @echo ""
92         @echo "Standalone pForth executable written to $(PFORTHAPP)"
93         
94 clean:
95         -rm -f $(PFOBJS) $(PFEMBOBJS)
96         -rm $(PFORTHAPP)
97         -rm $(PFDICDAT)
98         -rm $(PFORTHDIC)
99         -rm $(PFDICAPP)