Message ID | 20170619190315.14288-1-aperez@igalia.com |
---|---|
State | Superseded |
Headers | show |
Hi Adrian, Le 19/06/2017 à 21:03, Adrian Perez de Castro a écrit : > Signed-off-by: Adrian Perez de Castro <aperez@igalia.com> > > --- > Changes v1 -> v2: > - Added missing Signed-off-by in patch. > - Renamed BR2_PACKAGE_HOST_LLVM_ARCH_SUPPORT to BR2_PACKAGE_LLVM_ARCH_SUPPORTS > and made its dependencies more readable. > - Fixed indentation of help texts in Config.in. > - Changed comment in Config.in to use the standard Buildroot wording. > - Handle converting Buildroot's target architecture to LLVM's in > Config.in instead of in llvm.mk. > - Change LLVM_LICENSE to use the SPDX license string. > - Use hooks in llvm.mk instead of appending commands to LLVM_*_CMDS. > - Fixed all the code style issues pointed out by > support/scripts/check-package. > --- > package/Config.in | 1 + > ...-Clean-up-exported-values-update-for-shar.patch | 58 +++++++++++ > package/llvm/Config.in | 54 ++++++++++ > package/llvm/llvm.hash | 2 + > package/llvm/llvm.mk | 116 +++++++++++++++++++++ > 5 files changed, 231 insertions(+) > create mode 100644 package/llvm/0007-llvm-config-Clean-up-exported-values-update-for-shar.patch > create mode 100644 package/llvm/Config.in > create mode 100644 package/llvm/llvm.hash > create mode 100644 package/llvm/llvm.mk > > diff --git a/package/Config.in b/package/Config.in > index aeb7430c89..f8a9dcc307 100644 > --- a/package/Config.in > +++ b/package/Config.in > @@ -146,6 +146,7 @@ menu "Development tools" > source "package/jo/Config.in" > source "package/jq/Config.in" > source "package/libtool/Config.in" > + source "package/llvm/Config.in" > source "package/make/Config.in" > source "package/patch/Config.in" > source "package/pkgconf/Config.in" > diff --git a/package/llvm/0007-llvm-config-Clean-up-exported-values-update-for-shar.patch b/package/llvm/0007-llvm-config-Clean-up-exported-values-update-for-shar.patch > new file mode 100644 > index 0000000000..a687e60af7 > --- /dev/null > +++ b/package/llvm/0007-llvm-config-Clean-up-exported-values-update-for-shar.patch The patch should be named 0001-llvm-config-Clean-up-exported-values-update-for-shar.patch > @@ -0,0 +1,58 @@ > +From 628b899be14a6bab4b32dbd53aabd447dcc16cb7 Mon Sep 17 00:00:00 2001 > +From: =?UTF-8?q?Micha=C5=82=20G=C3=B3rny?= <mgorny@gentoo.org> > +Date: Sat, 20 Aug 2016 23:47:41 +0200 > +Subject: [PATCH] llvm-config: Clean up exported values, update for shared > + linking > + > +Gentoo-specific fixup for llvm-config, including: > +- wiping build-specific CFLAGS, CXXFLAGS, > +- making --src-root return invalid path (/dev/null). > + > +Thanks to Steven Newbury for the initial patch. > + > +Bug: https://bugs.gentoo.org/565358 > +Bug: https://bugs.gentoo.org/501684 > + > +Fetch from: https://gitweb.gentoo.org/repo/gentoo.git/plain/sys-devel/llvm/files/9999/0007-llvm-config-Clean-up-exported-values-update-for-shar.patch > + > +Signed-off-by: Adrian Perez de Castro <aperez@igalia.com> > + > +diff --git a/tools/llvm-config/CMakeLists.txt b/tools/llvm-config/CMakeLists.txt > +index 744fa4e44d1..593788aaef3 100644 > +--- a/tools/llvm-config/CMakeLists.txt > ++++ b/tools/llvm-config/CMakeLists.txt > +@@ -32,8 +32,12 @@ get_property(COMPILE_FLAGS TARGET llvm-config PROPERTY COMPILE_FLAGS) > + set(LLVM_SRC_ROOT ${LLVM_MAIN_SRC_DIR}) > + set(LLVM_OBJ_ROOT ${LLVM_BINARY_DIR}) > + set(LLVM_CPPFLAGS "${CMAKE_CPP_FLAGS} ${CMAKE_CPP_FLAGS_${uppercase_CMAKE_BUILD_TYPE}} ${LLVM_DEFINITIONS}") > +-set(LLVM_CFLAGS "${CMAKE_C_FLAGS} ${CMAKE_C_FLAGS_${uppercase_CMAKE_BUILD_TYPE}} ${LLVM_DEFINITIONS}") > +-set(LLVM_CXXFLAGS "${CMAKE_CXX_FLAGS} ${CMAKE_CXX_FLAGS_${uppercase_CMAKE_BUILD_TYPE}} ${COMPILE_FLAGS} ${LLVM_DEFINITIONS}") > ++# Just use CMAKE_CPP_FLAGS for CFLAGS and CXXFLAGS, otherwise compiler > ++# specific flags will be set when we don't know what compiler will be used > ++# with external project utilising llvm-config. C++ Standard is required. > ++# TODO: figure out if we can remove -std=c++11 and move it to revdeps. > ++set(LLVM_CFLAGS "${CMAKE_CPP_FLAGS} ${CMAKE_C_FLAGS_${uppercase_CMAKE_BUILD_TYPE}} ${LLVM_DEFINITIONS}") > ++set(LLVM_CXXFLAGS "${CMAKE_CPP_FLAGS} -std=c++11 ${CMAKE_CXX_FLAGS_${uppercase_CMAKE_BUILD_TYPE}} ${LLVM_DEFINITIONS}") The Gentoo bug is quite old now (2015) can you check if this part is still needed ? With llvm-config build without this patch, -std=c++1y is present in cxxflags. ./test/llvm/host/usr/bin/llvm-config --cxxflags -I/home/naourr/buildroot-test/test/llvm/host/usr/include -O2 -I/home/naourr/buildroot-test/test/llvm/host/usr/include -fPIC -fvisibility-inlines-hidden -Wall -W -Wno-unused-parameter -Wwrite-strings -Wcast-qual -Wno-missing-field-initializers -pedantic -Wno-long-long -Wno-maybe-uninitialized -Wdelete-non-virtual-dtor -Wno-comment -Werror=date-time -std=c++1y -ffunction-sections -fdata-sections -O2 -DNDEBUG -fno-exceptions -fno-rtti -D_GNU_SOURCE -D__STDC_CONSTANT_MACROS -D__STDC_FORMAT_MACROS -D__STDC_LIMIT_MACROS > + set(LLVM_BUILD_SYSTEM cmake) > + set(LLVM_HAS_RTTI ${LLVM_CONFIG_HAS_RTTI}) > + set(LLVM_DYLIB_VERSION "${LLVM_VERSION_MAJOR}.${LLVM_VERSION_MINOR}${LLVM_VERSION_SUFFIX}") > +diff --git a/tools/llvm-config/llvm-config.cpp b/tools/llvm-config/llvm-config.cpp > +index d780094861c..c61c72ff48c 100644 > +--- a/tools/llvm-config/llvm-config.cpp > ++++ b/tools/llvm-config/llvm-config.cpp > +@@ -549,7 +550,11 @@ int main(int argc, char **argv) { > + } else if (Arg == "--obj-root") { > + OS << ActivePrefix << '\n'; > + } else if (Arg == "--src-root") { > +- OS << LLVM_SRC_ROOT << '\n'; > ++ if (IsInDevelopmentTree) { > ++ OS << LLVM_SRC_ROOT << '\n'; > ++ } else { > ++ OS << "/dev/null\n"; > ++ } Indeed: ./test/llvm/host/usr/bin/llvm-config --src-root /home/naourr/buildroot-test/test/llvm/build/host-llvm-4.0.1 Do you know which package using llvm use --src-root option ? > + } else if (Arg == "--ignore-libllvm") { > + LinkDyLib = false; > + LinkMode = BuiltSharedLibs ? LinkModeShared : LinkModeAuto; > +-- > +2.11.0 > + > diff --git a/package/llvm/Config.in b/package/llvm/Config.in > new file mode 100644 > index 0000000000..f6145fd7f6 > --- /dev/null > +++ b/package/llvm/Config.in > @@ -0,0 +1,54 @@ > +config BR2_PACKAGE_LLVM_ARCH_SUPPORTS > + bool > + default y if BR2_arm || BR2_armeb > + default y if BR2_aarch64 > + default y if BR2_i386 || BR2_x86_64 > + default y if BR2_mips || BR2_mipsel || BR2_mips64 || BR2_mips64el > + default y if BR2_powerpc || BR2_powerpc64 || BR2_powerpc64le > + default y if BR2_sparc > + > +config BR2_PACKAGE_LLVM_TARGET_ARCH > + string > + default "ARM" if BR2_arm || BR2_armeb > + default "AArch64" if BR2_aarch64 > + default "X86" if BR2_i386 || BR2_x86_64 > + default "Mips" if BR2_mips || BR2_mipsel || BR2_mips64 || BR2_mips64el > + default "PowerPC" if BR2_powerpc || BR2_powerpc64 || BR2_powerpc64le > + default "Sparc" if BR2_sparc > + > +config BR2_PACKAGE_LLVM > + bool "llvm" llvm needs at least gcc 4.8: http://releases.llvm.org/4.0.1/docs/ReleaseNotes.html > + depends on BR2_PACKAGE_LLVM_ARCH_SUPPORTS > + depends on BR2_INSTALL_LIBSTDCPP > + depends on BR2_TOOLCHAIN_BUILDROOT_WCHAR > + select BR2_PACKAGE_LIBXML2 I don't see why libxml2 is selected here. llvm doesn't check for this library. > + select BR2_PACKAGE_ZLIB > + help > + The LLVM Project is a collection of modular and reusable > + compiler and toolchain technologies. > + > + http://llvm.org > + > +comment "llvm needs a toolchain w/ C++, wchar" > + depends on BR2_PACKAGE_LLVM_ARCH_SUPPORTS > + > +if BR2_PACKAGE_LLVM > + > +config BR2_PACKAGE_LLVM_ENABLE_FFI > + bool "Support libffi" > + select BR2_PACKAGE_LIBFFI > + help > + Use libffi in the LLVM Interpreter in order to enable calling > + external functions. > + > +config BR2_PACKAGE_LLVM_ENABLE_RTTI > + bool "C++: Support RTTI" > + help > + Enable support for C++ Run-Time Type Information (RTTI) > + > +config BR2_PACKAGE_LLVM_ENABLE_EH > + bool "C++: Support exception handling" > + help > + Enable support for C++ exception handling (try/catch) > + > +endif > diff --git a/package/llvm/llvm.hash b/package/llvm/llvm.hash > new file mode 100644 > index 0000000000..b11cd14bf4 > --- /dev/null > +++ b/package/llvm/llvm.hash > @@ -0,0 +1,2 @@ > +# Computed locally after checking the GPG signature: > +sha256 8d10511df96e73b8ff9e7abbfb4d4d432edbdbe965f1f4f07afaf370b8a533be llvm-4.0.0.src.tar.xz > diff --git a/package/llvm/llvm.mk b/package/llvm/llvm.mk > new file mode 100644 > index 0000000000..9d10f3a5c6 > --- /dev/null > +++ b/package/llvm/llvm.mk > @@ -0,0 +1,116 @@ > +################################################################################ > +# > +# llvm > +# > +################################################################################ > + > +LLVM_VERSION = 4.0.0 > +LLVM_SITE = http://llvm.org/releases/$(LLVM_VERSION) > +LLVM_SOURCE = llvm-$(LLVM_VERSION).src.tar.xz > +LLVM_LICENSE = NCSA > +LLVM_LICENSE_FILES = LICENSE.TXT > +LLVM_INSTALL_STAGING = YES > +LLVM_DEPENDENCIES = libxml2 zlib host-python > + > +LLVM_TARGET_ARCH = $(call qstrip,$(BR2_PACKAGE_LLVM_TARGET_ARCH)) > + > +# List of build options at: > +# http://llvm.org/docs/CMake.html > +# > +LLVM_CONF_OPTS = \ > + -DLLVM_DEFAULT_TARGET_TRIPLE=$(GNU_TARGET_NAME) \ > + -DLLVM_HOST_TRIPLE=$(GNU_TARGET_NAME) \ > + -DLLVM_TARGETS_TO_BUILD=$(LLVM_TARGET_ARCH) \ I believe we should take into account other target like AMDGPU. I've tested mesa3d with llvm shaders enabled for an HD6310 graphic card on a x86_64 target. > + -DLLVM_TARGET_ARCH=$(LLVM_TARGET_ARCH) \ > + -DLLVM_OPTIMIZED_TABLEGEN=YES \ > + -DLLVM_ENABLE_ZLIB=YES \ > + -DLLVM_INCLUDE_TOOLS=YES \ > + -DLLVM_INCLUDE_UTILS=NO \ > + -DLLVM_INCLUDE_EXAMPLES=NO \ > + -DLLVM_INCLUDE_TESTS=NO \ > + -DLLVM_BUILD_TESTS=NO \ > + -DLLVM_BUILD_RUNTIME=NO \ > + -DLLVM_ENABLE_PROJECTS='' > + > +# The Go bindings have no CMake rules at the moment, but better remove the > +# check preventively. Building the Go and OCaml bindings is yet unsupported. > +# > +LLVM_CONF_OPTS += \ > + -DGO_EXECUTABLE=GO_EXECUTABLE-NOTFOUND \ > + -DOCAMLFIND=OCAMLFIND-NOTFOUND > + > +# Building per-component shared libraries is NOT recommended by upstream. > +# The all-in-one libLLVM-<version>.so is enabled with a different setting. Indeed, there is a NOTE about this in docs/CMake.rst. .. note:: BUILD_SHARED_LIBS is only recommended for use by LLVM developers. If you want to build LLVM as a shared library, you should use the ``LLVM_BUILD_LLVM_DYLIB`` option. > +LLVM_CONF_OPTS += \ > + -DBUILD_SHARED_LIBS=NO \ > + -DLLVM_BUILD_LLVM_DYLIB=$(if $(BR2_STATIC_LIBS),NO,YES) I'm not sure we really want to support llvm for static build only. > + > +ifeq ($(BR2_PACKAGE_LLVM_ENABLE_FFI),y) > +LLVM_DEPENDENCIES += libffi > +LLVM_CONF_OPTS += -DLLVM_ENABLE_FFI=YES > +else > +LLVM_CONF_OPTS += -DLLVM_ENABLE_FFI=NO > +endif > + > +ifeq ($(BR2_PACKAGE_LLVM_ENABLE_RTTI),y) > +LLVM_CONF_OPTS += -DLLVM_ENABLE_RTTI=YES > +else > +LLVM_CONF_OPTS += -DLLVM_ENABLE_RTTI=NO > +endif > + > +ifeq ($(BR2_PACKAGE_LLVM_ENABLE_EH),y) > +LLVM_CONF_OPTS += -DLLVM_ENABLE_EH=YES > +else > +LLVM_CONF_OPTS += -DLLVM_ENABLE_EH=NO > +endif > + > +# LLVM expects to always be built in a separate directory. > +LLVM_SUPPORTS_IN_SOURCE_BUILD = NO > + > +# XXX: LLVM does include some support for building native tools. This is used > +# to build e.g. llvm-config, and a host-native llvm-tblgen if needed. > +# Unfortunately, Buildroot is overzealous about passing the parameters > +# needed for cross-building, and the CMake configuration for the native > +# tools ends up using the cross-toolchain. Once "cmake-package" has > +# defined LLVM_*_CMDS, this adds: > +# > +# - A call to CMake which resets CMAKE_{C,CXX,ASM}_COMPILER with the > +# paths to the host-native ones. Note that using the *_NOCCACHE > +# variables is needed, otherwise CMake will choke. > +# > +# - The file "BuildVariables.inc" is copied over from the cross-build > +# directory to the native one. This way a new "llvm-config" which > +# can run on the build host returns information about the target > +# build which gets installed in the sysroot. This is done as an > +# appended build command. Note that Make has to be re-invoked to > +# rebuild after copying the file over. > +# > +# - Last but not least, "llvm-config" is copied into the sysroot with > +# the target triple prefix, because packages using sane build systems > +# will first try that. > +# > + > +define LLVM_CONFIGURE_NATIVE_TOOLS_CMDS > + cd $(LLVM_BUILDDIR)/NATIVE && \ > + PATH=$(BR_PATH) $(LLVM_CONF_ENV) $(BR2_CMAKE) $(LLVM_SRCDIR) \ > + -DCMAKE_C_COMPILER='$(HOSTCC_NOCCACHE)' \ > + -DCMAKE_ASM_COMPILER='$(HOSTCC_NOCCACHE)' \ > + -DCMAKE_CXX_COMPILER='$(HOSTCXX_NOCCACHE)' > +endef I believe we should add a host-llvm package to provide llvm-tblgen and llvm-config binaries, so we can use -DLLVM_TABLEGEN instead of theses hooks. # Use native llvm-tblgen from host-llvm. LLVM_CONF_OPTS += -DLLVM_TABLEGEN=$(HOST_DIR)/usr/bin/llvm-tblgen > + > +LLVM_POST_CONFIGURE_HOOKS += LLVM_CONFIGURE_NATIVE_TOOLS_CMDS > + > +define LLVM_REBUILD_NATIVE_LLVM_CONFIG_CMDS > + cp $(LLVM_BUILDDIR)/tools/llvm-config/BuildVariables.inc $(LLVM_BUILDDIR)/NATIVE/tools/llvm-config/BuildVariables.inc > + $(HOST_MAKE_ENV) $(LLVM_MAKE_ENV) $(LLVM_MAKE) $(LLVM_MAKE_OPTS) -C $(LLVM_BUILDDIR)/NATIVE llvm-config > +endef > + > +LLVM_POST_BUILD_HOOKS += LLVM_REBUILD_NATIVE_LLVM_CONFIG_CMDS > + > +define LLVM_INSTALL_STAGING_NATIVE_LLVM_CONFIG_CMDS > + install -Dm755 $(LLVM_BUILDDIR)/NATIVE/bin/llvm-config $(STAGING_DIR)/usr/bin/llvm-config You should use "$(INSTALL) -D -m 0755" here. > +endef > + > +LLVM_POST_INSTALL_STAGING_HOOKS += LLVM_INSTALL_STAGING_NATIVE_LLVM_CONFIG_CMDS > + > +$(eval $(cmake-package)) > I'm working on a new patch series using llvm 4.0.1 including your changes, also I'll speak with Thomas about it during the Summer Camp. Best regards, Romain
diff --git a/package/Config.in b/package/Config.in index aeb7430c89..f8a9dcc307 100644 --- a/package/Config.in +++ b/package/Config.in @@ -146,6 +146,7 @@ menu "Development tools" source "package/jo/Config.in" source "package/jq/Config.in" source "package/libtool/Config.in" + source "package/llvm/Config.in" source "package/make/Config.in" source "package/patch/Config.in" source "package/pkgconf/Config.in" diff --git a/package/llvm/0007-llvm-config-Clean-up-exported-values-update-for-shar.patch b/package/llvm/0007-llvm-config-Clean-up-exported-values-update-for-shar.patch new file mode 100644 index 0000000000..a687e60af7 --- /dev/null +++ b/package/llvm/0007-llvm-config-Clean-up-exported-values-update-for-shar.patch @@ -0,0 +1,58 @@ +From 628b899be14a6bab4b32dbd53aabd447dcc16cb7 Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Micha=C5=82=20G=C3=B3rny?= <mgorny@gentoo.org> +Date: Sat, 20 Aug 2016 23:47:41 +0200 +Subject: [PATCH] llvm-config: Clean up exported values, update for shared + linking + +Gentoo-specific fixup for llvm-config, including: +- wiping build-specific CFLAGS, CXXFLAGS, +- making --src-root return invalid path (/dev/null). + +Thanks to Steven Newbury for the initial patch. + +Bug: https://bugs.gentoo.org/565358 +Bug: https://bugs.gentoo.org/501684 + +Fetch from: https://gitweb.gentoo.org/repo/gentoo.git/plain/sys-devel/llvm/files/9999/0007-llvm-config-Clean-up-exported-values-update-for-shar.patch + +Signed-off-by: Adrian Perez de Castro <aperez@igalia.com> + +diff --git a/tools/llvm-config/CMakeLists.txt b/tools/llvm-config/CMakeLists.txt +index 744fa4e44d1..593788aaef3 100644 +--- a/tools/llvm-config/CMakeLists.txt ++++ b/tools/llvm-config/CMakeLists.txt +@@ -32,8 +32,12 @@ get_property(COMPILE_FLAGS TARGET llvm-config PROPERTY COMPILE_FLAGS) + set(LLVM_SRC_ROOT ${LLVM_MAIN_SRC_DIR}) + set(LLVM_OBJ_ROOT ${LLVM_BINARY_DIR}) + set(LLVM_CPPFLAGS "${CMAKE_CPP_FLAGS} ${CMAKE_CPP_FLAGS_${uppercase_CMAKE_BUILD_TYPE}} ${LLVM_DEFINITIONS}") +-set(LLVM_CFLAGS "${CMAKE_C_FLAGS} ${CMAKE_C_FLAGS_${uppercase_CMAKE_BUILD_TYPE}} ${LLVM_DEFINITIONS}") +-set(LLVM_CXXFLAGS "${CMAKE_CXX_FLAGS} ${CMAKE_CXX_FLAGS_${uppercase_CMAKE_BUILD_TYPE}} ${COMPILE_FLAGS} ${LLVM_DEFINITIONS}") ++# Just use CMAKE_CPP_FLAGS for CFLAGS and CXXFLAGS, otherwise compiler ++# specific flags will be set when we don't know what compiler will be used ++# with external project utilising llvm-config. C++ Standard is required. ++# TODO: figure out if we can remove -std=c++11 and move it to revdeps. ++set(LLVM_CFLAGS "${CMAKE_CPP_FLAGS} ${CMAKE_C_FLAGS_${uppercase_CMAKE_BUILD_TYPE}} ${LLVM_DEFINITIONS}") ++set(LLVM_CXXFLAGS "${CMAKE_CPP_FLAGS} -std=c++11 ${CMAKE_CXX_FLAGS_${uppercase_CMAKE_BUILD_TYPE}} ${LLVM_DEFINITIONS}") + set(LLVM_BUILD_SYSTEM cmake) + set(LLVM_HAS_RTTI ${LLVM_CONFIG_HAS_RTTI}) + set(LLVM_DYLIB_VERSION "${LLVM_VERSION_MAJOR}.${LLVM_VERSION_MINOR}${LLVM_VERSION_SUFFIX}") +diff --git a/tools/llvm-config/llvm-config.cpp b/tools/llvm-config/llvm-config.cpp +index d780094861c..c61c72ff48c 100644 +--- a/tools/llvm-config/llvm-config.cpp ++++ b/tools/llvm-config/llvm-config.cpp +@@ -549,7 +550,11 @@ int main(int argc, char **argv) { + } else if (Arg == "--obj-root") { + OS << ActivePrefix << '\n'; + } else if (Arg == "--src-root") { +- OS << LLVM_SRC_ROOT << '\n'; ++ if (IsInDevelopmentTree) { ++ OS << LLVM_SRC_ROOT << '\n'; ++ } else { ++ OS << "/dev/null\n"; ++ } + } else if (Arg == "--ignore-libllvm") { + LinkDyLib = false; + LinkMode = BuiltSharedLibs ? LinkModeShared : LinkModeAuto; +-- +2.11.0 + diff --git a/package/llvm/Config.in b/package/llvm/Config.in new file mode 100644 index 0000000000..f6145fd7f6 --- /dev/null +++ b/package/llvm/Config.in @@ -0,0 +1,54 @@ +config BR2_PACKAGE_LLVM_ARCH_SUPPORTS + bool + default y if BR2_arm || BR2_armeb + default y if BR2_aarch64 + default y if BR2_i386 || BR2_x86_64 + default y if BR2_mips || BR2_mipsel || BR2_mips64 || BR2_mips64el + default y if BR2_powerpc || BR2_powerpc64 || BR2_powerpc64le + default y if BR2_sparc + +config BR2_PACKAGE_LLVM_TARGET_ARCH + string + default "ARM" if BR2_arm || BR2_armeb + default "AArch64" if BR2_aarch64 + default "X86" if BR2_i386 || BR2_x86_64 + default "Mips" if BR2_mips || BR2_mipsel || BR2_mips64 || BR2_mips64el + default "PowerPC" if BR2_powerpc || BR2_powerpc64 || BR2_powerpc64le + default "Sparc" if BR2_sparc + +config BR2_PACKAGE_LLVM + bool "llvm" + depends on BR2_PACKAGE_LLVM_ARCH_SUPPORTS + depends on BR2_INSTALL_LIBSTDCPP + depends on BR2_TOOLCHAIN_BUILDROOT_WCHAR + select BR2_PACKAGE_LIBXML2 + select BR2_PACKAGE_ZLIB + help + The LLVM Project is a collection of modular and reusable + compiler and toolchain technologies. + + http://llvm.org + +comment "llvm needs a toolchain w/ C++, wchar" + depends on BR2_PACKAGE_LLVM_ARCH_SUPPORTS + +if BR2_PACKAGE_LLVM + +config BR2_PACKAGE_LLVM_ENABLE_FFI + bool "Support libffi" + select BR2_PACKAGE_LIBFFI + help + Use libffi in the LLVM Interpreter in order to enable calling + external functions. + +config BR2_PACKAGE_LLVM_ENABLE_RTTI + bool "C++: Support RTTI" + help + Enable support for C++ Run-Time Type Information (RTTI) + +config BR2_PACKAGE_LLVM_ENABLE_EH + bool "C++: Support exception handling" + help + Enable support for C++ exception handling (try/catch) + +endif diff --git a/package/llvm/llvm.hash b/package/llvm/llvm.hash new file mode 100644 index 0000000000..b11cd14bf4 --- /dev/null +++ b/package/llvm/llvm.hash @@ -0,0 +1,2 @@ +# Computed locally after checking the GPG signature: +sha256 8d10511df96e73b8ff9e7abbfb4d4d432edbdbe965f1f4f07afaf370b8a533be llvm-4.0.0.src.tar.xz diff --git a/package/llvm/llvm.mk b/package/llvm/llvm.mk new file mode 100644 index 0000000000..9d10f3a5c6 --- /dev/null +++ b/package/llvm/llvm.mk @@ -0,0 +1,116 @@ +################################################################################ +# +# llvm +# +################################################################################ + +LLVM_VERSION = 4.0.0 +LLVM_SITE = http://llvm.org/releases/$(LLVM_VERSION) +LLVM_SOURCE = llvm-$(LLVM_VERSION).src.tar.xz +LLVM_LICENSE = NCSA +LLVM_LICENSE_FILES = LICENSE.TXT +LLVM_INSTALL_STAGING = YES +LLVM_DEPENDENCIES = libxml2 zlib host-python + +LLVM_TARGET_ARCH = $(call qstrip,$(BR2_PACKAGE_LLVM_TARGET_ARCH)) + +# List of build options at: +# http://llvm.org/docs/CMake.html +# +LLVM_CONF_OPTS = \ + -DLLVM_DEFAULT_TARGET_TRIPLE=$(GNU_TARGET_NAME) \ + -DLLVM_HOST_TRIPLE=$(GNU_TARGET_NAME) \ + -DLLVM_TARGETS_TO_BUILD=$(LLVM_TARGET_ARCH) \ + -DLLVM_TARGET_ARCH=$(LLVM_TARGET_ARCH) \ + -DLLVM_OPTIMIZED_TABLEGEN=YES \ + -DLLVM_ENABLE_ZLIB=YES \ + -DLLVM_INCLUDE_TOOLS=YES \ + -DLLVM_INCLUDE_UTILS=NO \ + -DLLVM_INCLUDE_EXAMPLES=NO \ + -DLLVM_INCLUDE_TESTS=NO \ + -DLLVM_BUILD_TESTS=NO \ + -DLLVM_BUILD_RUNTIME=NO \ + -DLLVM_ENABLE_PROJECTS='' + +# The Go bindings have no CMake rules at the moment, but better remove the +# check preventively. Building the Go and OCaml bindings is yet unsupported. +# +LLVM_CONF_OPTS += \ + -DGO_EXECUTABLE=GO_EXECUTABLE-NOTFOUND \ + -DOCAMLFIND=OCAMLFIND-NOTFOUND + +# Building per-component shared libraries is NOT recommended by upstream. +# The all-in-one libLLVM-<version>.so is enabled with a different setting. +LLVM_CONF_OPTS += \ + -DBUILD_SHARED_LIBS=NO \ + -DLLVM_BUILD_LLVM_DYLIB=$(if $(BR2_STATIC_LIBS),NO,YES) + +ifeq ($(BR2_PACKAGE_LLVM_ENABLE_FFI),y) +LLVM_DEPENDENCIES += libffi +LLVM_CONF_OPTS += -DLLVM_ENABLE_FFI=YES +else +LLVM_CONF_OPTS += -DLLVM_ENABLE_FFI=NO +endif + +ifeq ($(BR2_PACKAGE_LLVM_ENABLE_RTTI),y) +LLVM_CONF_OPTS += -DLLVM_ENABLE_RTTI=YES +else +LLVM_CONF_OPTS += -DLLVM_ENABLE_RTTI=NO +endif + +ifeq ($(BR2_PACKAGE_LLVM_ENABLE_EH),y) +LLVM_CONF_OPTS += -DLLVM_ENABLE_EH=YES +else +LLVM_CONF_OPTS += -DLLVM_ENABLE_EH=NO +endif + +# LLVM expects to always be built in a separate directory. +LLVM_SUPPORTS_IN_SOURCE_BUILD = NO + +# XXX: LLVM does include some support for building native tools. This is used +# to build e.g. llvm-config, and a host-native llvm-tblgen if needed. +# Unfortunately, Buildroot is overzealous about passing the parameters +# needed for cross-building, and the CMake configuration for the native +# tools ends up using the cross-toolchain. Once "cmake-package" has +# defined LLVM_*_CMDS, this adds: +# +# - A call to CMake which resets CMAKE_{C,CXX,ASM}_COMPILER with the +# paths to the host-native ones. Note that using the *_NOCCACHE +# variables is needed, otherwise CMake will choke. +# +# - The file "BuildVariables.inc" is copied over from the cross-build +# directory to the native one. This way a new "llvm-config" which +# can run on the build host returns information about the target +# build which gets installed in the sysroot. This is done as an +# appended build command. Note that Make has to be re-invoked to +# rebuild after copying the file over. +# +# - Last but not least, "llvm-config" is copied into the sysroot with +# the target triple prefix, because packages using sane build systems +# will first try that. +# + +define LLVM_CONFIGURE_NATIVE_TOOLS_CMDS + cd $(LLVM_BUILDDIR)/NATIVE && \ + PATH=$(BR_PATH) $(LLVM_CONF_ENV) $(BR2_CMAKE) $(LLVM_SRCDIR) \ + -DCMAKE_C_COMPILER='$(HOSTCC_NOCCACHE)' \ + -DCMAKE_ASM_COMPILER='$(HOSTCC_NOCCACHE)' \ + -DCMAKE_CXX_COMPILER='$(HOSTCXX_NOCCACHE)' +endef + +LLVM_POST_CONFIGURE_HOOKS += LLVM_CONFIGURE_NATIVE_TOOLS_CMDS + +define LLVM_REBUILD_NATIVE_LLVM_CONFIG_CMDS + cp $(LLVM_BUILDDIR)/tools/llvm-config/BuildVariables.inc $(LLVM_BUILDDIR)/NATIVE/tools/llvm-config/BuildVariables.inc + $(HOST_MAKE_ENV) $(LLVM_MAKE_ENV) $(LLVM_MAKE) $(LLVM_MAKE_OPTS) -C $(LLVM_BUILDDIR)/NATIVE llvm-config +endef + +LLVM_POST_BUILD_HOOKS += LLVM_REBUILD_NATIVE_LLVM_CONFIG_CMDS + +define LLVM_INSTALL_STAGING_NATIVE_LLVM_CONFIG_CMDS + install -Dm755 $(LLVM_BUILDDIR)/NATIVE/bin/llvm-config $(STAGING_DIR)/usr/bin/llvm-config +endef + +LLVM_POST_INSTALL_STAGING_HOOKS += LLVM_INSTALL_STAGING_NATIVE_LLVM_CONFIG_CMDS + +$(eval $(cmake-package))
Signed-off-by: Adrian Perez de Castro <aperez@igalia.com> --- Changes v1 -> v2: - Added missing Signed-off-by in patch. - Renamed BR2_PACKAGE_HOST_LLVM_ARCH_SUPPORT to BR2_PACKAGE_LLVM_ARCH_SUPPORTS and made its dependencies more readable. - Fixed indentation of help texts in Config.in. - Changed comment in Config.in to use the standard Buildroot wording. - Handle converting Buildroot's target architecture to LLVM's in Config.in instead of in llvm.mk. - Change LLVM_LICENSE to use the SPDX license string. - Use hooks in llvm.mk instead of appending commands to LLVM_*_CMDS. - Fixed all the code style issues pointed out by support/scripts/check-package. --- package/Config.in | 1 + ...-Clean-up-exported-values-update-for-shar.patch | 58 +++++++++++ package/llvm/Config.in | 54 ++++++++++ package/llvm/llvm.hash | 2 + package/llvm/llvm.mk | 116 +++++++++++++++++++++ 5 files changed, 231 insertions(+) create mode 100644 package/llvm/0007-llvm-config-Clean-up-exported-values-update-for-shar.patch create mode 100644 package/llvm/Config.in create mode 100644 package/llvm/llvm.hash create mode 100644 package/llvm/llvm.mk