123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297 |
- ################################################################################
- #
- # llvm
- #
- ################################################################################
- # LLVM, Clang and lld should be version bumped together
- LLVM_VERSION = 9.0.1
- LLVM_SITE = https://github.com/llvm/llvm-project/releases/download/llvmorg-$(LLVM_VERSION)
- LLVM_SOURCE = llvm-$(LLVM_VERSION).src.tar.xz
- LLVM_LICENSE = Apache-2.0 with exceptions
- LLVM_LICENSE_FILES = LICENSE.TXT
- LLVM_SUPPORTS_IN_SOURCE_BUILD = NO
- LLVM_INSTALL_STAGING = YES
- # LLVM >= 9.0 can use python3 to build.
- HOST_LLVM_DEPENDENCIES = host-python3
- LLVM_DEPENDENCIES = host-llvm
- # 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_LLVM_CONF_OPTS += -DLLVM_TEMPORARILY_ALLOW_OLD_TOOLCHAIN=ON
- LLVM_CONF_OPTS += -DLLVM_TEMPORARILY_ALLOW_OLD_TOOLCHAIN=ON
- # Don't build clang libcxx libcxxabi lldb compiler-rt lld polly as llvm subprojects
- # This flag assumes that projects are checked out side-by-side and not nested
- HOST_LLVM_CONF_OPTS += -DLLVM_ENABLE_PROJECTS=""
- LLVM_CONF_OPTS += -DLLVM_ENABLE_PROJECTS=""
- HOST_LLVM_CONF_OPTS += -DLLVM_CCACHE_BUILD=$(if $(BR2_CCACHE),ON,OFF)
- LLVM_CONF_OPTS += -DLLVM_CCACHE_BUILD=$(if $(BR2_CCACHE),ON,OFF)
- # This option prevents AddLLVM.cmake from adding $ORIGIN/../lib to
- # binaries. Otherwise, llvm-config (host variant installed in STAGING)
- # will try to use target's libc.
- HOST_LLVM_CONF_OPTS += -DCMAKE_INSTALL_RPATH="$(HOST_DIR)/lib"
- # Get target architecture
- LLVM_TARGET_ARCH = $(call qstrip,$(BR2_PACKAGE_LLVM_TARGET_ARCH))
- # Build backend for target architecture. This include backends like AMDGPU.
- LLVM_TARGETS_TO_BUILD = $(LLVM_TARGET_ARCH)
- HOST_LLVM_CONF_OPTS += -DLLVM_TARGETS_TO_BUILD="$(subst $(space),;,$(LLVM_TARGETS_TO_BUILD))"
- LLVM_CONF_OPTS += -DLLVM_TARGETS_TO_BUILD="$(subst $(space),;,$(LLVM_TARGETS_TO_BUILD))"
- # LLVM target to use for native code generation. This is required for JIT generation.
- # It must be set to LLVM_TARGET_ARCH for host and target, otherwise we get
- # "No available targets are compatible for this triple" with llvmpipe when host
- # and target architectures are different.
- HOST_LLVM_CONF_OPTS += -DLLVM_TARGET_ARCH=$(LLVM_TARGET_ARCH)
- LLVM_CONF_OPTS += -DLLVM_TARGET_ARCH=$(LLVM_TARGET_ARCH)
- # Build AMDGPU backend
- # We need to build AMDGPU backend for both host and target because
- # llvm-config --targets built (host variant installed in STAGING) will
- # output only $(LLVM_TARGET_ARCH) if not, and mesa3d won't build as
- # it thinks AMDGPU backend is not installed on the target.
- ifeq ($(BR2_PACKAGE_LLVM_AMDGPU),y)
- LLVM_TARGETS_TO_BUILD += AMDGPU
- endif
- # Use native llvm-tblgen from host-llvm (needed for cross-compilation)
- LLVM_CONF_OPTS += -DLLVM_TABLEGEN=$(HOST_DIR)/bin/llvm-tblgen
- # Use native llvm-config from host-llvm (needed for cross-compilation)
- LLVM_CONF_OPTS += -DLLVM_CONFIG_PATH=$(HOST_DIR)/bin/llvm-config
- # BUILD_SHARED_LIBS has a misleading name. It is in fact an option for
- # LLVM developers to build all LLVM libraries as separate shared libraries.
- # For normal use of LLVM, it is recommended to build a single
- # shared library, which is achieved by BUILD_SHARED_LIBS=OFF and
- # LLVM_BUILD_LLVM_DYLIB=ON.
- HOST_LLVM_CONF_OPTS += -DBUILD_SHARED_LIBS=OFF
- LLVM_CONF_OPTS += -DBUILD_SHARED_LIBS=OFF
- # Generate libLLVM.so. This library contains a default set of LLVM components
- # that can be overwritten with "LLVM_DYLIB_COMPONENTS". The default contains
- # most of LLVM and is defined in "tools/llvm-shlib/CMakelists.txt".
- HOST_LLVM_CONF_OPTS += -DLLVM_BUILD_LLVM_DYLIB=ON
- LLVM_CONF_OPTS += -DLLVM_BUILD_LLVM_DYLIB=ON
- # LLVM_BUILD_LLVM_DYLIB to ON. We need to enable this option for the
- # host as llvm-config for the host will be used in STAGING_DIR by packages
- # linking against libLLVM and if this option is not selected, then llvm-config
- # does not work properly. For example, it assumes that LLVM is built statically
- # and cannot find libLLVM.so.
- HOST_LLVM_CONF_OPTS += -DLLVM_LINK_LLVM_DYLIB=ON
- LLVM_CONF_OPTS += -DLLVM_LINK_LLVM_DYLIB=ON
- LLVM_CONF_OPTS += -DCMAKE_CROSSCOMPILING=1
- # Disabled for the host since no host-libedit.
- # Fall back to "Simple fgets-based implementation" of llvm line editor.
- HOST_LLVM_CONF_OPTS += -DLLVM_ENABLE_LIBEDIT=OFF
- LLVM_CONF_OPTS += -DLLVM_ENABLE_LIBEDIT=OFF
- # We want to install llvm libraries and modules.
- HOST_LLVM_CONF_OPTS += -DLLVM_INSTALL_TOOLCHAIN_ONLY=OFF
- LLVM_CONF_OPTS += -DLLVM_INSTALL_TOOLCHAIN_ONLY=OFF
- # We build from a release archive without vcs files.
- HOST_LLVM_CONF_OPTS += -DLLVM_APPEND_VC_REV=OFF
- LLVM_CONF_OPTS += -DLLVM_APPEND_VC_REV=OFF
- # No backtrace package in Buildroot.
- # https://documentation.backtrace.io
- HOST_LLVM_CONF_OPTS += -DLLVM_ENABLE_BACKTRACES=OFF
- LLVM_CONF_OPTS += -DLLVM_ENABLE_BACKTRACES=OFF
- # Enable signal handlers overrides support.
- HOST_LLVM_CONF_OPTS += -DENABLE_CRASH_OVERRIDES=ON
- LLVM_CONF_OPTS += -DENABLE_CRASH_OVERRIDES=ON
- # Disable ffi for now.
- HOST_LLVM_CONF_OPTS += -DLLVM_ENABLE_FFI=OFF
- LLVM_CONF_OPTS += -DLLVM_ENABLE_FFI=OFF
- # Disable terminfo database (needs ncurses libtinfo.so)
- HOST_LLVM_CONF_OPTS += -DLLVM_ENABLE_TERMINFO=OFF
- LLVM_CONF_OPTS += -DLLVM_ENABLE_TERMINFO=OFF
- # Enable thread support
- HOST_LLVM_CONF_OPTS += -DLLVM_ENABLE_THREADS=ON
- LLVM_CONF_OPTS += -DLLVM_ENABLE_THREADS=ON
- # Enable optional host-zlib support for LLVM Machine Code (llvm-mc) to add
- # compression/uncompression capabilities.
- # Not needed on the target.
- HOST_LLVM_CONF_OPTS += -DLLVM_ENABLE_ZLIB=ON
- HOST_LLVM_DEPENDENCIES += host-zlib
- LLVM_CONF_OPTS += -DLLVM_ENABLE_ZLIB=OFF
- # libxml2 can be disabled as it is used for LLVM Windows builds where COFF
- # files include manifest info
- HOST_LLVM_CONF_OPTS += -DLLVM_ENABLE_LIBXML2=OFF
- LLVM_CONF_OPTS += -DLLVM_ENABLE_LIBXML2=OFF
- # Disable optional Z3Prover since there is no such package in Buildroot.
- HOST_LLVM_CONF_OPTS += -DLLVM_ENABLE_Z3_SOLVER=OFF
- LLVM_CONF_OPTS += -DLLVM_ENABLE_Z3_SOLVER=OFF
- # We don't use llvm for static only build, so enable PIC
- HOST_LLVM_CONF_OPTS += -DLLVM_ENABLE_PIC=ON
- LLVM_CONF_OPTS += -DLLVM_ENABLE_PIC=ON
- # 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_LLVM_CONF_OPTS += -DCMAKE_BUILD_TYPE=Release
- LLVM_CONF_OPTS += -DCMAKE_BUILD_TYPE=Release
- # Disable C++1y (ISO C++ 2014 standard)
- # Disable C++1z (ISO C++ 2017 standard)
- # Compile llvm with the C++11 (ISO C++ 2011 standard) which is the fallback.
- HOST_LLVM_CONF_OPTS += \
- -DLLVM_ENABLE_CXX1Y=OFF \
- -DLLVM_ENABLE_CXX1Z=OFF
- LLVM_CONF_OPTS += \
- -DLLVM_ENABLE_CXX1Y=OFF \
- -DLLVM_ENABLE_CXX1Z=OFF
- # Disabled, requires sys/ndir.h header
- # Disable debug in module
- HOST_LLVM_CONF_OPTS += \
- -DLLVM_ENABLE_MODULES=OFF \
- -DLLVM_ENABLE_MODULE_DEBUGGING=OFF
- LLVM_CONF_OPTS += \
- -DLLVM_ENABLE_MODULES=OFF \
- -DLLVM_ENABLE_MODULE_DEBUGGING=OFF
- # Don't change the standard library to libc++.
- HOST_LLVM_CONF_OPTS += -DLLVM_ENABLE_LIBCXX=OFF
- LLVM_CONF_OPTS += -DLLVM_ENABLE_LIBCXX=OFF
- # Don't use lld as a linker.
- HOST_LLVM_CONF_OPTS += -DLLVM_ENABLE_LLD=OFF
- LLVM_CONF_OPTS += -DLLVM_ENABLE_LLD=OFF
- # Generate code for the target. LLVM selects a target by looking at the
- # toolchain tuple
- HOST_LLVM_CONF_OPTS += -DLLVM_DEFAULT_TARGET_TRIPLE=$(GNU_TARGET_NAME)
- LLVM_CONF_OPTS += -DLLVM_DEFAULT_TARGET_TRIPLE=$(GNU_TARGET_NAME)
- # LLVM_HOST_TRIPLE has a misleading name, it is in fact the triple of the
- # system where llvm is going to run on. We need to specify triple for native
- # code generation on the target.
- # This solves "No available targets are compatible for this triple" with llvmpipe
- LLVM_CONF_OPTS += -DLLVM_HOST_TRIPLE=$(GNU_TARGET_NAME)
- # Building the Go and OCaml bindings is yet unsupported.
- HOST_LLVM_CONF_OPTS += \
- -DLLVM_ENABLE_BINDINGS=OFF
- # Builds a release host tablegen that gets used during the LLVM build.
- HOST_LLVM_CONF_OPTS += -DLLVM_OPTIMIZED_TABLEGEN=ON
- # Keep llvm utility binaries for the host. llvm-tblgen is built anyway as
- # CMakeLists.txt has add_subdirectory(utils/TableGen) unconditionally.
- HOST_LLVM_CONF_OPTS += \
- -DLLVM_BUILD_UTILS=ON \
- -DLLVM_INCLUDE_UTILS=ON \
- -DLLVM_INSTALL_UTILS=ON
- LLVM_CONF_OPTS += \
- -DLLVM_BUILD_UTILS=OFF \
- -DLLVM_INCLUDE_UTILS=OFF \
- -DLLVM_INSTALL_UTILS=OFF
- HOST_LLVM_CONF_OPTS += \
- -DLLVM_INCLUDE_TOOLS=ON \
- -DLLVM_BUILD_TOOLS=ON
- # We need to activate LLVM_INCLUDE_TOOLS, otherwise it does not generate
- # libLLVM.so
- LLVM_CONF_OPTS += \
- -DLLVM_INCLUDE_TOOLS=ON \
- -DLLVM_BUILD_TOOLS=OFF
- ifeq ($(BR2_PACKAGE_LLVM_RTTI),y)
- HOST_LLVM_CONF_OPTS += -DLLVM_ENABLE_RTTI=ON
- LLVM_CONF_OPTS += -DLLVM_ENABLE_RTTI=ON
- else
- HOST_LLVM_CONF_OPTS += -DLLVM_ENABLE_RTTI=OFF
- LLVM_CONF_OPTS += -DLLVM_ENABLE_RTTI=OFF
- endif
- # Compiler-rt not in the source tree.
- # llvm runtime libraries are not in the source tree.
- # Polly is not in the source tree.
- HOST_LLVM_CONF_OPTS += \
- -DLLVM_BUILD_EXTERNAL_COMPILER_RT=OFF \
- -DLLVM_BUILD_RUNTIME=OFF \
- -DLLVM_INCLUDE_RUNTIMES=OFF \
- -DLLVM_POLLY_BUILD=OFF
- LLVM_CONF_OPTS += \
- -DLLVM_BUILD_EXTERNAL_COMPILER_RT=OFF \
- -DLLVM_BUILD_RUNTIME=OFF \
- -DLLVM_INCLUDE_RUNTIMES=OFF \
- -DLLVM_POLLY_BUILD=OFF
- HOST_LLVM_CONF_OPTS += \
- -DLLVM_ENABLE_WARNINGS=ON \
- -DLLVM_ENABLE_PEDANTIC=ON \
- -DLLVM_ENABLE_WERROR=OFF
- LLVM_CONF_OPTS += \
- -DLLVM_ENABLE_WARNINGS=ON \
- -DLLVM_ENABLE_PEDANTIC=ON \
- -DLLVM_ENABLE_WERROR=OFF
- HOST_LLVM_CONF_OPTS += \
- -DLLVM_BUILD_EXAMPLES=OFF \
- -DLLVM_BUILD_DOCS=OFF \
- -DLLVM_BUILD_TESTS=OFF \
- -DLLVM_ENABLE_DOXYGEN=OFF \
- -DLLVM_ENABLE_OCAMLDOC=OFF \
- -DLLVM_ENABLE_SPHINX=OFF \
- -DLLVM_INCLUDE_EXAMPLES=OFF \
- -DLLVM_INCLUDE_DOCS=OFF \
- -DLLVM_INCLUDE_GO_TESTS=OFF \
- -DLLVM_INCLUDE_TESTS=OFF
- LLVM_CONF_OPTS += \
- -DLLVM_BUILD_EXAMPLES=OFF \
- -DLLVM_BUILD_DOCS=OFF \
- -DLLVM_BUILD_TESTS=OFF \
- -DLLVM_ENABLE_DOXYGEN=OFF \
- -DLLVM_ENABLE_OCAMLDOC=OFF \
- -DLLVM_ENABLE_SPHINX=OFF \
- -DLLVM_INCLUDE_EXAMPLES=OFF \
- -DLLVM_INCLUDE_DOCS=OFF \
- -DLLVM_INCLUDE_GO_TESTS=OFF \
- -DLLVM_INCLUDE_TESTS=OFF
- # Copy llvm-config (host variant) to STAGING_DIR
- # llvm-config (host variant) returns include and lib directories
- # for the host if it's installed in host/bin:
- # output/host/bin/llvm-config --includedir
- # output/host/include
- # When installed in STAGING_DIR, llvm-config returns include and lib
- # directories from STAGING_DIR.
- # output/staging/usr/bin/llvm-config --includedir
- # output/staging/usr/include
- define HOST_LLVM_COPY_LLVM_CONFIG_TO_STAGING_DIR
- $(INSTALL) -D -m 0755 $(HOST_DIR)/bin/llvm-config \
- $(STAGING_DIR)/usr/bin/llvm-config
- endef
- HOST_LLVM_POST_INSTALL_HOOKS = HOST_LLVM_COPY_LLVM_CONFIG_TO_STAGING_DIR
- # By default llvm-tblgen is built and installed on the target but it is
- # not necessary. Also erase LLVMHello.so from /usr/lib
- define LLVM_DELETE_LLVM_TBLGEN_TARGET
- rm -f $(TARGET_DIR)/usr/bin/llvm-tblgen $(TARGET_DIR)/usr/lib/LLVMHello.so
- endef
- LLVM_POST_INSTALL_TARGET_HOOKS = LLVM_DELETE_LLVM_TBLGEN_TARGET
- $(eval $(cmake-package))
- $(eval $(host-cmake-package))
|