1
- JULIA_SRC := $(subst \,/,$(BASE_JULIA_SRC ) )
2
- JULIA_BIN := $(subst \,/,$(BASE_JULIA_BIN ) )
1
+ # Cxx source build
2
+ # download sources
3
+ LLVM_VER := 6.0.1
4
+ LLVM_URL_PREFIX := http://releases.llvm.org/$(LLVM_VER )
5
+ LLVM_TAR := llvm-$(LLVM_VER ) .src.tar.xz
6
+ CLANG_TAR := cfe-$(LLVM_VER ) .src.tar.xz
7
+ COMPILER_RT_TAR := compiler-rt-$(LLVM_VER ) .src.tar.xz
8
+ LIBCXX_TAR := libcxx-$(LLVM_VER ) .src.tar.xz
9
+ LIBCXXABI_TAR := libcxxabi-$(LLVM_VER ) .src.tar.xz
10
+ POLLY_TAR := polly-$(LLVM_VER ) .src.tar.xz
11
+ LIBUNWIND_TAR := libunwind-$(LLVM_VER ) .src.tar.xz
12
+ LLD_TAR := lld-$(LLVM_VER ) .src.tar.xz
13
+
14
+ TIMEOUT := 180
15
+ CURL := curl -fkL --connect-timeout $(TIMEOUT ) -y $(TIMEOUT )
16
+
17
+ usr/download :
18
+ @[ -d usr ] || mkdir usr
19
+ mkdir -p $@
3
20
4
- ifeq ($(LLVM_VER ) ,)
5
- BUILDROOT =$(JULIA_BIN ) /../..
6
- include $(JULIA_SRC ) /deps/Versions.make
7
- ifeq (exists, $(shell [ -e $(BUILDROOT ) /Make.user ] && echo exists ) )
8
- include $(BUILDROOT ) /Make.user
9
- endif
10
- endif
11
- include Make.inc
21
+ LLVM_TARS := $(LLVM_TAR ) $(CLANG_TAR ) $(COMPILER_RT_TAR ) $(LIBCXX_TAR ) $(LIBCXXABI_TAR ) $(POLLY_TAR ) $(LIBUNWIND_TAR ) $(LLD_TAR )
12
22
13
- LLVM_VER_MAJ: =$(word 1, $(subst ., ,$(LLVM_VER ) ) )
14
- LLVM_VER_MIN: =$(word 2, $(subst ., ,$(LLVM_VER ) ) )
15
- # define a "short" LLVM version for easy comparisons
16
- ifeq ($(LLVM_VER ) ,svn)
17
- LLVM_VER_SHORT: =svn
18
- else
19
- LLVM_VER_SHORT: =$(LLVM_VER_MAJ ) .$(LLVM_VER_MIN )
20
- endif
21
- LLVM_VER_PATCH: =$(word 3, $(subst ., ,$(LLVM_VER ) ) )
22
- ifeq ($(LLVM_VER_PATCH ) ,)
23
- LLVM_VER_PATCH := 0
24
- endif
23
+ llvm_tars : usr/download
24
+ @for tar in $(LLVM_TARS ) ; do \
25
+ if [ -e $< /$$ tar ]; then \
26
+ echo "$$tar already exists, please delete it manually if you'd like to re-download it."; \
27
+ else \
28
+ $(CURL) -o $</$$tar $(LLVM_URL_PREFIX)/$$tar ; \
29
+ fi \
30
+ done
25
31
26
- ifeq ($(LLVM_VER_SHORT ) ,$(filter $(LLVM_VER_SHORT ) ,3.3 3.4 3.5 3.6 3.7 3.8) )
27
- LLVM_USE_CMAKE := 0
28
- else
29
- LLVM_USE_CMAKE := 1
30
- endif
32
+ # unzip
33
+ usr/src : usr/download
34
+ mkdir -p $@
31
35
32
- all : usr/lib/libcxxffi.$(SHLIB_EXT ) usr/lib/libcxxffi-debug.$(SHLIB_EXT ) build/clang_constants.jl
36
+ llvm-$(LLVM_VER ) : usr/src llvm_tars
37
+ @[ -d $< /$@ ] || mkdir -p $< /$@
38
+ tar -C $< /$@ --strip-components=1 -xf usr/download/$(LLVM_TAR )
39
+ @[ -d $< /$@ /tools/clang ] || mkdir -p $< /$@ /tools/clang
40
+ tar -C $< /$@ /tools/clang --strip-components=1 -xf usr/download/$(CLANG_TAR )
41
+ @[ -d $< /$@ /tools/polly ] || mkdir -p $< /$@ /tools/polly
42
+ tar -C $< /$@ /tools/polly --strip-components=1 -xf usr/download/$(POLLY_TAR )
43
+ @[ -d $< /$@ /tools/lld ] || mkdir -p $< /$@ /tools/lld
44
+ tar -C $< /$@ /tools/lld --strip-components=1 -xf usr/download/$(LLD_TAR )
45
+ @[ -d $< /$@ /projects/compiler-rt ] || mkdir -p $< /$@ /projects/compiler-rt
46
+ tar -C $< /$@ /projects/compiler-rt --strip-components=1 -xf usr/download/$(COMPILER_RT_TAR )
47
+ @[ -d $< /$@ /projects/libcxx ] || mkdir -p $< /$@ /projects/libcxx
48
+ tar -C $< /$@ /projects/libcxx --strip-components=1 -xf usr/download/$(LIBCXX_TAR )
49
+ @[ -d $< /$@ /projects/libcxxabi ] || mkdir -p $< /$@ /projects/libcxxabi
50
+ tar -C $< /$@ /projects/libcxxabi --strip-components=1 -xf usr/download/$(LIBCXXABI_TAR )
51
+ @[ -d $< /$@ /projects/libunwind ] || mkdir -p $< /$@ /projects/libunwind
52
+ tar -C $< /$@ /projects/libunwind --strip-components=1 -xf usr/download/$(LIBUNWIND_TAR )
53
+
54
+ # apply patches
55
+ llvm-patched : llvm-$(LLVM_VER )
56
+ cd usr/src/$< && \
57
+ for p in ../../../llvm_patches/* .patch; do \
58
+ echo " Applying patch $$ p" ; \
59
+ patch -p1 < $$ p ; \
60
+ done
61
+
62
+ # build libcxxffi
63
+ include Make.inc
64
+
65
+ JULIA_SRC := $(subst \,/,$(BASE_JULIA_SRC ) )
66
+ JULIA_BIN := $(subst \,/,$(BASE_JULIA_BIN ) )
33
67
34
68
ifeq ($(OLD_CXX_ABI ) ,1)
35
69
CXX_ABI_SETTING=-D_GLIBCXX_USE_CXX11_ABI =0
36
70
else
37
71
CXX_ABI_SETTING=-D_GLIBCXX_USE_CXX11_ABI =1
38
72
endif
39
73
40
- CXXJL_CPPFLAGS = -I$(JULIA_SRC ) /src/support -I$(BASE_JULIA_BIN ) /../include
74
+ JULIA_SOURCE_INCLUDE_DIRS := $(JULIA_SRC ) /src/support
75
+ JULIA_INCLUDE_DIRS := $(JULIA_BIN ) /../include
76
+ CLANG_SOURCE_INCLUDE_DIRS := usr/src/llvm-$(LLVM_VER ) /tools/clang/include
77
+ CLANG_SOURCE_INCLUDE_DIRS += usr/src/llvm-$(LLVM_VER ) /tools/clang/lib
78
+ CLANG_INCLUDE_DIRS := $(JULIA_BIN ) /../include $(JULIA_BIN ) /../include/clang
79
+ INCLUDE_DIRS := $(JULIA_SOURCE_INCLUDE_DIRS ) $(JULIA_INCLUDE_DIRS ) $(CLANG_SOURCE_INCLUDE_DIRS ) $(CLANG_INCLUDE_DIRS )
80
+ CXXJL_CPPFLAGS = $(addprefix -I, $(INCLUDE_DIRS ) )
41
81
42
- ifeq ($(JULIA_BINARY_BUILD ) ,1)
43
- LIBDIR := $(BASE_JULIA_BIN ) /../lib/julia
44
- else
45
- LIBDIR := $(BASE_JULIA_BIN ) /../lib
46
- endif
47
-
48
- CLANG_LIBS = clangFrontendTool clangBasic clangLex clangDriver clangFrontend clangParse \
49
- clangAST clangASTMatchers clangSema clangAnalysis clangEdit \
50
- clangRewriteFrontend clangRewrite clangSerialization clangStaticAnalyzerCheckers \
51
- clangStaticAnalyzerCore clangStaticAnalyzerFrontend clangTooling clangToolingCore \
52
- clangCodeGen clangARCMigrate clangFormat
53
-
54
- ifneq ($(PREBUILT_CI_BINARIES ) ,1)
55
- # If clang is not built by base julia, build it ourselves
56
- ifeq ($(BUILD_LLVM_CLANG ) ,)
57
- ifeq ($(LLVM_VER ) ,svn)
58
- $(error For julia built against llvm-svn, please built clang in tree)
59
- endif
60
-
61
- LLVM_TAR_EXT: =$(LLVM_VER ) .src.tar.xz
62
- LLVM_CLANG_TAR: =src/cfe-$(LLVM_TAR_EXT )
63
- LLVM_SRC_TAR: =src/llvm-$(LLVM_TAR_EXT )
64
- LLVM_COMPILER_RT_TAR: =src/compiler-rt-$(LLVM_TAR_EXT )
65
- LLVM_SRC_URL := http://releases.llvm.org/$(LLVM_VER )
66
-
67
- src :
68
- mkdir $@
69
-
70
- # Also build a new copy of LLVM, so we get headers, tools, etc.
71
- ifeq ($(JULIA_BINARY_BUILD ) ,1)
72
- LLVM_SRC_DIR := src/llvm-$(LLVM_VER )
73
- include llvm-patches/apply-llvm-patches.mk
74
- $(LLVM_SRC_TAR ) : | src
75
- curl -Lo $@ $(LLVM_SRC_URL ) /$(notdir $@ )
76
- src/llvm-$(LLVM_VER ) : $(LLVM_SRC_TAR )
77
- mkdir -p $@
78
- tar -C $@ --strip-components=1 -xf $<
79
- build/llvm-$(LLVM_VER ) /Makefile : src/llvm-$(LLVM_VER ) $(LLVM_PATCH_LIST )
80
- mkdir -p $(dir $@ )
81
- cd $(dir $@ ) && \
82
- cmake -G " Unix Makefiles" -DLLVM_TARGETS_TO_BUILD=" X86" \
83
- -DLLVM_BUILD_LLVM_DYLIB=ON -DCMAKE_BUILD_TYPE=Release \
84
- -DLLVM_LINK_LLVM_DYLIB=ON -DLLVM_ENABLE_THREADS=OFF \
85
- -DCMAKE_CXX_COMPILER_ARG1=" $( CXX_ABI_SETTING) " \
86
- ../../src/llvm-$(LLVM_VER )
87
- build/llvm-$(LLVM_VER ) /bin/llvm-config : build/llvm-$(LLVM_VER ) /Makefile
88
- cd build/llvm-$(LLVM_VER ) && $(MAKE )
89
- LLVM_HEADER_DIRS = src/llvm-$(LLVM_VER ) /include build/llvm-$(LLVM_VER ) /include
90
- CLANG_CMAKE_DEP = build/llvm-$(LLVM_VER ) /bin/llvm-config
91
- LLVM_CONFIG = ../llvm-$(LLVM_VER ) /bin/llvm-config
92
- else
93
- CLANG_CMAKE_OPTS += -DLLVM_TABLEGEN_EXE=$(BASE_JULIA_BIN ) /../tools/llvm-tblgen
94
- endif
95
-
96
- JULIA_LDFLAGS = -L$(BASE_JULIA_BIN ) /../lib -L$(BASE_JULIA_BIN ) /../lib/julia
82
+ CLANG_LIBS := clangFrontendTool clangBasic clangLex clangDriver clangFrontend clangParse
83
+ CLANG_LIBS += clangAST clangASTMatchers clangSema clangAnalysis clangEdit
84
+ CLANG_LIBS += clangRewriteFrontend clangRewrite clangSerialization clangStaticAnalyzerCheckers
85
+ CLANG_LIBS += clangStaticAnalyzerCore clangStaticAnalyzerFrontend clangTooling clangToolingCore
86
+ CLANG_LIBS += clangCodeGen clangARCMigrate clangFormat
87
+ LINKED_LIBS = $(addprefix -l,$(CLANG_LIBS ) )
97
88
98
- $(LLVM_CLANG_TAR ) : | src
99
- curl -Lo $@ $(LLVM_SRC_URL ) /$(notdir $@ )
100
- $(LLVM_COMPILER_RT_TAR ) : | src
101
- $(JLDOWNLOAD ) $@ $(LLVM_SRC_URL ) /$(notdir $@ )
102
- src/clang-$(LLVM_VER ) : $(LLVM_CLANG_TAR )
103
- mkdir -p $@
104
- tar -C $@ --strip-components=1 -xf $<
105
- build/clang-$(LLVM_VER ) /Makefile : src/clang-$(LLVM_VER ) $(CLANG_CMAKE_DEP )
106
- mkdir -p $(dir $@ )
107
- cd $(dir $@ ) && \
108
- cmake -G " Unix Makefiles" \
109
- -DLLVM_BUILD_LLVM_DYLIB=ON -DCMAKE_BUILD_TYPE=Release \
110
- -DLLVM_LINK_LLVM_DYLIB=ON -DLLVM_ENABLE_THREADS=OFF \
111
- -DCMAKE_CXX_COMPILER_ARG1 ="$(CXX_ABI_SETTING ) " \
112
- -DLLVM_CONFIG=$(LLVM_CONFIG ) $(CLANG_CMAKE_OPTS ) ../../src/clang-$(LLVM_VER )
113
- build/clang-$(LLVM_VER ) /lib/libclangCodeGen.a : build/clang-$(LLVM_VER ) /Makefile
114
- cd build/clang-$(LLVM_VER ) && $(MAKE )
115
- LIB_DEPENDENCY += build/clang-$(LLVM_VER ) /lib/libclangCodeGen.a
116
- JULIA_LDFLAGS += -Lbuild/clang-$(LLVM_VER ) /lib
117
- CXXJL_CPPFLAGS += -Isrc/clang-$(LLVM_VER ) /lib -Ibuild/clang-$(LLVM_VER ) /include \
118
- -Isrc/clang-$(LLVM_VER ) /include
119
- else # BUILD_LLVM_CLANG
120
- JULIA_LDFLAGS = -L$(BASE_JULIA_BIN ) /../lib -L$(BASE_JULIA_BIN ) /../lib/julia
121
- CXXJL_CPPFLAGS += -I$(JULIA_SRC ) /deps/srccache/llvm-$(LLVM_VER ) /tools/clang/lib \
122
- -I$(JULIA_SRC ) /deps/llvm-$(LLVM_VER ) /tools/clang/lib
123
- endif
124
- else
125
- LLVM_SRC_DIR := src/llvm-$(LLVM_VER )
126
- CLANG_CMAKE_DEP = build/llvm-$(LLVM_VER ) /bin/llvm-config
127
- LLVM_CONFIG = ../llvm-$(LLVM_VER ) /bin/llvm-config
128
- JULIA_LDFLAGS += -Lbuild/clang-$(LLVM_VER ) /lib
129
- LLVM_HEADER_DIRS = src/llvm-$(LLVM_VER ) /include build/llvm-$(LLVM_VER ) /include
130
- CXXJL_CPPFLAGS += -Isrc/clang-$(LLVM_VER ) /lib -Ibuild/clang-$(LLVM_VER ) /include \
131
- -Isrc/clang-$(LLVM_VER ) /include
132
- JULIA_LDFLAGS += -L$(BASE_JULIA_BIN ) /../lib -L$(BASE_JULIA_BIN ) /../lib/julia
133
- endif # PREBUILD_CI_BINARIES
134
-
135
- CXX_LLVM_VER := $(LLVM_VER )
136
- ifeq ($(CXX_LLVM_VER ) ,svn)
137
- CXX_LLVM_VER := $(shell $(BASE_JULIA_BIN ) /../tools/llvm-config --version)
89
+ LIB_DIRS := $(JULIA_BIN ) /../lib
90
+ LIB_DIRS += $(JULIA_BIN ) /../lib/julia
91
+ ifneq ($(USEMSVC ) , 1)
92
+ LIB_DIRS += $(JULIA_BIN )
138
93
endif
94
+ JULIA_LDFLAGS = $(addprefix -L,$(LIB_DIRS ) )
95
+ # JULIA_LDFLAGS += -Lbuild/clang-$(LLVM_VER)/lib
139
96
140
- ifneq ($(LLVM_HEADER_DIRS ) ,)
141
- CXXJL_CPPFLAGS += $(addprefix -I,$(LLVM_HEADER_DIRS ) )
142
- endif
143
97
144
98
FLAGS = -std=c++11 $(CPPFLAGS ) $(CFLAGS ) $(CXXJL_CPPFLAGS )
145
99
@@ -149,58 +103,42 @@ else
149
103
CPP_STDOUT := $(CPP ) -E
150
104
endif
151
105
152
- ifeq ($(LLVM_USE_CMAKE ) ,1)
153
106
LLVM_LIB_NAME := LLVM
154
- else ifeq ($(LLVM_VER),svn)
155
- LLVM_LIB_NAME := LLVM
156
- else
157
- LLVM_LIB_NAME := LLVM-$(CXX_LLVM_VER )
158
- endif
159
107
LDFLAGS += -l$(LLVM_LIB_NAME )
108
+ LIB_DEPENDENCY += $(JULIA_BIN ) /../lib/lib$(LLVM_LIB_NAME ) .$(SHLIB_EXT )
109
+ LLVM_EXTRA_CPPFLAGS = -DLLVM_NDEBUG
110
+ JULIA_LIB := $(JULIA_BIN ) /../lib/libjulia.$(SHLIB_EXT )
111
+ JULIA_DEBUG_LIB := $(JULIA_BIN ) /../lib/libjulia-debug.$(SHLIB_EXT )
160
112
161
- LIB_DEPENDENCY += $( LIBDIR ) /lib$( LLVM_LIB_NAME ) .$(SHLIB_EXT )
113
+ all : usr /lib/libcxxffi. $( SHLIB_EXT ) usr/lib/libcxxffi-debug .$(SHLIB_EXT ) usr/clang_constants.jl
162
114
163
- usr/lib :
164
- @mkdir -p $(CURDIR ) /usr/lib/
165
-
166
- build :
167
- @mkdir -p $(CURDIR ) /build
168
-
169
- LLVM_EXTRA_CPPFLAGS =
170
- ifneq ($(LLVM_ASSERTIONS ) ,1)
171
- LLVM_EXTRA_CPPFLAGS += -DLLVM_NDEBUG
172
- endif
115
+ usr/lib : usr/src
116
+ mkdir $@
173
117
174
- build/ bootstrap.o : ../src/bootstrap.cpp BuildBootstrap.Makefile $(LIB_DEPENDENCY ) | build
118
+ usr/lib/ bootstrap.o : ../src/bootstrap.cpp BuildBootstrap.Makefile $(LIB_DEPENDENCY ) llvm-patched | usr/lib
175
119
@$(call PRINT_CC, $(CXX ) $(CXX_ABI_SETTING ) -fno-rtti -DLIBRARY_EXPORTS -fPIC -O0 -g $(FLAGS ) $(LLVM_EXTRA_CPPFLAGS ) -c ../src/bootstrap.cpp -o $@ )
176
120
177
-
178
- LINKED_LIBS = $(addprefix -l,$(CLANG_LIBS ) )
179
- ifeq ($(BUILD_LLDB ) ,1)
180
- LINKED_LIBS += $(LLDB_LIBS )
181
- endif
182
-
183
- ifneq (,$(wildcard $(BASE_JULIA_BIN ) /../lib/libjulia.$(SHLIB_EXT ) ) )
184
- usr/lib/libcxxffi.$(SHLIB_EXT ) : build/bootstrap.o $(LIB_DEPENDENCY ) | usr/lib
121
+ ifneq (,$(wildcard $(JULIA_LIB ) ) )
122
+ usr/lib/libcxxffi.$(SHLIB_EXT ) : usr/lib/bootstrap.o $(LIB_DEPENDENCY ) | usr/lib
185
123
@$(call PRINT_LINK, $(CXX ) -shared -fPIC $(JULIA_LDFLAGS ) -ljulia $(LDFLAGS ) -o $@ $(WHOLE_ARCHIVE ) $(LINKED_LIBS ) $(NO_WHOLE_ARCHIVE ) $< )
186
124
else
187
125
usr/lib/libcxxffi.$(SHLIB_EXT ) :
188
126
@echo " Not building release library because corresponding julia RELEASE library does not exist."
189
127
@echo " To build, simply run the build again once the library at"
190
- @echo $(build_libdir ) /libjulia. $( SHLIB_EXT )
128
+ @echo $(JULIA_LIB )
191
129
@echo " has been built."
192
130
endif
193
131
194
- ifneq (,$(wildcard $(BASE_JULIA_BIN ) /../lib/libjulia-debug. $( SHLIB_EXT ) ) )
132
+ ifneq (,$(wildcard $(JULIA_DEBUG_LIB ) ) )
195
133
usr/lib/libcxxffi-debug.$(SHLIB_EXT ) : build/bootstrap.o $(LIB_DEPENDENCY ) | usr/lib
196
134
@$(call PRINT_LINK, $(CXX ) -shared -fPIC $(JULIA_LDFLAGS ) -ljulia-debug $(LDFLAGS ) -o $@ $(WHOLE_ARCHIVE ) $(LINKED_LIBS ) $(NO_WHOLE_ARCHIVE ) $< )
197
135
else
198
136
usr/lib/libcxxffi-debug.$(SHLIB_EXT ) :
199
137
@echo " Not building debug library because corresponding julia DEBUG library does not exist."
200
138
@echo " To build, simply run the build again once the library at"
201
- @echo $(build_libdir ) /libjulia-debug. $( SHLIB_EXT )
139
+ @echo $(JULIA_DEBUG_LIB )
202
140
@echo " has been built."
203
141
endif
204
142
205
- build /clang_constants.jl : ../src/cenumvals.jl.h usr/lib/libcxxffi.$(SHLIB_EXT )
143
+ usr /clang_constants.jl : ../src/cenumvals.jl.h usr/lib/libcxxffi.$(SHLIB_EXT )
206
144
@$(call PRINT_PERL, $(CPP_STDOUT ) $(CXXJL_CPPFLAGS ) -DJULIA ../src/cenumvals.jl.h > $@ )
0 commit comments