mirror of
https://github.com/openwrt/video.git
synced 2026-05-31 06:51:54 +08:00
26e03d11a0
Bump the Mesa-internal LLVM (kept in feeds/video/libs/llvm/) from
21.1.3 to 22.1.5, and the matching SPIRV-LLVM-Translator from
21.1.1 to 22.1.2.
The SPIRV-LLVM-Translator's major version tracks LLVM's major,
so it caps which LLVM major we can move to. Khronos has now
shipped v22.1.2 (latest in the 22.x series), allowing the LLVM
major bump.
Mesa 26.0.6 sets only a minimum LLVM (>= 18 / 15 / 8 depending
on the requested driver set); no upper bound, so LLVM 22.x is
acceptable.
Two LLVM 22 build-system changes need adapting in the Makefile:
1. LIBCLC_TARGETS_TO_BUILD got stricter target name validation:
'amdgcn--amdhsa' is rejected in favour of 'amdgcn-amd-amdhsa',
and the 32-bit nvptx ('nvptx--', 'nvptx--nvidiacl') targets
were dropped (the 64-bit equivalents remain).
2. libclc bytecode now installs under
'usr/lib/clang/<major>/lib/libclc/' rather than the previous
'usr/share/clc/'. Adjust the SPIR-V .spv copy in Build/Install
to source from the new location (a glob on the major version
avoids re-touching this on the next bump).
The downstream 100-allow-arc-target.patch still applies unchanged.
Link: https://github.com/llvm/llvm-project/releases/tag/llvmorg-22.1.5
Link: https://github.com/KhronosGroup/SPIRV-LLVM-Translator/releases/tag/v22.1.2
Signed-off-by: Daniel Golle <daniel@makrotopia.org>
291 lines
9.1 KiB
Makefile
291 lines
9.1 KiB
Makefile
include $(TOPDIR)/rules.mk
|
|
|
|
PKG_NAME:=llvm-project
|
|
PKG_VERSION:=22.1.5
|
|
|
|
PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).src.tar.xz
|
|
PKG_SOURCE_URL:=https://github.com/llvm/llvm-project/releases/download/llvmorg-$(PKG_VERSION)
|
|
PKG_HASH:=7972b87b705a003ce70ab55f9f0fb495d156887cba0eb296d284731139118e2c
|
|
PKG_CPE_ID:=cpe:/a:llvm:llvm
|
|
|
|
SPIRV_LLVM_TRANSLATOR_VERSION:=22.1.2
|
|
SPIRV_LLVM_TRANSLATOR_FILE:=SPIRV-LLVM-Translator-$(SPIRV_LLVM_TRANSLATOR_VERSION).tar.gz
|
|
SPIRV_LLVM_TRANSLATOR_URL:=https://codeload.github.com/KhronosGroup/SPIRV-LLVM-Translator/tar.gz/v$(SPIRV_LLVM_TRANSLATOR_VERSION)?
|
|
SPIRV_LLVM_TRANSLATOR_HASH:=b37196b1a1a60282a24cf937ab7d6807d7d54dc718f2a37a78e211be26df57ac
|
|
|
|
HOST_BUILD_DIR:=$(BUILD_DIR_HOST)/llvm-mesa/$(PKG_NAME)-$(PKG_VERSION).src
|
|
PKG_BUILD_DIR:=$(BUILD_DIR)/llvm-mesa/$(PKG_NAME)-$(PKG_VERSION).src
|
|
|
|
CMAKE_BINARY_SUBDIR:=build
|
|
CMAKE_SOURCE_SUBDIR:=llvm
|
|
|
|
HOST_BUILD_DEPENDS:=spirv-headers/host spirv-tools/host
|
|
PKG_BUILD_DEPENDS:=llvm/host spirv-headers spirv-tools
|
|
|
|
CMAKE_INSTALL:=1
|
|
|
|
include $(INCLUDE_DIR)/package.mk
|
|
include $(INCLUDE_DIR)/host-build.mk
|
|
include $(INCLUDE_DIR)/cmake.mk
|
|
|
|
define Download/spirv-llvm-translator
|
|
FILE:=$(SPIRV_LLVM_TRANSLATOR_FILE)
|
|
URL:=$(SPIRV_LLVM_TRANSLATOR_URL)
|
|
HASH:=$(SPIRV_LLVM_TRANSLATOR_HASH)
|
|
endef
|
|
|
|
ifneq ($(HOST_OS),Linux)
|
|
HOST_CFLAGS := $(filter-out -I$(STAGING_DIR_HOST)/include,$(HOST_CFLAGS))
|
|
HOST_CXXFLAGS := $(filter-out -I$(STAGING_DIR_HOST)/include,$(HOST_CXXFLAGS))
|
|
endif
|
|
|
|
LLVM_MESA_PREFIX = llvm-mesa-$(PKG_VERSION).$(HOST_OS)-$(HOST_ARCH)
|
|
|
|
CMAKE_HOST_INSTALL_PREFIX = $(STAGING_DIR_HOST)/$(LLVM_MESA_PREFIX)
|
|
|
|
CMAKE_HOST_OPTIONS += \
|
|
-DBUILD_SHARED_LIBS=OFF \
|
|
-DCMAKE_SKIP_RPATH=OFF \
|
|
-DCOMPILER_RT_BUILD_SANITIZERS=OFF \
|
|
-DCOMPILER_RT_BUILD_XRAY=OFF \
|
|
-DCOMPILER_RT_BUILD_LIBFUZZER=OFF \
|
|
-DCOMPILER_RT_BUILD_PROFILE=OFF \
|
|
-DCOMPILER_RT_BUILD_MEMPROF=OFF \
|
|
-DLIBCLC_TARGETS_TO_BUILD= \
|
|
-DLLVM_EXPERIMENTAL_TARGETS_TO_BUILD= \
|
|
-DLLVM_TARGETS_TO_BUILD= \
|
|
-DLLVM_ENABLE_PROJECTS="libclc;clang" \
|
|
-DLLVM_INCLUDE_BENCHMARKS=OFF \
|
|
-DLLVM_INCLUDE_DOCS=OFF \
|
|
-DLLVM_INCLUDE_EXAMPLES=OFF \
|
|
-DLLVM_INCLUDE_TESTS=OFF \
|
|
-DLLVM_ENABLE_ASSERTIONS=OFF \
|
|
-DLLVM_ENABLE_BINDINGS=OFF \
|
|
-DLLVM_ENABLE_IDE=OFF \
|
|
-DLLVM_ENABLE_LIBEDIT=OFF \
|
|
-DLLVM_ENABLE_LIBPFM=OFF \
|
|
-DLLVM_ENABLE_LIBXML2=OFF \
|
|
-DLLVM_ENABLE_OCAMLDOC=OFF \
|
|
-DLLVM_ENABLE_TERMINFO=OFF \
|
|
-DLLVM_ENABLE_Z3_SOLVER=OFF \
|
|
-DLLVM_ENABLE_ZLIB=OFF \
|
|
-DLLVM_ENABLE_ZSTD=OFF \
|
|
-DLLVM_PARALLEL_LINK_JOBS=1 \
|
|
-DLLVM_EXTERNAL_SPIRV_HEADERS_SOURCE_DIR=$(STAGING_DIR_HOSTPKG) \
|
|
-DLLVM_SPIRV_INCLUDE_TESTS=OFF
|
|
|
|
LLVM_TARGET_TRIPLE:=$(subst muslgnueabi,musleabi,$(subst openwrt,unknown,$(REAL_GNU_TARGET_NAME)))
|
|
|
|
LLVM_TARGET_ARCH:=$(ARCH)
|
|
LLVM_TARGETS_TO_BUILD:=
|
|
LLVM_EXPERIMENTAL_TARGETS_TO_BUILD:=
|
|
|
|
ifeq ($(ARCH),i386)
|
|
LLVM_TARGETS_TO_BUILD:=X86
|
|
else
|
|
ifeq ($(ARCH),i586)
|
|
LLVM_TARGETS_TO_BUILD:=X86
|
|
else
|
|
ifeq ($(ARCH),i686)
|
|
LLVM_TARGETS_TO_BUILD:=X86
|
|
else
|
|
ifeq ($(ARCH),x86_64)
|
|
LLVM_TARGETS_TO_BUILD:=X86
|
|
else
|
|
ifeq ($(ARCH),aarch64)
|
|
LLVM_TARGETS_TO_BUILD:=AArch64
|
|
else
|
|
ifneq ($(findstring arm,$(ARCH)),)
|
|
LLVM_TARGETS_TO_BUILD:=ARM
|
|
else
|
|
ifeq ($(ARCH),arc)
|
|
LLVM_EXPERIMENTAL_TARGETS_TO_BUILD:=ARC
|
|
else
|
|
ifneq ($(findstring loongarch,$(ARCH)),)
|
|
LLVM_TARGETS_TO_BUILD:=LoongArch
|
|
else
|
|
ifneq ($(findstring mips,$(ARCH)),)
|
|
LLVM_TARGETS_TO_BUILD:=Mips
|
|
TARGET_LDFLAGS+=-latomic
|
|
else
|
|
ifneq ($(findstring powerpc,$(ARCH)),)
|
|
LLVM_TARGETS_TO_BUILD:=PowerPC
|
|
else
|
|
ifneq ($(findstring riscv,$(ARCH)),)
|
|
LLVM_TARGETS_TO_BUILD:=RISCV
|
|
else
|
|
LLVM_TARGETS_TO_BUILD:=$(LLVM_TARGET_ARCH)
|
|
endif
|
|
endif
|
|
endif
|
|
endif
|
|
endif
|
|
endif
|
|
endif
|
|
endif
|
|
endif
|
|
endif
|
|
endif
|
|
|
|
# always include GPU targets
|
|
LLVM_TARGETS_TO_BUILD+=AMDGPU
|
|
LLVM_TARGETS_TO_BUILD+=NVPTX
|
|
|
|
CMAKE_OPTIONS += \
|
|
-DBUILD_SHARED_LIBS=OFF \
|
|
-DCMAKE_CROSSCOMPILING=True \
|
|
-DCMAKE_SKIP_RPATH=OFF \
|
|
-DCOMPILER_RT_BUILD_SANITIZERS=OFF \
|
|
-DCOMPILER_RT_BUILD_XRAY=OFF \
|
|
-DCOMPILER_RT_BUILD_LIBFUZZER=OFF \
|
|
-DCOMPILER_RT_BUILD_PROFILE=OFF \
|
|
-DCOMPILER_RT_BUILD_MEMPROF=OFF \
|
|
-DLIBCLC_CUSTOM_LLVM_TOOLS_BINARY_DIR="$(STAGING_DIR_HOST)/llvm-mesa/bin" \
|
|
-DLIBCLC_TARGETS_TO_BUILD="amdgcn--;amdgcn-amd-amdhsa;clspv--;clspv64--;r600--;nvptx64--;nvptx64--nvidiacl;amdgcn-mesa-mesa3d;spirv-mesa3d-;spirv64-mesa3d-" \
|
|
-DLLVM_TARGET_ARCH=$(LLVM_TARGET_ARCH) \
|
|
-DLLVM_TARGETS_TO_BUILD="$(subst $(space),;,$(LLVM_TARGETS_TO_BUILD))" \
|
|
-DLLVM_EXPERIMENTAL_TARGETS_TO_BUILD="$(subst $(space),;,$(LLVM_EXPERIMENTAL_TARGETS_TO_BUILD))" \
|
|
-DLLVM_DEFAULT_TARGET_TRIPLE=$(LLVM_TARGET_TRIPLE) \
|
|
-DLLVM_HOST_TRIPLE=$(LLVM_TARGET_TRIPLE) \
|
|
-DLLVM_NATIVE_TOOL_DIR="$(STAGING_DIR_HOST)/llvm-mesa/bin" \
|
|
-DLLVM_ENABLE_PROJECTS="libclc;clang" \
|
|
-DLLVM_INCLUDE_BENCHMARKS=OFF \
|
|
-DLLVM_INCLUDE_DOCS=OFF \
|
|
-DLLVM_INCLUDE_EXAMPLES=OFF \
|
|
-DLLVM_INCLUDE_TESTS=OFF \
|
|
-DLLVM_ENABLE_ASSERTIONS=OFF \
|
|
-DLLVM_ENABLE_BINDINGS=OFF \
|
|
-DLLVM_ENABLE_IDE=OFF \
|
|
-DLLVM_ENABLE_LIBEDIT=OFF \
|
|
-DLLVM_ENABLE_LIBPFM=OFF \
|
|
-DLLVM_ENABLE_LIBXML2=OFF \
|
|
-DLLVM_ENABLE_OCAMLDOC=OFF \
|
|
-DLLVM_ENABLE_RTTI=ON \
|
|
-DLLVM_ENABLE_TERMINFO=OFF \
|
|
-DLLVM_ENABLE_Z3_SOLVER=OFF \
|
|
-DLLVM_ENABLE_ZLIB=OFF \
|
|
-DLLVM_ENABLE_ZSTD=OFF \
|
|
-DLLVM_PARALLEL_LINK_JOBS=1 \
|
|
-DLLVM_EXTERNAL_SPIRV_HEADERS_SOURCE_DIR=$(STAGING_DIR)/usr \
|
|
-DLLVM_SPIRV_INCLUDE_TESTS=OFF
|
|
|
|
define Package/llvm
|
|
SECTION:=devel
|
|
CATEGORY:=Development
|
|
TITLE:=LLVM
|
|
URL:=https://llvm.org/
|
|
DEPENDS:=@(!arc&&!powerpc64&&!powerpc||BROKEN)
|
|
BUILDONLY:=1
|
|
endef
|
|
|
|
define Package/llvm/description
|
|
The LLVM Project is a collection of modular and reusable compiler and toolchain technologies.
|
|
endef
|
|
|
|
define Package/libclang
|
|
SECTION:=libs
|
|
CATEGORY:=Libraries
|
|
TITLE:=LLVM Clang library
|
|
URL:=https://llvm.org/
|
|
DEPENDS:=@(!arc&&!powerpc64&&!powerpc||BROKEN) +libatomic +libstdcpp
|
|
endef
|
|
|
|
define Package/libclang-cpp
|
|
SECTION:=libs
|
|
CATEGORY:=Libraries
|
|
TITLE:=LLVM Clang C++ library
|
|
URL:=https://llvm.org/
|
|
DEPENDS:=@(!arc&&!powerpc64&&!powerpc||BROKEN) +libatomic +libstdcpp
|
|
endef
|
|
|
|
define Package/liblto
|
|
SECTION:=libs
|
|
CATEGORY:=Libraries
|
|
TITLE:=LLVM LTO library
|
|
URL:=https://llvm.org/
|
|
DEPENDS:=@(!arc&&!powerpc64&&!powerpc||BROKEN) +libatomic +libstdcpp
|
|
endef
|
|
|
|
define Package/libremarks
|
|
SECTION:=libs
|
|
CATEGORY:=Libraries
|
|
TITLE:=LLVM diagnostic remarks library
|
|
URL:=https://llvm.org/
|
|
DEPENDS:=@(!arc&&!powerpc64&&!powerpc||BROKEN) +libatomic +libstdcpp
|
|
endef
|
|
|
|
define Host/Prepare
|
|
$(call Host/Prepare/Default)
|
|
$(STAGING_DIR_HOST)/bin/libdeflate-gzip -dc $(DL_DIR)/$(SPIRV_LLVM_TRANSLATOR_FILE) | $(TAR) -C $(HOST_BUILD_DIR)/llvm/projects $(TAR_OPTIONS)
|
|
endef
|
|
|
|
define Host/Install
|
|
rm -rf $(STAGING_DIR_HOST)/llvm-mesa*
|
|
$(Host/Install/Default)
|
|
for file in \
|
|
clang-diff clang-fuzzer-dictionary count FileCheck lli-child-target \
|
|
llvm-isel-fuzzer llvm-jitlink-executor llvm-lit llvm-locstats llvm-min-tblgen \
|
|
llvm-opt-fuzzer llvm-PerfectShuffle not obj2yaml prepare_builtins split-file \
|
|
UnicodeNameMappingGenerator yaml2obj yaml-bench \
|
|
; do \
|
|
$(INSTALL_BIN) $(HOST_BUILD_DIR)/build/bin/$$$${file} $(CMAKE_HOST_INSTALL_PREFIX)/bin ; \
|
|
done
|
|
ln -s $(LLVM_MESA_PREFIX) $(STAGING_DIR_HOST)/llvm-mesa
|
|
STRIP_KMOD= PATCHELF= STRIP=strip $(SCRIPT_DIR)/rstrip.sh $(STAGING_DIR_HOST)/llvm-mesa
|
|
echo "$(PKG_VERSION)" > $(CMAKE_HOST_INSTALL_PREFIX)/.llvm-version
|
|
$(INSTALL_DIR) $(STAGING_DIR_HOSTPKG)/lib/pkgconfig
|
|
$(INSTALL_DATA) $(STAGING_DIR_HOST)/llvm-mesa/share/pkgconfig/libclc.pc $(STAGING_DIR_HOSTPKG)/lib/pkgconfig
|
|
$(INSTALL_DATA) $(STAGING_DIR_HOST)/llvm-mesa/lib/pkgconfig/LLVMSPIRVLib.pc $(STAGING_DIR_HOSTPKG)/lib/pkgconfig
|
|
$(INSTALL_DATA) $(STAGING_DIR_HOST)/llvm-mesa/lib/libLLVMSPIRVLib.a $(STAGING_DIR_HOSTPKG)/lib
|
|
endef
|
|
|
|
define Host/Uninstall
|
|
rm -rf $(STAGING_DIR_HOST)/llvm-mesa*
|
|
rm -rf $(STAGING_DIR_HOSTPKG)/include/clc
|
|
rm -rf $(STAGING_DIR_HOSTPKG)/share/clc
|
|
rm -f $(STAGING_DIR_HOSTPKG)/lib/pkgconfig/libclc.pc
|
|
rm -f $(STAGING_DIR_HOSTPKG)/lib/pkgconfig/LLVMSPIRVLib.pc
|
|
endef
|
|
|
|
define Build/Prepare
|
|
$(call Build/Prepare/Default)
|
|
$(STAGING_DIR_HOST)/bin/libdeflate-gzip -dc $(DL_DIR)/$(SPIRV_LLVM_TRANSLATOR_FILE) | $(TAR) -C $(PKG_BUILD_DIR)/llvm/projects $(TAR_OPTIONS)
|
|
endef
|
|
|
|
define Build/Install
|
|
$(call Build/Install/Default)
|
|
# hack: install SPIRV OpenCL libs also to host build to avoid having to build LLVM three times
|
|
# (LLVM >= 22 installs libclc bytecode under usr/lib/clang/<major>/lib/libclc/
|
|
# rather than the previous usr/share/clc/)
|
|
$(INSTALL_DIR) $(CMAKE_HOST_INSTALL_PREFIX)/share/clc
|
|
$(CP) $(PKG_INSTALL_DIR)/usr/lib/clang/*/lib/libclc/spirv{,64}-mesa3d-.spv $(CMAKE_HOST_INSTALL_PREFIX)/share/clc
|
|
endef
|
|
|
|
define Package/libclang/install
|
|
$(INSTALL_DIR) $(1)/usr/lib
|
|
$(CP) $(PKG_INSTALL_DIR)/usr/lib/libclang.so* $(1)/usr/lib
|
|
endef
|
|
|
|
define Package/libclang-cpp/install
|
|
$(INSTALL_DIR) $(1)/usr/lib
|
|
$(CP) $(PKG_INSTALL_DIR)/usr/lib/libclang-cpp.so* $(1)/usr/lib
|
|
endef
|
|
|
|
define Package/liblto/install
|
|
$(INSTALL_DIR) $(1)/usr/lib
|
|
$(CP) $(PKG_INSTALL_DIR)/usr/lib/libLTO.so* $(1)/usr/lib
|
|
endef
|
|
|
|
define Package/libremarks/install
|
|
$(INSTALL_DIR) $(1)/usr/lib
|
|
$(CP) $(PKG_INSTALL_DIR)/usr/lib/libRemarks.so* $(1)/usr/lib
|
|
endef
|
|
|
|
$(eval $(call Download,spirv-llvm-translator))
|
|
$(eval $(call BuildPackage,llvm))
|
|
$(eval $(call BuildPackage,libclang))
|
|
$(eval $(call BuildPackage,libclang-cpp))
|
|
$(eval $(call BuildPackage,liblto))
|
|
$(eval $(call BuildPackage,libremarks))
|
|
$(eval $(call HostBuild))
|