-
Notifications
You must be signed in to change notification settings - Fork 3
Expand file tree
/
Copy pathMakefile
More file actions
134 lines (110 loc) · 5.21 KB
/
Makefile
File metadata and controls
134 lines (110 loc) · 5.21 KB
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
124
125
126
127
128
129
130
131
132
133
variant ?= debug
-include config.mak
FIRM_HOME ?= ../libfirm
LIBFIRM_CPPFLAGS ?= -I$(FIRM_HOME)/include -I$(FIRM_HOME)/build/gen/include/libfirm
LIBFIRM_LFLAGS ?= -L$(FIRM_HOME)/build/$(variant) -lfirm
INSTALL ?= install
DLLEXT ?= .so
CC ?= gcc
AR ?= ar
CFLAGS ?= -O0 -g3
guessed_target := $(shell $(CC) -dumpmachine)
TARGET ?= $(guessed_target)
TARGET_CC ?= $(TARGET)-gcc
ifeq ($(findstring darwin11, $(TARGET)), darwin11)
# compile library normally but runtime in 32bit mode
RT_CFLAGS += -m32
RT_LFLAGS += -m32
endif
ifeq ($(findstring x86_64, $(guessed_target)), x86_64)
ifeq ($(findstring i686, $(TARGET)), i686)
# compile library normally but runtime in 32bit mode
RT_CFLAGS += -m32
RT_LFLAGS += -m32
endif
endif
ifeq ($(findstring i686-invasic, $(TARGET)), i686-invasic)
OCTOPOS_BASE=../octopos-app/releases/current/x86guest/default
GCC_INCLUDE:=$(shell $(TARGET_CC) --print-file-name=include)
RT_CFLAGS += -m32 -fno-stack-protector -mfpmath=sse -msse2 -nostdinc -isystem $(GCC_INCLUDE) -I $(OCTOPOS_BASE)/include -ffreestanding
RT_LFLAGS += -m32 -nostdlib -Wl,-T,$(OCTOPOS_BASE)/lib/sections.x $(OCTOPOS_BASE)/lib/libcsubset.a $(OCTOPOS_BASE)/lib/liboctopos.a
endif
ifeq ($(findstring x86_64-invasic, $(TARGET)), x86_64-invasic)
OCTOPOS_BASE=../octopos-app/releases/current/x64native/default
GCC_INCLUDE:=$(shell $(TARGET_CC) --print-file-name=include)
RT_CFLAGS += -mno-red-zone -nostdinc -isystem $(GCC_INCLUDE) -I $(OCTOPOS_BASE)/include -ffreestanding
RT_LFLAGS += -nostdlib -Wl,-T,$(OCTOPOS_BASE)/lib/sections.x $(OCTOPOS_BASE)/lib/libcsubset.a $(OCTOPOS_BASE)/lib/liboctopos.a
endif
ifeq ($(findstring sparc-invasic, $(TARGET)), sparc-invasic)
OCTOPOS_BASE=../octopos-app/releases/current/leon/default
GCC_INCLUDE:=$(shell $(TARGET_CC) --print-file-name=include)
RT_CFLAGS += -fno-stack-protector -nostdinc -I $(OCTOPOS_BASE)/include -isystem $(GCC_INCLUDE) -ffreestanding
RT_LFLAGS += -nostdlib -Wl,-T,$(OCTOPOS_BASE)/lib/sections.x $(OCTOPOS_BASE)/lib/libcsubset.a $(OCTOPOS_BASE)/lib/liboctopos.a
endif
BUILDDIR=build
RUNTIME_BUILDDIR=$(BUILDDIR)/$(TARGET)
GOAL = $(BUILDDIR)/liboo$(DLLEXT)
GOAL_STATIC = $(BUILDDIR)/liboo.a
GOAL_RT_SHARED = $(RUNTIME_BUILDDIR)/liboo_rt$(DLLEXT)
GOAL_RT_STATIC = $(RUNTIME_BUILDDIR)/liboo_rt.a
# We only need a static runtime lib for invasic targets
ifeq ($(findstring invasic, $(TARGET)), invasic)
GOAL_RT_SHARED =
endif
CPPFLAGS = -I. -I./include/ $(LIBFIRM_CPPFLAGS) $(LIBUNWIND_CPPFLAGS)
CFLAGS += -Wall -W -Wstrict-prototypes -Wmissing-prototypes -std=c99 -pedantic
# disabled the following warnings for now. They fail on OS/X Snow Leopard:
# the first one gives false positives because of system headers, the later one
# doesn't exist in the old gcc there
#CFLAGS += -Wunreachable-code -Wlogical-op
LFLAGS +=
PIC_FLAGS = -fpic
SOURCES = $(wildcard src-cpp/*.c) $(wildcard src-cpp/adt/*.c)
SOURCES_RT = $(wildcard src-cpp/rt/*.c)
SOURCES := $(filter-out src-cpp/gen_%.c, $(SOURCES)) src-cpp/gen_irnode.c
OBJECTS = $(addprefix $(BUILDDIR)/, $(addsuffix .o, $(basename $(SOURCES))))
OBJECTS_RT_SHARED = $(addprefix $(RUNTIME_BUILDDIR)/shared/, $(addsuffix .o, $(basename $(SOURCES_RT))))
OBJECTS_RT_STATIC = $(addprefix $(RUNTIME_BUILDDIR)/static/, $(addsuffix .o, $(basename $(SOURCES_RT))))
DEPS = $(OBJECTS:%.o=%.d) $(OBJECTS_RT_SHARED:%.o=%.d) $(OBJECTS_RT_STATIC:%.o=%.d)
Q ?= @
.PHONY: all runtime clean
all: $(GOAL) $(GOAL_STATIC) runtime
runtime: $(GOAL_RT_SHARED) $(GOAL_RT_STATIC)
# Make sure our build-directories are created
UNUSED := $(shell mkdir -p $(BUILDDIR)/src-cpp/rt $(BUILDDIR)/src-cpp/adt $(RUNTIME_BUILDDIR)/shared/src-cpp/rt $(RUNTIME_BUILDDIR)/static/src-cpp/rt)
-include $(DEPS)
SPEC_GENERATED_HEADERS := include/liboo/nodes.h src-cpp/gen_irnode.h
SPECGENDIR := $(FIRM_HOME)/scripts
IR_SPEC_GENERATOR := $(SPECGENDIR)/gen_ir.py
IR_SPEC_GENERATOR_DEPS := $(IR_SPEC_GENERATOR) $(SPECGENDIR)/irops.py $(SPECGENDIR)/filters.py $(SPECGENDIR)/jinjautil.py
SPECFILE := spec/oo_nodes_spec.py
$(SOURCES): $(SPEC_GENERATED_HEADERS)
include/liboo/% : $(FIRM_HOME)/scripts/templates/% $(IR_SPEC_GENERATOR_DEPS) $(SPECFILE)
@echo GEN $@
$(Q)$(IR_SPEC_GENERATOR) "$(SPECFILE)" "$<" > "$@"
src-cpp/% : $(FIRM_HOME)/scripts/templates/% $(IR_SPEC_GENERATOR_DEPS) $(SPECFILE)
@echo GEN $@
$(Q)$(IR_SPEC_GENERATOR) "$(SPECFILE)" "$<" > "$@"
$(GOAL): $(OBJECTS)
@echo '===> LD $@'
$(Q)$(CC) -shared -o $@ $^ $(LFLAGS) $(LIBFIRM_LFLAGS)
$(GOAL_STATIC): $(OBJECTS)
@echo '===> AR $@'
$(Q)$(AR) -cr $@ $^
$(GOAL_RT_SHARED): $(OBJECTS_RT_SHARED)
@echo '===> LD $@'
$(Q)$(TARGET_CC) -shared $(RT_LFLAGS) $(PIC_FLAGS) -o $@ $^ $(LFLAGS) $(LIBUNWIND_LFLAGS)
$(GOAL_RT_STATIC): $(OBJECTS_RT_STATIC)
@echo '===> AR $@'
$(Q)$(AR) -cr $@ $^
$(RUNTIME_BUILDDIR)/shared/%.o: %.c
@echo '===> TARGET_CC $@'
$(Q)$(TARGET_CC) $(CPPFLAGS) $(CFLAGS) $(RT_CFLAGS) $(PIC_FLAGS) -MP -MMD -c -o $@ $<
$(RUNTIME_BUILDDIR)/static/%.o: %.c
@echo '===> TARGET_CC $@'
$(Q)$(TARGET_CC) $(CPPFLAGS) $(CFLAGS) $(RT_CFLAGS) -MP -MMD -c -o $@ $<
$(BUILDDIR)/%.o: %.c
@echo '===> CC $@'
$(Q)$(CC) $(CPPFLAGS) $(CFLAGS) $(PIC_FLAGS) -MP -MMD -c -o $@ $<
clean:
rm -rf $(OBJECTS) $(OBJECTS_RT_SHARED) $(OBJECTS_RT_STATIC) $(GOAL) $(GOAL_RT_STATIC) $(GOAL_RT_SHARED) $(DEPS) $(DEPS_RT) $(RUNTIME_BUILDDIR) $(SPEC_GENERATED_HEADERS)