@@ -179,6 +179,19 @@ LLVM_CPPFLAGS += -flto
179
179
LLVM_LDFLAGS += -flto
180
180
endif # LLVM_LTO
181
181
182
+ ifeq ($(BUILD_CUSTOM_LIBCXX ) ,1)
183
+ LLVM_LDFLAGS += -Wl,-rpath,$(build_libdir )
184
+ LLVM_CPPFLAGS += -I$(build_includedir )
185
+ # We don't want to link to libc++ while trying to build it, so we define these
186
+ # flags separately so that we can still pass them to the main LLVM build
187
+ LLVM_LIBCXX_LDFLAGS := -lc++ -lc++abi
188
+ ifeq ($(USEICC ) ,1)
189
+ LLVM_LDFLAGS += -no_cpprt
190
+ endif # USEICC
191
+ else
192
+ LLVM_LIBCXX_LDFLAGS :=
193
+ endif # BUILD_CUSTOM_LIBCXX
194
+
182
195
ifneq ($(LLVM_CXXFLAGS ) ,)
183
196
LLVM_FLAGS += CXXFLAGS="$(LLVM_CXXFLAGS ) "
184
197
LLVM_MFLAGS += CXXFLAGS="$(LLVM_CXXFLAGS ) "
@@ -188,25 +201,16 @@ LLVM_FLAGS += CFLAGS="$(LLVM_CFLAGS)"
188
201
LLVM_MFLAGS += CFLAGS="$(LLVM_CFLAGS ) "
189
202
endif # LLVM_CFLAGS
190
203
191
- ifeq ($(BUILD_CUSTOM_LIBCXX ) ,1)
192
- LLVM_LDFLAGS += -Wl,-R$(build_libdir ) -lc++ -lc++abi
193
- ifeq ($(USEICC ) ,1)
194
- LLVM_LDFLAGS += -no_cpprt
195
- endif # USEICC
196
- endif # BUILD_CUSTOM_LIBCXX
197
-
198
204
ifneq ($(LLVM_CPPFLAGS ) ,)
199
205
LLVM_FLAGS += CPPFLAGS="$(LLVM_CPPFLAGS ) "
200
206
LLVM_MFLAGS += CPPFLAGS="$(LLVM_CPPFLAGS ) "
201
207
endif
202
208
ifneq ($(LLVM_LDFLAGS ) ,)
203
- LLVM_FLAGS += LDFLAGS="$(LLVM_LDFLAGS ) "
204
- LLVM_MFLAGS += LDFLAGS="$(LLVM_LDFLAGS ) "
209
+ LLVM_FLAGS += LDFLAGS="$(LLVM_LDFLAGS ) $( LLVM_LIBCXX_LDFLAGS ) "
210
+ LLVM_MFLAGS += LDFLAGS="$(LLVM_LDFLAGS ) $( LLVM_LIBCXX_LDFLAGS ) "
205
211
endif
206
212
LLVM_CMAKE += -DCMAKE_C_FLAGS="$(LLVM_CPPFLAGS ) $(LLVM_CFLAGS ) " \
207
- -DCMAKE_CXX_FLAGS="$(LLVM_CPPFLAGS ) $(LLVM_CXXFLAGS ) " \
208
- -DCMAKE_EXE_LINKER_FLAGS="$(LLVM_LDFLAGS ) " \
209
- -DCMAKE_SHARED_LINKER_FLAGS="$(LLVM_LDFLAGS ) "
213
+ -DCMAKE_CXX_FLAGS="$(LLVM_CPPFLAGS ) $(LLVM_CXXFLAGS ) "
210
214
211
215
ifeq ($(BUILD_LLVM_CLANG ) ,1)
212
216
LLVM_MFLAGS += OPTIONAL_PARALLEL_DIRS=clang
@@ -275,46 +279,83 @@ LLVM_FLAGS += --with-python="$(shell $(SRCDIR)/tools/find_python2)"
275
279
276
280
ifeq ($(BUILD_CUSTOM_LIBCXX ) ,1)
277
281
282
+ # Take a snapshot of the CMake flags before linking to -lc++ and -lc++abi
283
+ # These are added to the LLVM CMake flags further down
284
+ LLVM_CMAKE_LIBCXX := $(LLVM_CMAKE ) \
285
+ -DCMAKE_EXE_LINKER_FLAGS="$(LLVM_LDFLAGS ) " \
286
+ -DCMAKE_SHARED_LINKER_FLAGS="$(LLVM_LDFLAGS ) "
287
+
278
288
ifeq ($(USEICC ) ,1)
279
289
LIBCXX_EXTRA_FLAGS := -Bstatic -lirc -Bdynamic
280
290
endif
281
291
292
+ # These libraries require unwind.h from the libunwind dependency
293
+ ifeq ($(USE_SYSTEM_LIBUNWIND ) ,0)
294
+ ifeq ($(OS ) ,Darwin)
295
+ BUILT_UNWIND := $(build_prefix ) /manifest/osxunwind
296
+ else
297
+ BUILT_UNWIND := $(build_prefix ) /manifest/unwind
298
+ endif # Darwin
299
+ else
300
+ BUILT_UNWIND :=
301
+ endif # Building libunwind
302
+
282
303
$(LLVM_SRC_DIR ) /projects/libcxx : $(LLVM_LIBCXX_TAR ) | $(LLVM_SRC_DIR ) /source-extracted
283
304
([ ! -d $@ ] && \
284
305
git clone $(LLVM_GIT_URL_LIBCXX ) $@ ) || \
285
306
(cd $@ && \
286
307
git pull --ff-only)
287
- $(LLVM_SRC_DIR ) /projects/libcxx/.git/HEAD : | $(LLVM_SRC_DIR ) /projects/libcxx/.git/HEAD
308
+ $(LLVM_SRC_DIR ) /projects/libcxx/.git/HEAD : | $(LLVM_SRC_DIR ) /projects/libcxx
288
309
$(LLVM_SRC_DIR ) /projects/libcxxabi : $(LLVM_LIBCXXABI_TAR ) | $(LLVM_SRC_DIR ) /source-extracted
289
310
([ ! -d $@ ] && \
290
311
git clone $(LLVM_GIT_URL_LIBCXXABI ) $@ ) || \
291
312
(cd $@ && \
292
313
git pull --ff-only)
293
314
$(LLVM_SRC_DIR ) /projects/libcxxabi/.git/HEAD : | $(LLVM_SRC_DIR ) /projects/libcxxabi
294
- $(LLVM_BUILD_DIR ) /libcxx-build/Makefile : | $(LLVM_SRC_DIR ) /projects/libcxx $(LLVM_SRC_DIR ) /projects/libcxxabi
315
+ $(LLVM_BUILD_DIR ) /libcxx-build/Makefile : | $(LLVM_SRC_DIR ) /projects/libcxx $(LLVM_SRC_DIR ) /projects/libcxxabi $( BUILT_UNWIND )
295
316
mkdir -p $(dir $@ )
296
317
cd $(dir $@ ) && \
297
- $(CMAKE ) -G " Unix Makefiles" $(CMAKE_COMMON ) $(LLVM_CMAKE ) -DLIBCXX_CXX_ABI=libcxxabi -DLIBCXX_CXX_ABI_INCLUDE_PATHS=" $( LLVM_SRC_DIR) /projects/libcxxabi/include" $(LLVM_SRC_DIR ) /projects/libcxx -DCMAKE_SHARED_LINKER_FLAGS=" $( LDFLAGS) -L$( build_libdir) $( LIBCXX_EXTRA_FLAGS) "
298
- $(LLVM_BUILD_DIR ) /libcxxabi-build/Makefile : | $(LLVM_SRC_DIR ) /projects/libcxxabi $(LLVM_SRC_DIR ) /projects/libcxx
318
+ $(CMAKE ) -G " Unix Makefiles" $(CMAKE_COMMON ) $(LLVM_CMAKE_LIBCXX ) -DLIBCXX_CXX_ABI=libcxxabi -DLIBCXX_CXX_ABI_INCLUDE_PATHS=" $( LLVM_SRC_DIR) /projects/libcxxabi/include" $(LLVM_SRC_DIR ) /projects/libcxx -DCMAKE_SHARED_LINKER_FLAGS=" $( LDFLAGS) -L$( build_libdir) $( LIBCXX_EXTRA_FLAGS) "
319
+ $(LLVM_BUILD_DIR ) /libcxxabi-build/Makefile : | $(LLVM_SRC_DIR ) /projects/libcxxabi $(LLVM_SRC_DIR ) /projects/libcxx $( BUILT_UNWIND )
299
320
mkdir -p $(dir $@ )
300
321
cd $(dir $@ ) && \
301
- $(CMAKE ) -G " Unix Makefiles" $(CMAKE_COMMON ) $(LLVM_CMAKE ) -DLLVM_ABI_BREAKING_CHECKS=" WITH_ASSERTS" -DLLVM_PATH=" $( LLVM_SRC_DIR) " $(LLVM_SRC_DIR ) /projects/libcxxabi -DLIBCXXABI_CXX_ABI_LIBRARIES=" $( LIBCXX_EXTRA_FLAGS) " -DCMAKE_CXX_FLAGS=" $( LLVM_CPPFLAGS) $( LLVM_CXXFLAGS) -std=c++11"
322
+ $(CMAKE ) -G " Unix Makefiles" $(CMAKE_COMMON ) $(LLVM_CMAKE_LIBCXX ) -DLLVM_ABI_BREAKING_CHECKS=" WITH_ASSERTS" -DLLVM_PATH=" $( LLVM_SRC_DIR) " $(LLVM_SRC_DIR ) /projects/libcxxabi -DLIBCXXABI_CXX_ABI_LIBRARIES=" $( LIBCXX_EXTRA_FLAGS) " -DCMAKE_CXX_FLAGS=" $( LLVM_CPPFLAGS) $( LLVM_CXXFLAGS) -std=c++11"
302
323
$(LLVM_BUILD_DIR ) /libcxxabi-build/lib/libc++abi.so.1.0 : $(LLVM_BUILD_DIR ) /libcxxabi-build/Makefile $(LLVM_SRC_DIR ) /projects/libcxxabi/.git/HEAD
303
324
$(MAKE ) -C $(LLVM_BUILD_DIR ) /libcxxabi-build
304
325
touch -c $@
305
326
$(build_libdir ) /libc++abi.so.1.0 : $(LLVM_BUILD_DIR ) /libcxxabi-build/lib/libc++abi.so.1.0
306
327
$(MAKE ) -C $(LLVM_BUILD_DIR ) /libcxxabi-build install
307
328
touch -c $@
329
+ # Building this library installs these headers, which breaks other dependencies
330
+ -rm -rf $(build_includedir ) /c++
308
331
$(LLVM_BUILD_DIR ) /libcxx-build/lib/libc++.so.1.0 : $(build_libdir ) /libc++abi.so.1.0 $(LLVM_BUILD_DIR ) /libcxx-build/Makefile $(LLVM_SRC_DIR ) /projects/libcxx/.git/HEAD
309
332
$(MAKE ) -C $(LLVM_BUILD_DIR ) /libcxx-build
310
333
$(build_libdir ) /libc++.so.1.0 : $(LLVM_BUILD_DIR ) /libcxx-build/lib/libc++.so.1.0
311
334
$(MAKE ) -C $(LLVM_BUILD_DIR ) /libcxx-build install
312
335
touch -c $@
336
+ # Building this library installs these headers, which breaks other dependencies
337
+ -rm -rf $(build_includedir ) /c++
313
338
get-libcxx : $(LLVM_SRC_DIR ) /projects/libcxx
314
339
get-libcxxabi : $(LLVM_SRC_DIR ) /projects/libcxxabi
315
340
install-libcxxabi : $(build_libdir ) /libc++abi.so.1.0
316
341
install-libcxx : $(build_libdir ) /libc++.so.1.0
317
- endif
342
+ endif # BUILD_CUSTOM_LIBCXX
343
+
344
+ # We want to be able to clean without having to pass BUILD_CUSTOM_LIBCXX=1, so define these
345
+ # outside of the conditional above
346
+ clean-libcxx :
347
+ -$(MAKE ) -C $(LLVM_BUILD_DIR ) /libcxx-build clean
348
+ clean-libcxxabi :
349
+ -$(MAKE ) -C $(LLVM_BUILD_DIR ) /libcxxabi-build clean
350
+ distclean-libcxx :
351
+ -rm -rf $(LLVM_LIBCXX_TAR ) $(LLVM_SRC_DIR ) /projects/libcxx $(LLVM_BUILD_DIR ) /libcxx-build
352
+ distclean-libcxxabi :
353
+ -rm -rf $(LLVM_LIBCXXABI_TAR ) $(LLVM_SRC_DIR ) /projects/libcxxabi $(LLVM_BUILD_DIR ) /libcxxabi-build
354
+
355
+ # We want to ensure that the libcxx linking flags don't get passed to the libcxx build, since it will
356
+ # error on a fresh build
357
+ LLVM_CMAKE += -DCMAKE_EXE_LINKER_FLAGS="$(LLVM_LDFLAGS ) $(LLVM_LIBCXX_LDFLAGS ) " \
358
+ -DCMAKE_SHARED_LINKER_FLAGS="$(LLVM_LDFLAGS ) $(LLVM_LIBCXX_LDFLAGS ) "
318
359
319
360
ifeq ($(BUILD_CUSTOM_LIBCXX ) ,1)
320
361
LIBCXX_DEPENDENCY := $(build_libdir ) /libc++abi.so.1.0 $(build_libdir ) /libc++.so.1.0
@@ -573,11 +614,11 @@ endif # LLVM_USE_CMAKE
573
614
$(eval $(call staged-install,llvm,llvm-$$(LLVM_VER)/build_$$(LLVM_BUILDTYPE), \
574
615
LLVM_INSTALL,,,))
575
616
576
- clean-llvm :
617
+ clean-llvm : clean-libcxx clean-libcxxabi
577
618
-rm $(LLVM_BUILDDIR_withtype ) /build-configured $(LLVM_BUILDDIR_withtype ) /build-compiled
578
619
-$(MAKE ) -C $(LLVM_BUILDDIR_withtype ) clean
579
620
580
- distclean-llvm :
621
+ distclean-llvm : distclean-libcxx distclean-libcxxabi
581
622
-rm -rf $(LLVM_TAR ) $(LLVM_CLANG_TAR ) \
582
623
$(LLVM_COMPILER_RT_TAR ) $(LLVM_LIBCXX_TAR ) $(LLVM_LLDB_TAR ) \
583
624
$(LLVM_SRC_DIR ) $(LLVM_BUILDDIR_withtype )
0 commit comments