71b3df1cbb
This patch fixes the following error when trying to execute clang compiler (host-variant): CommandLine Error: Option 'x86-use-base-pointer' registered more than once! LLVM ERROR: inconsistency in registered CommandLine options The same happens for the other binaries, such as clang-format: ./clang-format : CommandLine Error: Option 'help-list' registered more than once! LLVM ERROR: inconsistency in registered CommandLine options Clang binaries are tools, and given that DLLVM_LINK_LLVM_DYLIB is set, they are linked against libLLVM.so. The problem is that binaries are also linking against some LLVM static libraries, resulting in the error shown above. However, it is not the same case for libclang, which is also a tool but links only against libLLVM.so. To fix this problem, add LLVM_DYLIB_COMPONENTS=all. Signed-off-by: Valentin Korenblit <valentin.korenblit@smile.fr> Tested-by: Joseph Kogut <joseph.kogut@gmail.com> Signed-off-by: Peter Korsgaard <peter@korsgaard.com>
98 lines
3.5 KiB
Makefile
98 lines
3.5 KiB
Makefile
################################################################################
|
|
#
|
|
# clang
|
|
#
|
|
################################################################################
|
|
|
|
CLANG_VERSION = 5.0.2
|
|
CLANG_SITE = http://llvm.org/releases/$(CLANG_VERSION)
|
|
CLANG_SOURCE = cfe-$(CLANG_VERSION).src.tar.xz
|
|
CLANG_LICENSE = NCSA
|
|
CLANG_LICENSE_FILES = LICENSE.TXT
|
|
CLANG_SUPPORTS_IN_SOURCE_BUILD = NO
|
|
CLANG_INSTALL_STAGING = YES
|
|
|
|
HOST_CLANG_DEPENDENCIES = host-llvm host-libxml2
|
|
CLANG_DEPENDENCIES = llvm host-clang
|
|
|
|
# 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.
|
|
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
|
|
|
|
HOST_CLANG_CONF_OPTS += -DLLVM_CONFIG:FILEPATH=$(HOST_DIR)/bin/llvm-config
|
|
CLANG_CONF_OPTS += -DLLVM_CONFIG:FILEPATH=$(STAGING_DIR)/usr/bin/llvm-config \
|
|
-DCLANG_TABLEGEN:FILEPATH=$(HOST_DIR)/usr/bin/clang-tblgen \
|
|
-DLLVM_TABLEGEN_EXE:FILEPATH=$(HOST_DIR)/usr/bin/llvm-tblgen
|
|
|
|
# Clang can't be used as compiler on the target since there are no
|
|
# development files (headers) and other build tools. So remove clang
|
|
# 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))
|
|
endef
|
|
CLANG_POST_INSTALL_TARGET_HOOKS += CLANG_CLEANUP_TARGET
|
|
|
|
# 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 \
|
|
$(HOST_DIR)/usr/bin/clang-tblgen
|
|
endef
|
|
HOST_CLANG_POST_INSTALL_HOOKS = HOST_CLANG_INSTALL_CLANG_TBLGEN
|
|
|
|
# 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
|
|
|
|
# Prevent clang binaries from linking against LLVM static libs
|
|
HOST_CLANG_CONF_OPTS += -DLLVM_DYLIB_COMPONENTS=all
|
|
CLANG_CONF_OPTS += -DLLVM_DYLIB_COMPONENTS=all
|
|
|
|
$(eval $(cmake-package))
|
|
$(eval $(host-cmake-package))
|