summaryrefslogtreecommitdiff
path: root/ghc/interpreter/Makefile
blob: 4610a3848330c3d3656a534121d9b28313a77b71 (plain)
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

# --------------------------------------------------------------------------- #
# $Id: Makefile,v 1.25 2000/02/14 11:15:09 sewardj Exp $                      #
# --------------------------------------------------------------------------- #

TOP = ..
include $(TOP)/mk/boilerplate.mk
SUBDIRS = lib

# --------------------------------------------------------------------- #
# interpreter and relevant .a/.so files                                 #
# --------------------------------------------------------------------- #

ifeq "$(TARGETPLATFORM)" "i386-unknown-cygwin32"
DYN_EXT=.dll
LIB_DL=
else
DYN_EXT=.so
LIB_DL=-ldl
endif

ifeq "$(HaveLibReadline)$" "YES"
LIB_READLINE=-lreadline -ltermcap
else
LIB_READLINE=
endif

YACC = bison -y
%.c: %.y
	-$(YACC) $<
	mv y.tab.c $@
	rm -f input.o

HS_SRCS =

Y_SRCS = parser.y
C_SRCS = link.c type.c static.c storage.c derive.c input.c compiler.c subst.c \
     translate.c codegen.c lift.c free.c stgSubst.c output.c   \
     hugs.c dynamic.c stg.c sainteger.c object.c interface.c

SRC_CC_OPTS = -g -O -I$(GHC_INTERPRETER_DIR) -I$(GHC_INCLUDE_DIR) -I$(GHC_RUNTIME_DIR) -D__HUGS__ -DCOMPILING_RTS -Wall -Wstrict-prototypes -Wno-unused -DDEBUG -Winline

GHC_LIBS_NEEDED = $(GHC_RUNTIME_DIR)/libHSrts.a

all :: parser.c $(GHC_LIBS_NEEDED) nHandle$(DYN_EXT) hugs

### EXTREMELY hacky
hugs: $(C_OBJS) ../rts/Sanity.o ../rts/Assembler.o ../rts/Disassembler.o \
      ../rts/Evaluator.o ../rts/ForeignCall.o ../rts/GC.o ../rts/Printer.o \
      ../rts/StgCRun.o ../rts/PrimOps.o
	$(CC) -o $@ $(CC_OPTS) $^ $(GHC_LIBS_NEEDED) \
		 -lbfd -liberty $(LIB_READLINE) $(LIB_DL) -lgmp -lm

foobar:
	rm -f ../rts/libHSrts.a  ../rts/libHSrts_u.a
	rm -f ../rts/StgCRun.o ../rts/StgCRun.u_o
	make all

nHandle$(DYN_EXT): nHandle.c
ifeq "$(TARGETPLATFORM)" "i386-unknown-cygwin32"
	gcc -mno-cygwin -O -Wall -o nHandle.o -c nHandle.c
	dllwrap -mno-cygwin --target=i386-mingw32 -o nHandle.dll \
                -def nHandle.def nHandle.o
else
	gcc -O -Wall -shared -fPIC -o nHandle.so nHandle.c
endif

$(GHC_RUNTIME_DIR)/libHSrts.a:
	(cd $(GHC_RUNTIME_DIR) ; make clean ; make EXTRA_CC_OPTS=-I$(GHC_INTERPRETER_DIR))

cleanish:
	/bin/rm *.o
rtsclean:
	(cd $(GHC_RUNTIME_DIR) ; make clean)

binaries:
	tar cvzf stghugs.tar.gz hugs$(exeext) nHandle$(DYN_EXT) lib/*lhs lib/Prelude.hs

snapshot:
	/bin/rm -f snapshot.tar
	tar cvf snapshot.tar Makefile *.[chy] \
             ../rts/Assembler.c ../rts/Evaluator.c ../rts/Disassembler.c \
             ../rts/ForeignCall.c ../rts/Printer.c ../rts/QueueTemplate.h \
             ../includes/options.h ../includes/Assembler.h nHandle.c \
             ../includes/Assembler.h ../rts/Bytecodes.h ../includes/ClosureMacros.h \
             lib/*.hs runnofib runallnofib


# --------------------------------------------------------------------- #
# Testing                                                               #
# --------------------------------------------------------------------- #

check :: all
	./test/runtests test/static/*.hs
	./test/runtests test/typechecker/*.hs
	./test/runtests test/runtime/*.hs
	./test/runtests test/std/*.hs
	./test/runtests test/exts/*.hs

checkrun: all
	./test/runtests test/runtime/*.hs
	./test/runtests test/std/*.hs
	./test/runtests test/exts/*.hs

# --------------------------------------------------------------------- #
# Cleanery & misc                                                       #
# --------------------------------------------------------------------- #

CLEAN_FILES += hugs nHandle.dll
CLEAN_FILES += $(TOP)/ghc/rts/libHSrts.a $(TOP)/ghc/rts/*.o
CLEAN_FILES += parser.c

INSTALL_LIBEXECS = hugs

depend :: $(LOOPS) $(SRCS_UGNHS)


include $(TOP)/mk/target.mk