-
Notifications
You must be signed in to change notification settings - Fork 0
/
clang.mk
117 lines (97 loc) · 3.47 KB
/
clang.mk
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
ifndef _MK_CLANG_MK_
_MK_CLANG_MK_ := 1
#$(info ---> .make/clang.mk)
ifndef GIT_ROOT
GIT_ROOT := $(shell git rev-parse --show-toplevel 2>/dev/null)
endif
ifndef MK_DIR
MK_DIR := $(GIT_ROOT)/.make
endif
include $(MK_DIR)/os.mk
include $(MK_DIR)/git.mk
include $(MK_DIR)/os-tools-*.mk
include $(MK_DIR)/rustup.mk
include $(MK_DIR)/brew.mk
include $(MK_DIR)/curl.mk
include $(MK_DIR)/llvm.mk
CLANG_VERSION := $(shell clang --version 2>/dev/null | head -n1 | cut -d\ -f4)
ifdef CLANG_VERSION
#$(info CLANG_VERSION=$(CLANG_VERSION))
CLANG_MAIN_VERSION := $(shell echo $(CLANG_VERSION) | cut -d. -f1)
#$(info CLANG_MAIN_VERSION=$(CLANG_MAIN_VERSION))
else
$(warning LLVM CLANG is not installed)
endif
CLANG_MAIN_VERSION_EXPECTED := 18
.PHONY: clang-check
ifndef CLANG_VERSION
clang-check: clang-install
else
ifneq ($(CLANG_MAIN_VERSION),$(CLANG_MAIN_VERSION_EXPECTED))
$(info CLANG_MAIN_VERSION ($(CLANG_MAIN_VERSION)) is not equal to CLANG_MAIN_VERSION_EXPECTED ($(CLANG_MAIN_VERSION_EXPECTED)))
clang-check: clang-install
else
#$(info CLANG_MAIN_VERSION is equal to CLANG_MAIN_VERSION_EXPECTED)
CLANG_INSTALL := 0
clang-check:
@echo Using LLVM CLANG ${CLANG_VERSION}
endif
endif
ifndef LIBCLANG_PATH
ifdef LLVM_LIB_PATH
LIBCLANG_PATH := $(LLVM_LIB_PATH)
else
LIBCLANG_PATH := /usr/local/opt/llvm/lib
endif
endif
ifndef LIBCLANG_PATH
$(warning LIBCLANG_PATH is not defined)
endif
ifeq ("$(wildcard $(LIBCLANG_PATH))","")
$(info Directory LIBCLANG_PATH=$(LIBCLANG_PATH) does not exist)
endif
# LIBCLANG_BIN_PATH is something like: /usr/local/opt/llvm/bin/
export LIBCLANG_BIN_PATH := $(shell cd $(LIBCLANG_PATH) 2>/dev/null && cd ../bin && pwd)
#$(info LIBCLANG_BIN_PATH=$(LIBCLANG_BIN_PATH))
# LIBCLANG_INCLUDE_PATH is something like: /usr/local/opt/llvm/include
export LIBCLANG_INCLUDE_PATH := $(shell cd $(LIBCLANG_PATH) 2>/dev/null && cd ../include && pwd)
#$(info LIBCLANG_INCLUDE_PATH=$(LIBCLANG_INCLUDE_PATH))
export LDFLAGS="-L$(LIBCLANG_PATH)/c++ -Wl,-rpath,$(LIBCLANG_PATH)/c++"
export CPPFLAGS="-I$(LIBCLANG_INCLUDE_PATH)"
export CC=clang
export CXX=clang
ifeq ($(UNAME_S),Darwin)
export BINDGEN_EXTRA_CLANG_ARGS="-I /Library/Developer/CommandLineTools/usr/include/c++/v1 -I /Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include"
endif
LLVM_VERSION := $(shell "$(LIBCLANG_BIN_PATH)/llvm-config" --version 2>/dev/null)
.PHONY: clang-install
ifeq ($(CLANG_INSTALL),0)
clang-install:
else
.INTERMEDIATE: ./clang-install.sh
./clang-install.sh: curl-check
@echo "Downloading LLVM install script:"
$(CURL_BIN) -fsSL https://apt.llvm.org/llvm.sh > ./clang-install.sh
chmod u+x ./clang-install.sh
ifeq ($(UNAME_S),Windows)
clang-install:
else
ifeq ($(UNAME_S),Darwin)
clang-install: brew-check
@if [ ! -d $(HOMEBREW_CELLAR)/z3/4.12.* ] ; then $(BREW_BIN) install z3 ; else echo "z3 4.12.* is already installed" ; fi
@if [ ! -d $(HOMEBREW_CELLAR)/llvm/16.* ] ; then $(BREW_BIN) install llvm ; else echo "llvm 16.* is already installed" ; fi
@if [ ! -d $(HOMEBREW_CELLAR)/protobuf/23.* ] ; then $(BREW_BIN) install protobuf ; else echo "protobuf 23.* is already installed" ; fi
else # anything else: linux
clang-install: ./clang-install.sh
@echo "Executing LLVM install script"
sudo ./clang-install.sh $(CLANG_MAIN_VERSION_EXPECTED)
@echo "LLVM install script finished successfully"
clang-$(CLANG_MAIN_VERSION_EXPECTED) --version
@echo "LLVM version $(CLANG_MAIN_VERSION_EXPECTED) has been installed"
endif
endif
endif
.PHONY: llvm-check
llvm-check: clang-check
#$(info <--- .make/clang.mk)
endif # _MK_CLANG_MK_