2018-04-11 18:14:49 +02:00
|
|
|
################################################################################
|
|
|
|
#
|
|
|
|
# clang
|
|
|
|
#
|
|
|
|
################################################################################
|
|
|
|
|
2019-10-24 22:22:11 +02:00
|
|
|
# LLVM, Clang and lld should be version bumped together
|
2022-03-23 00:22:15 +01:00
|
|
|
CLANG_VERSION_MAJOR = 11
|
|
|
|
CLANG_VERSION = $(CLANG_VERSION_MAJOR).1.0
|
2020-01-06 22:47:42 +01:00
|
|
|
CLANG_SITE = https://github.com/llvm/llvm-project/releases/download/llvmorg-$(CLANG_VERSION)
|
|
|
|
CLANG_SOURCE = clang-$(CLANG_VERSION).src.tar.xz
|
2019-10-05 19:04:11 +02:00
|
|
|
CLANG_LICENSE = Apache-2.0 with exceptions
|
2018-04-11 18:14:49 +02:00
|
|
|
CLANG_LICENSE_FILES = LICENSE.TXT
|
2020-12-04 16:46:01 +01:00
|
|
|
CLANG_CPE_ID_VENDOR = llvm
|
2018-04-11 18:14:49 +02:00
|
|
|
CLANG_SUPPORTS_IN_SOURCE_BUILD = NO
|
|
|
|
CLANG_INSTALL_STAGING = YES
|
|
|
|
|
|
|
|
HOST_CLANG_DEPENDENCIES = host-llvm host-libxml2
|
|
|
|
CLANG_DEPENDENCIES = llvm host-clang
|
|
|
|
|
2019-04-15 21:14:01 +02:00
|
|
|
# LLVM >= 9.0 will soon require C++14 support, building llvm 8.x using a
|
|
|
|
# toolchain using gcc < 5.1 gives an error but actually still works. Setting
|
|
|
|
# this option makes it still build with gcc >= 4.8.
|
|
|
|
# https://reviews.llvm.org/D57264
|
|
|
|
HOST_CLANG_CONF_OPTS += -DLLVM_TEMPORARILY_ALLOW_OLD_TOOLCHAIN=ON
|
|
|
|
CLANG_CONF_OPTS += -DLLVM_TEMPORARILY_ALLOW_OLD_TOOLCHAIN=ON
|
|
|
|
|
2018-04-11 18:14:49 +02:00
|
|
|
# This option is needed, otherwise multiple shared libs
|
|
|
|
# (libclangAST.so, libclangBasic.so, libclangFrontend.so, etc.) will
|
|
|
|
# be generated. As a final shared lib containing all these components
|
|
|
|
# (libclang.so) is also generated, this resulted in the following
|
|
|
|
# error when trying to use tools that use libclang:
|
|
|
|
# $ CommandLine Error: Option 'track-memory' registered more than once!
|
|
|
|
# $ LLVM ERROR: inconsistency in registered CommandLine options
|
|
|
|
# By setting BUILD_SHARED_LIBS to OFF, we generate multiple static
|
|
|
|
# libraries (the same way as host's clang build) and finally
|
|
|
|
# libclang.so to be installed on the target.
|
2020-09-16 12:02:10 +02:00
|
|
|
HOST_CLANG_CONF_OPTS += -DBUILD_SHARED_LIBS=OFF
|
2018-04-11 18:14:49 +02:00
|
|
|
CLANG_CONF_OPTS += -DBUILD_SHARED_LIBS=OFF
|
|
|
|
|
|
|
|
# Default is Debug build, which requires considerably more disk space
|
|
|
|
# and build time. Release build is selected for host and target
|
|
|
|
# because the linker can run out of memory in Debug mode.
|
|
|
|
HOST_CLANG_CONF_OPTS += -DCMAKE_BUILD_TYPE=Release
|
|
|
|
CLANG_CONF_OPTS += -DCMAKE_BUILD_TYPE=Release
|
|
|
|
|
|
|
|
CLANG_CONF_OPTS += -DCMAKE_CROSSCOMPILING=1
|
|
|
|
|
|
|
|
# We need to build tools because libclang is a tool
|
|
|
|
HOST_CLANG_CONF_OPTS += -DCLANG_BUILD_TOOLS=ON
|
|
|
|
CLANG_CONF_OPTS += -DCLANG_BUILD_TOOLS=ON
|
|
|
|
|
|
|
|
HOST_CLANG_CONF_OPTS += \
|
|
|
|
-DCLANG_BUILD_EXAMPLES=OFF \
|
|
|
|
-DCLANG_INCLUDE_DOCS=OFF \
|
|
|
|
-DCLANG_INCLUDE_TESTS=OFF
|
|
|
|
|
|
|
|
CLANG_CONF_OPTS += \
|
|
|
|
-DCLANG_BUILD_EXAMPLES=OFF \
|
|
|
|
-DCLANG_INCLUDE_DOCS=OFF \
|
|
|
|
-DCLANG_INCLUDE_TESTS=OFF
|
|
|
|
|
2019-04-09 08:07:23 +02:00
|
|
|
HOST_CLANG_CONF_OPTS += -DLLVM_DIR=$(HOST_DIR)/lib/cmake/llvm \
|
2018-10-21 14:21:35 +02:00
|
|
|
-DCLANG_DEFAULT_LINKER=$(TARGET_LD)
|
2019-04-09 08:07:23 +02:00
|
|
|
CLANG_CONF_OPTS += -DLLVM_DIR=$(STAGING_DIR)/usr/lib/cmake/llvm \
|
2018-09-24 00:04:59 +02:00
|
|
|
-DCLANG_TABLEGEN:FILEPATH=$(HOST_DIR)/bin/clang-tblgen \
|
|
|
|
-DLLVM_TABLEGEN_EXE:FILEPATH=$(HOST_DIR)/bin/llvm-tblgen
|
2018-04-11 18:14:49 +02:00
|
|
|
|
|
|
|
# Clang can't be used as compiler on the target since there are no
|
|
|
|
# development files (headers) and other build tools. So remove clang
|
2018-05-02 12:04:38 +02:00
|
|
|
# binaries and some other unnecessary files from target.
|
|
|
|
CLANG_FILES_TO_REMOVE = \
|
|
|
|
/usr/bin/clang* \
|
|
|
|
/usr/bin/c-index-test \
|
|
|
|
/usr/bin/git-clang-format \
|
|
|
|
/usr/bin/scan-build \
|
|
|
|
/usr/bin/scan-view \
|
|
|
|
/usr/libexec/c++-analyzer \
|
|
|
|
/usr/libexec/ccc-analyzer \
|
|
|
|
/usr/share/clang \
|
|
|
|
/usr/share/opt-viewer \
|
|
|
|
/usr/share/scan-build \
|
|
|
|
/usr/share/scan-view \
|
|
|
|
/usr/share/man/man1/scan-build.1 \
|
|
|
|
/usr/lib/clang
|
|
|
|
|
|
|
|
define CLANG_CLEANUP_TARGET
|
|
|
|
rm -rf $(addprefix $(TARGET_DIR),$(CLANG_FILES_TO_REMOVE))
|
2018-04-11 18:14:49 +02:00
|
|
|
endef
|
2018-05-02 12:04:38 +02:00
|
|
|
CLANG_POST_INSTALL_TARGET_HOOKS += CLANG_CLEANUP_TARGET
|
2018-04-11 18:14:49 +02:00
|
|
|
|
|
|
|
# clang-tblgen is not installed by default, however it is necessary
|
|
|
|
# for cross-compiling clang
|
|
|
|
define HOST_CLANG_INSTALL_CLANG_TBLGEN
|
|
|
|
$(INSTALL) -D -m 0755 $(HOST_CLANG_BUILDDIR)/bin/clang-tblgen \
|
2018-09-24 00:04:59 +02:00
|
|
|
$(HOST_DIR)/bin/clang-tblgen
|
2018-04-11 18:14:49 +02:00
|
|
|
endef
|
|
|
|
HOST_CLANG_POST_INSTALL_HOOKS = HOST_CLANG_INSTALL_CLANG_TBLGEN
|
|
|
|
|
2018-05-11 13:47:52 +02:00
|
|
|
# This option must be enabled to link libclang dynamically against libLLVM.so
|
|
|
|
HOST_CLANG_CONF_OPTS += -DLLVM_LINK_LLVM_DYLIB=ON
|
|
|
|
CLANG_CONF_OPTS += -DLLVM_LINK_LLVM_DYLIB=ON
|
|
|
|
|
2018-05-30 13:46:51 +02:00
|
|
|
# Prevent clang binaries from linking against LLVM static libs
|
|
|
|
HOST_CLANG_CONF_OPTS += -DLLVM_DYLIB_COMPONENTS=all
|
|
|
|
CLANG_CONF_OPTS += -DLLVM_DYLIB_COMPONENTS=all
|
|
|
|
|
2022-03-23 00:22:22 +01:00
|
|
|
# Help host-clang to find our external toolchain, use a relative path from the clang
|
|
|
|
# installation directory to the external toolchain installation directory in order to
|
|
|
|
# not hardcode the toolchain absolute path.
|
|
|
|
ifeq ($(BR2_TOOLCHAIN_EXTERNAL),y)
|
|
|
|
HOST_CLANG_CONF_OPTS += -DGCC_INSTALL_PREFIX:PATH=`realpath --relative-to=$(HOST_DIR)/bin/ $(TOOLCHAIN_EXTERNAL_INSTALL_DIR)`
|
|
|
|
endif
|
|
|
|
|
2022-03-23 00:22:23 +01:00
|
|
|
define HOST_CLANG_INSTALL_WRAPPER_AND_SIMPLE_SYMLINKS
|
|
|
|
$(Q)cd $(HOST_DIR)/bin; \
|
|
|
|
rm -f clang-$(CLANG_VERSION_MAJOR).br_real; \
|
|
|
|
mv clang-$(CLANG_VERSION_MAJOR) clang-$(CLANG_VERSION_MAJOR).br_real; \
|
|
|
|
ln -sf toolchain-wrapper-clang clang-$(CLANG_VERSION_MAJOR); \
|
|
|
|
for i in clang clang++ clang-cl clang-cpp; do \
|
|
|
|
ln -snf toolchain-wrapper-clang $$i; \
|
|
|
|
ln -snf clang-$(CLANG_VERSION_MAJOR).br_real $$i.br_real; \
|
|
|
|
done
|
|
|
|
endef
|
|
|
|
|
|
|
|
define HOST_CLANG_TOOLCHAIN_WRAPPER_BUILD
|
|
|
|
$(HOSTCC) $(HOST_CFLAGS) $(TOOLCHAIN_WRAPPER_ARGS) \
|
|
|
|
-s -Wl,--hash-style=$(TOOLCHAIN_WRAPPER_HASH_STYLE) \
|
|
|
|
toolchain/toolchain-wrapper.c \
|
|
|
|
-o $(@D)/toolchain-wrapper-clang
|
|
|
|
endef
|
|
|
|
|
|
|
|
define HOST_CLANG_TOOLCHAIN_WRAPPER_INSTALL
|
|
|
|
$(INSTALL) -D -m 0755 $(@D)/toolchain-wrapper-clang \
|
|
|
|
$(HOST_DIR)/bin/toolchain-wrapper-clang
|
|
|
|
endef
|
|
|
|
|
|
|
|
HOST_CLANG_TOOLCHAIN_WRAPPER_ARGS += -DBR_CROSS_PATH_SUFFIX='".br_real"'
|
|
|
|
HOST_CLANG_POST_BUILD_HOOKS += HOST_CLANG_TOOLCHAIN_WRAPPER_BUILD
|
|
|
|
HOST_CLANG_POST_INSTALL_HOOKS += HOST_CLANG_TOOLCHAIN_WRAPPER_INSTALL
|
|
|
|
HOST_CLANG_POST_INSTALL_HOOKS += HOST_CLANG_INSTALL_WRAPPER_AND_SIMPLE_SYMLINKS
|
|
|
|
|
2018-04-11 18:14:49 +02:00
|
|
|
$(eval $(cmake-package))
|
|
|
|
$(eval $(host-cmake-package))
|