This repository has been archived by the owner on Mar 26, 2023. It is now read-only.
/
Makefile
94 lines (79 loc) · 3.3 KB
/
Makefile
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
# A hopefully complete makefile for building the parser
OS := $(shell uname -s)
MAGLEV_HOME := $(shell cd ../../.. ; pwd)
ifeq "$(GEMSTONE)" ""
GEMSTONE := $(MAGLEV_HOME)/gemstone
else
ICU_INCL := -I$(GEMSTONE)/../../icu/source/common
endif
GSVERSION := 3.1.0.2.2-64
CC := /usr/bin/g++
COPTIMIZE_FLAGS := -O3 -g -Wuninitialized
# COPTIMIZE_FLAGS := -g
ifeq "$(OS)" "Linux"
EXT := so
OSLDFLAGS := -Wl,--version-script=magparse.exp -Wl,--warn-unresolved-symbols -Wl,-Bdynamic,-hlibmagparse.$(EXT) -lcrypt -lrt
OSCCWARN := -Wformat
OSCCINC :=
else ifeq "$(OS)" "Darwin"
# CC=/usr/local/bin/g++-4.9
EXT := dylib
OSLDFLAGS := -Wl,-flat_namespace -Wl,-undefined -Wl,warning -Wl,-exported_symbols_list -Wl,magparse.osx.exp
OSCCWARN :=
OSCCINC := -I/usr/local/Cellar/icu4c/54.1/include
else
$(error UNKNOWN OS: $(OS))
endif
CCWARN := -Wchar-subscripts -Wcomment -Werror -Wmissing-braces -Wmultichar -Wno-aggregate-return -Wno-unused-function -Wparentheses -Wreturn-type -Wshadow -Wsign-compare -Wsign-promo -Wswitch -Wsystem-headers -Wtrigraphs -Wtrigraphs -Wunused-label -Wunused-value -Wunused-variable -Wwrite-strings $(OSCCWARN)
CCDEF := -DFLG_FAST=1 -DNOT_JAVA_VM -D_GNU_SOURCE -D_REENTRANT
CCINC := -I$(GEMSTONE)/include $(ICU_INCL) -I. $(OSCCINC)
CFLAGS := $(CCDEF) $(CCINC) $(CCWARN) -fPIC -fcheck-new -fmessage-length=0 -fno-exceptions -fno-strict-aliasing $(COPTIMIZE_FLAGS) -m64 -pipe -pthread -x c++
LDFLAGS := -shared -lc -ldl -lm -lpthread -m64 $(OSLDFLAGS)
.PHONY : help
help:
@echo Main build targets:
@echo
@echo "$(MAKE) all -- build and install"
@echo "$(MAKE) build -- compile and link the parser library"
@echo "$(MAKE) install -- copy the parser library into maglev"
@echo "$(MAKE) clean -- delete all build products"
@echo "$(MAKE) debug -- show all variable values"
@echo "$(MAKE) help -- show this message"
.PHONY : all
all: build install
.PHONY : build
build: libmagparse.$(EXT)
.PHONY : debug
debug:
@echo "OS = $(OS)"
@echo "MAGLEV_HOME = $(MAGLEV_HOME)"
@echo "GEMSTONE = $(GEMSTONE)"
@echo "GSVERSION = $(GSVERSION)"
@echo "CCWARN = $(CCWARN)"
@echo "CCDEF = $(CCDEF)"
@echo "CCINC = $(CCINC)"
@echo "CFLAGS = $(CFLAGS)"
@echo "LDFLAGS = $(LDFLAGS)"
@echo "CC = $(CC)"
@echo "EXT = $(EXT)"
@echo "OSLDFLAGS = $(OSLDFLAGS)"
@echo "OSCCWARN = $(OSCCWARN)"
@echo "OSCCINC = $(OSCCINC)"
byacc/yacc:
cd byacc && ./configure && $(MAKE)
grammar.y: byacc/yacc
rubygrammar.c rubygrammar.h: grammar.y
./byacc/yacc -d -g -o rubygrammar.c -P -t -v grammar.y
if [ -d compare ]; then (cd compare && rake && cp diff*.diff ..); fi
# rubygrammar.o and rubyast.o use implicit rules
libmagparse.$(EXT): rubygrammar.o rubyast.o
$(CC) $(LDFLAGS) rubyast.o rubygrammar.o -o libmagparse.$(EXT)
$(GEMSTONE)/lib/libmagparse-$(GSVERSION).$(EXT): libmagparse.$(EXT)
chmod 755 $(GEMSTONE)/lib/libmagparse-$(GSVERSION).$(EXT)
cp libmagparse.$(EXT) $(GEMSTONE)/lib/libmagparse-$(GSVERSION).$(EXT)
chmod 555 $(GEMSTONE)/lib/libmagparse-$(GSVERSION).$(EXT)
.PHONY : install
install: $(GEMSTONE)/lib/libmagparse-$(GSVERSION).$(EXT)
.PHONY : clean
clean:
-rm -f libmagparse.$(EXT) rubygrammar.o rubygrammar.c rubygrammar.h rubygrammar.dot rubygrammar.output rubyast.o *~