-
-
Notifications
You must be signed in to change notification settings - Fork 6
/
Copy pathMakefile
95 lines (86 loc) · 2.75 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
BIN = rave
FLAGS ?= -O3
COMPILER ?= $(CXX)
LLVM_VERSION =
LLVM_FLAGS =
LLVM_CONFIG = llvm-config
LLVM_STATIC ?= 0
WINBUILD = 0
ifdef OS
ifeq ($(OS),Windows_NT)
WINBUILD = 1
endif
endif
ifeq ($(WINBUILD),1)
BIN = rave.exe
ifeq (, $(shell command -v $(LLVM_CONFIG)))
LLVM_CONFIG = ./LLVM/bin/llvm-config.exe
endif
LLVM_FULL_VERSION = $(shell $(LLVM_CONFIG) --version)
LLVM_VERSION = $(firstword $(subst ., ,$(LLVM_FULL_VERSION)))
# We assume that if this config query outputs 'shared' then LLVM can be linked in both ways
# Otherwise static only
ifneq (shared, $(shell $(LLVM_CONFIG) --shared-mode))
LLVM_STATIC = 1
LLVM_NO_SHARED = 1
endif
# the following branch is thoughtful, as LLVM_STATIC has priority over llvm's default mode
LLVM_STATIC_FLAG1 =
LLVM_STATIC_FLAG2 =
ifeq ($(LLVM_STATIC), 1)
LLVM_STATIC_FLAG1 = --link-static
LLVM_STATIC_FLAG2 = --system-libs
endif
LLVM_LINK_FLAGS = `$(LLVM_CONFIG) $(LLVM_STATIC_FLAG1) $(LLVM_STATIC_FLAG2) --libs`
LLVM_LIBDIR = $(shell $(LLVM_CONFIG) $(LLVM_STATIC_FLAG1) --libdir)
ifeq ($(LLVM_NO_SHARED), 1)
# I've tried many LLVMs for Windows and concluded that
# if it supports only static linkage, it won't include this library into `llvm-config --libs`
LLVM_LINK_FLAGS = "$(LLVM_LIBDIR)/LLVM-C.lib"
endif
SRC = $(patsubst ".\\%",$ .\src\\%, $(shell ./getFiles.sh))
LLVM_COMPILE_FLAGS = `$(LLVM_CONFIG) --cflags`
else
ifneq (, $(shell command -v llvm-config-16))
LLVM_VERSION = 16
LLVM_CONFIG = llvm-config-16
else
ifneq (, $(shell command -v llvm-config-15))
LLVM_VERSION = 15
LLVM_CONFIG = llvm-config-15
else
ifneq (, $(shell command -v llvm-config))
LLVM_FULL_VERSION = $(shell llvm-config --version)
LLVM_VERSION = $(firstword $(subst ., ,$(LLVM_FULL_VERSION)))
LLVM_CONFIG = llvm-config
endif
endif
endif
ifeq ($(LLVM_STATIC), 1)
LLVM_FLAGS = `$(LLVM_CONFIG) --ldflags --link-static --libs --system-libs --cxxflags`
else
LLVM_FLAGS = `$(LLVM_CONFIG) --libs --cxxflags`
endif
SRC = $(shell find ./src -name *.cpp)
endif
ifeq ($(WINBUILD),0)
OBJ = $(SRC:%.cpp=obj/linux/%.o)
else
OBJ = $(SRC:%.cpp=obj/win/%.o)
endif
all: $(BIN)
ifeq ($(WINBUILD),0)
$(BIN): $(OBJ)
$(COMPILER) $(OBJ) -o $@ $(LLVM_FLAGS) -DLLVM_VERSION=$(LLVM_VERSION) -lstdc++fs
obj/linux/%.o: %.cpp
$(shell mkdir -p obj/linux/src/parser/nodes obj/linux/src/lexer)
$(COMPILER) -c $< -o $@ -DLLVM_VERSION=$(LLVM_VERSION) -std=c++17 -Wno-deprecated $(FLAGS) $(LLVM_FLAGS) -fexceptions
else
$(BIN): $(OBJ)
$(COMPILER) $(OBJ) -o $@ $(LLVM_LINK_FLAGS) -DLLVM_VERSION=$(LLVM_VERSION) -lstdc++
obj/win/%.o: %.cpp
$(shell mkdir -p obj/win/src/parser/nodes obj/win/src/lexer)
$(COMPILER) -c $< -o $@ -DLLVM_VERSION=$(LLVM_VERSION) -std=c++17 -Wno-deprecated $(FLAGS) $(LLVM_COMPILE_FLAGS) -fexceptions
endif
clean:
rm -rf obj