-
Notifications
You must be signed in to change notification settings - Fork 8
/
Copy pathMakefile
105 lines (79 loc) · 3.35 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
95
96
97
98
99
100
101
102
103
104
105
-include config.mak
DLLEXT ?= .so
FIRM_HOME ?= libfirm
FIRM_BUILD ?= $(FIRM_HOME)/build/debug
FIRM_CFLAGS ?= -I$(FIRM_HOME)/include -I$(FIRM_HOME)/build/gen/include/libfirm
FIRM_LIBS ?= -L$(FIRM_BUILD) -Wl,-R$(shell pwd)/$(FIRM_BUILD) -lfirm -lm
FIRM_FILE ?= $(FIRM_BUILD)/libfirm$(DLLEXT)
LIBOO_HOME ?= liboo
LIBOO_BUILD ?= $(LIBOO_HOME)/build
LIBOO_CFLAGS ?= -I$(LIBOO_HOME)/include/
LIBOO_LIBS ?= -L$(LIBOO_BUILD) -Wl,-R$(shell pwd)/$(LIBOO_BUILD) -loo
LIBOO_FILE ?= $(LIBOO_BUILD)/liboo$(DLLEXT)
INSTALL ?= /usr/bin/install
BUILDDIR = build
GOAL = $(BUILDDIR)/bytecode2firm
CPPFLAGS = -I. $(FIRM_CFLAGS) $(LIBOO_CFLAGS)
CFLAGS = -Wall -Wextra -Wunreachable-code -Wstrict-prototypes -O0 -g3 -std=c99
CFLAGS_GOOD = $(CFLAGS) -pedantic -Wmissing-prototypes
LFLAGS = $(LIBOO_LIBS) $(FIRM_LIBS) -lm
SOURCES = $(wildcard *.c) $(wildcard adt/*.c) $(wildcard driver/*.c)
DEPS = $(addprefix $(BUILDDIR)/, $(addsuffix .d, $(basename $(SOURCES))))
OBJECTS = $(addprefix $(BUILDDIR)/, $(addsuffix .o, $(basename $(SOURCES))))
SIMPLERT_JAVA_SOURCES = $(shell find simplert/java -name "*.java")
SIMPLERT_CLASSES = $(SIMPLERT_DIR)/java/lang/Object.class # just a representative file
SIMPLERT_C_SOURCES = $(shell find simplert/c -name "*.c")
SIMPLERT_HEADERS = $(shell find simplert/c -name "*.h")
SIMPLERT_DIR = $(BUILDDIR)/simplert
SIMPLERT_dll = $(SIMPLERT_DIR)/libsimplert$(DLLEXT)
SIMPLERT_a = $(SIMPLERT_DIR)/libsimplert.a
SIMPLERT_CFLAGS ?= -fPIC -g3 -fPIC
SIMPLERT_LINKFLAGS ?= -shared -lm
GCJ_DIR = $(BUILDDIR)/gcj
UNUSED := $(shell mkdir -p $(BUILDDIR) $(BUILDDIR)/adt $(BUILDDIR)/driver)
CLASSPATH_SIMPLERT ?= -DCLASSPATH_SIMPLERT=\"$(abspath $(SIMPLERT_DIR))\"
CLASSPATH_GCJ ?= -DCLASSPATH_GCJ=\"$(abspath $(GCJ_DIR))\"
CPPFLAGS += $(CLASSPATH_SIMPLERT) $(CLASSPATH_GCJ)
# This hides the noisy commandline outputs. Show them with "make V=1"
ifneq ($(V),1)
Q ?= @
endif
.PHONY: all libfirm liboo clean distclean test
all: $(GOAL) $(SIMPLERT_dll) $(SIMPLERT_a) $(SIMPLERT_CLASSES)
libfirm:
$(Q)$(MAKE) -C $(FIRM_HOME)
liboo: libfirm
$(Q)$(MAKE) -C $(LIBOO_HOME)
$(FIRM_FILE): libfirm
$(LIBOO_FILE): liboo
# re-evaluate Makefile to make sure changes/dependencies from the subdirs are
# picked up in this run already
Makefile: libfirm liboo
-include $(DEPS)
$(GOAL): $(OBJECTS) $(FIRM_FILE) $(LIBOO_FILE)
@echo '===> LD $@'
$(Q)$(CC) -o $@ $(OBJECTS) $(LFLAGS)
$(BUILDDIR)/%.o: %.c
@echo '===> CC $<'
$(Q)$(CC) $(CPPFLAGS) $(CFLAGS_GOOD) -MP -MMD -c -o $@ $<
$(SIMPLERT_dll): $(SIMPLERT_C_SOURCES) $(SIMPLERT_HEADERS)
@echo '===> CC $@'
$(Q)mkdir -p $(SIMPLERT_DIR)
$(Q)$(CC) $(CFLAGS) $(SIMPLERT_CFLAGS) $(SIMPLERT_C_SOURCES) $(SIMPLERT_LINKFLAGS) -o $@
SIMPLERT_SOURCES_ABS=$(abspath $(SIMPLERT_C_SOURCES))
$(SIMPLERT_a): $(SIMPLERT_C_SOURCES) $(SIMPLERT_HEADERS)
@echo '===> CC+AR $@'
$(Q)mkdir -p $(SIMPLERT_DIR)
$(Q)cd $(SIMPLERT_DIR) && $(CC) $(CFLAGS) $(SIMPLERT_CFLAGS) -c $(SIMPLERT_SOURCES_ABS)
$(Q)ar rcs $@ $(SIMPLERT_DIR)/*.o
$(SIMPLERT_CLASSES): $(SIMPLERT_JAVA_SOURCES)
@echo '===> JAVAC all runtime classes'
$(Q)mkdir -p $(SIMPLERT_DIR)
$(Q)javac -d $(SIMPLERT_DIR) $(SIMPLERT_JAVA_SOURCES)
clean:
$(Q)rm -rf $(BUILDDIR)/*
distclean: clean
$(Q)$(MAKE) -C $(FIRM_HOME) clean
$(Q)$(MAKE) -C $(LIBOO_HOME) clean
test: $(GOAL)
$(Q)cd testsuite; sisyphus/sis --bc2firm ../$(GOAL) --expect fail_expectations