Browse Source

llvm: update to 4.0.0, allow to compile musl with it

Waldemar Brodkorb 7 years ago
parent
commit
e80e2408d4
4 changed files with 44 additions and 12 deletions
  1. 6 0
      mk/vars.mk
  2. 8 2
      toolchain/Makefile
  3. 27 7
      toolchain/llvm/Makefile
  4. 3 3
      toolchain/llvm/Makefile.inc

+ 6 - 0
mk/vars.mk

@@ -102,8 +102,11 @@ endif
 ifeq ($(ADK_BUILD_COMPILER_LLVM),y)
 TARGET_CC:=		clang --target=${GNU_TARGET_NAME} --sysroot=$(STAGING_TARGET_DIR)
 TARGET_CXX:=		clang++ --target=${GNU_TARGET_NAME} --sysroot=$(STAGING_TARGET_DIR)
+TARGET_LDFLAGS:=	-fuse-ld=lld -stdlib=libc++
 endif
 
+# gcc specific
+ifeq ($(ADK_BUILD_COMPILER_GCC),y)
 # for x86_64 x32 ABI we need to extend TARGET_CC/TARGET_CXX
 ifeq ($(ADK_TARGET_ABI_X32),y)
 TARGET_CC+=            $(ADK_TARGET_ABI_CFLAGS)
@@ -238,6 +241,9 @@ TARGET_CFLAGS+=		-mxl-barrel-shift
 TARGET_CXXFLAGS+=	-mxl-barrel-shift
 endif
 
+endif
+# end gcc specific
+
 # add configured compiler flags for optimization
 TARGET_CFLAGS+=		$(ADK_TARGET_CFLAGS_OPT)
 TARGET_CXXFLAGS+=	$(ADK_TARGET_CFLAGS_OPT)

+ 8 - 2
toolchain/Makefile

@@ -12,13 +12,13 @@
 
 include $(ADK_TOPDIR)/rules.mk
 
-TARGETS:=binutils gmp mpfr mpc
-
 ifeq ($(ADK_BUILD_COMPILER_GCC),y)
+TARGETS:=binutils gmp mpfr mpc
 TARGETS+=gcc
 COMPILER:=gcc
 endif
 ifeq ($(ADK_BUILD_COMPILER_LLVM),y)
+TARGETS:=binutils
 TARGETS+=llvm
 COMPILER:=llvm
 endif
@@ -67,7 +67,13 @@ clean: $(TARGETS_CLEAN)
 download: $(DOWNLOAD)
 final: $(FINAL)
 
+
+ifeq ($(ADK_BUILD_COMPILER_LLVM),y)
+$(COMPILER)-configure: binutils-install
+else
 $(COMPILER)-configure: binutils-install gmp-install mpfr-install mpc-install
+endif
+
 ifeq ($(ADK_TARGET_LIB_NEWLIB),y)
 $(CLIB)-install: $(COMPILER)-configure
 else

+ 27 - 7
toolchain/llvm/Makefile

@@ -10,32 +10,52 @@ include ${ADK_TOPDIR}/mk/buildhlp.mk
 BUILD_DIR_INITIAL:=	$(WRKBUILD)-initial
 BUILD_DIR_FINAL:=	$(WRKBUILD)-final
 
+LLVM_VERSION:=4.0.0
+
+ifeq ($(ADK_TARGET_ARCH_ARM),y)
 LLVM_TARGETS:=ARM
+ifeq ($(ADK_TARGET_SOFT_FLOAT),y)
+LLVM_TRIPLE:=arm-linux-eabi
+endif
+ifeq ($(ADK_TARGET_HARD_FLOAT),y)
+LLVM_TRIPLE:=arm-linux-eabihf
+endif
+endif
 
 $(BUILD_DIR_INITIAL)/.configured:
-	(cd $(DL_DIR) && wget http://llvm.org/releases/3.8.0/cfe-3.8.0.src.tar.xz)
-	(cd $(DL_DIR) && wget http://llvm.org/releases/3.8.0/compiler-rt-3.8.0.src.tar.xz)
-	(cd $(WRKBUILD)/tools && tar xvf $(DL_DIR)/cfe-3.8.0.src.tar.xz && mv cfe-3.8.0.src clang)
-	(cd $(WRKBUILD)/projects && tar xvf $(DL_DIR)/compiler-rt-3.8.0.src.tar.xz && mv compiler-rt-3.8.0.src compiler-rt)
+	(cd $(DL_DIR); \
+		for file in cfe lld compiler-rt libcxx libcxxabi; do \
+			if [ ! -f $${file}-$(LLVM_VERSION).src.tar.xz ]; then \
+				wget http://llvm.org/releases/$(LLVM_VERSION)/$${file}-$(LLVM_VERSION).src.tar.xz ; \
+			fi; \
+		done; \
+	) 
+	(cd $(WRKBUILD)/tools && tar xvf $(DL_DIR)/cfe-$(LLVM_VERSION).src.tar.xz && mv cfe-$(LLVM_VERSION).src clang)
+	(cd $(WRKBUILD)/tools && tar xvf $(DL_DIR)/lld-$(LLVM_VERSION).src.tar.xz && mv lld-$(LLVM_VERSION).src lld)
+	(cd $(WRKBUILD)/projects && tar xvf $(DL_DIR)/compiler-rt-$(LLVM_VERSION).src.tar.xz && mv compiler-rt-$(LLVM_VERSION).src compiler-rt)
+	(cd $(WRKBUILD)/projects && tar xvf $(DL_DIR)/libcxx-$(LLVM_VERSION).src.tar.xz && mv libcxx-$(LLVM_VERSION).src libcxx)
+	(cd $(WRKBUILD)/projects && tar xvf $(DL_DIR)/libcxxabi-$(LLVM_VERSION).src.tar.xz && mv libcxxabi-$(LLVM_VERSION).src libcxxabi)
 	mkdir -p $(BUILD_DIR_INITIAL)
 	cd $(BUILD_DIR_INITIAL); \
 		PATH='$(HOST_PATH)' \
 		cmake -DCMAKE_BUILD_TYPE=Release \
 			-DCMAKE_INSTALL_PREFIX=$(TOOLCHAIN_DIR)/usr \
-			-DLLVM_DEFAULT_TARGET_TRIPLE="arm-none-eabi" \
 			-DCMAKE_CXX_FLAGS="-std=c++11" \
+			-DLLVM_ENABLE_EH=ON \
+			-DLLVM_ENABLE_RTTI=ON \
+			-DLLVM_DEFAULT_TARGET_TRIPLE=$(LLVM_TRIPLE) \
 			-DLLVM_TARGETS_TO_BUILD=$(LLVM_TARGETS) \
 			$(WRKBUILD)
 	touch $@
 
 $(BUILD_DIR_INITIAL)/.compiled: $(BUILD_DIR_INITIAL)/.configured
 	PATH='$(TARGET_PATH)' \
-		$(MAKE) -C $(BUILD_DIR_INITIAL) all
+		$(MAKE) -j$(ADK_MAKE_JOBS) -C $(BUILD_DIR_INITIAL) all
 	touch $@
 
 $(WRKBUILD)/.configured: $(BUILD_DIR_INITIAL)/.compiled
 	PATH='$(TARGET_PATH)' \
-		$(MAKE) -C $(BUILD_DIR_INITIAL) install
+		$(MAKE) -j$(ADK_MAKE_JOBS) -C $(BUILD_DIR_INITIAL) install
 	touch $@
 
 $(WRKBUILD)/.compiled:

+ 3 - 3
toolchain/llvm/Makefile.inc

@@ -2,9 +2,9 @@
 # material, please see the LICENCE file in the top-level directory.
 
 PKG_NAME:=		llvm
-PKG_VERSION:=		3.8.0
-PKG_HASH:=		555b028e9ee0f6445ff8f949ea10e9cd8be0d084840e21fbbe1d31d51fc06e46
-PKG_SITES:=		http://llvm.org/releases/3.8.0/
+PKG_VERSION:=		4.0.0
+PKG_HASH:=		8d10511df96e73b8ff9e7abbfb4d4d432edbdbe965f1f4f07afaf370b8a533be
+PKG_SITES:=		http://llvm.org/releases/4.0.0/
 PKG_RELEASE:=		1
 DISTFILES:=		${PKG_NAME}-${PKG_VERSION}.src.tar.xz
 WRKDIST=		${WRKDIR}/${PKG_NAME}-${PKG_VERSION}.src