diff mbox series

[v3,1/6] package/compiler-rt: new package

Message ID 1542595067-45972-1-git-send-email-matthew.weber@rockwellcollins.com
State Superseded
Headers show
Series [v3,1/6] package/compiler-rt: new package | expand

Commit Message

Matt Weber Nov. 19, 2018, 2:37 a.m. UTC
This patch adds support for the compiler-rt (CLANG runtime) library.
It builds a set of static libraries and installs them into the
CLANG/LLVM toolchain resource folder.

Signed-off-by: Matthew Weber <matthew.weber@rockwellcollins.com>
Cc: Romain Naour <romain.naour@smile.fr>
Cc: Ricardo Martincoski <ricardo.martincoski@gmail.com>
---
Changes
v1 -> v2
[Romain
 - Removed unnecessary host-cmake dependency

v2 -> v3
[Romain
 - Update to use COMPILER_RT_INSTALL_PATH for library install
[Ricardo
 - Fixed check-package extra line
 - Spelling in commit message
---
 DEVELOPERS                           |  1 +
 package/Config.in                    |  1 +
 package/compiler-rt/Config.in        | 12 ++++++++++++
 package/compiler-rt/compiler-rt.hash |  3 +++
 package/compiler-rt/compiler-rt.mk   | 33 +++++++++++++++++++++++++++++++++
 5 files changed, 50 insertions(+)
 create mode 100644 package/compiler-rt/Config.in
 create mode 100644 package/compiler-rt/compiler-rt.hash
 create mode 100644 package/compiler-rt/compiler-rt.mk

Comments

Valentin Korenblit Nov. 21, 2018, 6:48 a.m. UTC | #1
Hi Matt,

> This patch adds support for the compiler-rt (CLANG runtime) library.
> It builds a set of static libraries and installs them into the
> CLANG/LLVM toolchain resource folder.
>
> Signed-off-by: Matthew Weber<matthew.weber@rockwellcollins.com>
> Cc: Romain Naour<romain.naour@smile.fr>
> Cc: Ricardo Martincoski<ricardo.martincoski@gmail.com>
> ---
> Changes
> v1 -> v2
> [Romain
>   - Removed unnecessary host-cmake dependency
>
> v2 -> v3
> [Romain
>   - Update to use COMPILER_RT_INSTALL_PATH for library install
> [Ricardo
>   - Fixed check-package extra line
>   - Spelling in commit message
> ---

I've just tried to build compiler-rt for arm with uclibc and got the following:

buildroot/test/build/compiler-rt-7.0.0/lib/interception/interception_linux.cc:
In function ‘void* __interception::GetFuncAddrVer(const char*, const char*)’:
buildroot/test/build/compiler-rt-7.0.0/lib/interception/interception_linux.cc:48:10: error:
‘dlvsym’ was not declared in this scope
  return dlvsym(RTLD_NEXT, func_name, ver);
           ^~~~~~
buildroot/test/build/compiler-rt-7.0.0/lib/interception/interception_linux.cc:48:10: note:
suggested alternative: ‘dlsym’
return dlvsym(RTLD_NEXT, func_name, ver);
        ^~~~~~
        dlsym


buildroot/test/build/compiler-rt-7.0.0/lib/sanitizer_common/sanitizer_platform_limits_posix.cc:141:10:
fatal error: obstack.h: No such file or directory
  #include <obstack.h>
           ^~~~~~~~~~~
compilation terminated.


It seems we depend on glibc, haven't tried with musl yet.

Best regards,

Valentin
<html>
  <head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
  </head>
  <body text="#000000" bgcolor="#FFFFFF">
    <pre>Hi Matt,</pre>
    <blockquote type="cite"
cite="mid:1542595067-45972-1-git-send-email-matthew.weber@rockwellcollins.com">
      <pre class="moz-quote-pre" wrap="">This patch adds support for the compiler-rt (CLANG runtime) library.
It builds a set of static libraries and installs them into the
CLANG/LLVM toolchain resource folder.

Signed-off-by: Matthew Weber <a class="moz-txt-link-rfc2396E" href="mailto:matthew.weber@rockwellcollins.com">&lt;matthew.weber@rockwellcollins.com&gt;</a>
Cc: Romain Naour <a class="moz-txt-link-rfc2396E" href="mailto:romain.naour@smile.fr">&lt;romain.naour@smile.fr&gt;</a>
Cc: Ricardo Martincoski <a class="moz-txt-link-rfc2396E" href="mailto:ricardo.martincoski@gmail.com">&lt;ricardo.martincoski@gmail.com&gt;</a>
---
Changes
v1 -&gt; v2
[Romain
 - Removed unnecessary host-cmake dependency

v2 -&gt; v3
[Romain
 - Update to use COMPILER_RT_INSTALL_PATH for library install
[Ricardo
 - Fixed check-package extra line
 - Spelling in commit message
---
</pre>
    </blockquote>
    <pre>I've just tried to build compiler-rt for arm with uclibc and got the following:

buildroot/test/build/compiler-rt-7.0.0/lib/interception/interception_linux.cc: 
In function ‘void* __interception::GetFuncAddrVer(const char*, const char*)’:
buildroot/test/build/compiler-rt-7.0.0/lib/interception/interception_linux.cc:48:10: error: 
‘dlvsym’ was not declared in this scope 
 return dlvsym(RTLD_NEXT, func_name, ver);
          ^~~~~~
buildroot/test/build/compiler-rt-7.0.0/lib/interception/interception_linux.cc:48:10: note: 
suggested alternative: ‘dlsym’
return dlvsym(RTLD_NEXT, func_name, ver);
       ^~~~~~
       dlsym


buildroot/test/build/compiler-rt-7.0.0/lib/sanitizer_common/sanitizer_platform_limits_posix.cc:141:10: 
fatal error: obstack.h: No such file or directory
 #include &lt;obstack.h&gt;
          ^~~~~~~~~~~
compilation terminated.


It seems we depend on glibc, haven't tried with musl yet.

Best regards,

Valentin
</pre>
  </body>
</html>
Matt Weber Nov. 21, 2018, 2 p.m. UTC | #2
Valentin,

On Wed, Nov 21, 2018 at 12:48 AM Valentin Korenblit
<valentinkorenblit@gmail.com> wrote:
>
> Hi Matt,
>
> This patch adds support for the compiler-rt (CLANG runtime) library.
> It builds a set of static libraries and installs them into the
> CLANG/LLVM toolchain resource folder.
>
> Signed-off-by: Matthew Weber <matthew.weber@rockwellcollins.com>
> Cc: Romain Naour <romain.naour@smile.fr>
> Cc: Ricardo Martincoski <ricardo.martincoski@gmail.com>
> ---
> Changes
> v1 -> v2
> [Romain
>  - Removed unnecessary host-cmake dependency
>
> v2 -> v3
> [Romain
>  - Update to use COMPILER_RT_INSTALL_PATH for library install
> [Ricardo
>  - Fixed check-package extra line
>  - Spelling in commit message
> ---
>
> I've just tried to build compiler-rt for arm with uclibc and got the following:
>
> buildroot/test/build/compiler-rt-7.0.0/lib/interception/interception_linux.cc:
> In function ‘void* __interception::GetFuncAddrVer(const char*, const char*)’:
> buildroot/test/build/compiler-rt-7.0.0/lib/interception/interception_linux.cc:48:10: error:
> ‘dlvsym’ was not declared in this scope
>  return dlvsym(RTLD_NEXT, func_name, ver);
>           ^~~~~~
> buildroot/test/build/compiler-rt-7.0.0/lib/interception/interception_linux.cc:48:10: note:
> suggested alternative: ‘dlsym’
> return dlvsym(RTLD_NEXT, func_name, ver);
>        ^~~~~~
>        dlsym
>
>
> buildroot/test/build/compiler-rt-7.0.0/lib/sanitizer_common/sanitizer_platform_limits_posix.cc:141:10:
> fatal error: obstack.h: No such file or directory
>  #include <obstack.h>
>           ^~~~~~~~~~~
> compilation terminated.
>
>
> It seems we depend on glibc, haven't tried with musl yet.
>

Ah yes.   I've only tested with glibc.  I'll kickoff some builds.  I
didn't realize llvm and clang could build with uclibc.  I expect musl
to work.

Matt
diff mbox series

Patch

diff --git a/DEVELOPERS b/DEVELOPERS
index 53467da..e78d649 100644
--- a/DEVELOPERS
+++ b/DEVELOPERS
@@ -1360,6 +1360,7 @@  F:	package/bridge-utils/
 F:	package/checkpolicy/
 F:	package/checksec/
 F:	package/cgroupfs-mount/
+F:	package/compiler-rt/
 F:	package/crda/
 F:	package/devmem2/
 F:	package/dnsmasq/
diff --git a/package/Config.in b/package/Config.in
index b60e770..73ddc2d 100644
--- a/package/Config.in
+++ b/package/Config.in
@@ -1602,6 +1602,7 @@  menu "Other"
 	source "package/clapack/Config.in"
 	source "package/classpath/Config.in"
 	source "package/cmocka/Config.in"
+	source "package/compiler-rt/Config.in"
 	source "package/cppcms/Config.in"
 	source "package/cracklib/Config.in"
 	source "package/dawgdic/Config.in"
diff --git a/package/compiler-rt/Config.in b/package/compiler-rt/Config.in
new file mode 100644
index 0000000..e15d3aa
--- /dev/null
+++ b/package/compiler-rt/Config.in
@@ -0,0 +1,12 @@ 
+config BR2_PACKAGE_COMPILER_RT
+	bool "compiler-rt"
+	depends on BR2_PACKAGE_LLVM
+	help
+	  A collection of runtime libraries primarily used by clang and
+	  llvm to provide builtins, sanitizer runtimes, and profiling
+	  at runtime.
+
+	  https://compiler-rt.llvm.org/
+
+comment "compiler-rt requires llvm to be enabled"
+	depends on !BR2_PACKAGE_LLVM
diff --git a/package/compiler-rt/compiler-rt.hash b/package/compiler-rt/compiler-rt.hash
new file mode 100644
index 0000000..df6ed19
--- /dev/null
+++ b/package/compiler-rt/compiler-rt.hash
@@ -0,0 +1,3 @@ 
+# Locally computed:
+sha256 bdec7fe3cf2c85f55656c07dfb0bd93ae46f2b3dd8f33ff3ad6e7586f4c670d6  compiler-rt-7.0.0.src.tar.xz
+sha256 417541d990edb3f96327ac03cb67e52eac80fc5c3e7afc69213cd04d7c3b9b27  LICENSE.TXT
diff --git a/package/compiler-rt/compiler-rt.mk b/package/compiler-rt/compiler-rt.mk
new file mode 100644
index 0000000..fc64707
--- /dev/null
+++ b/package/compiler-rt/compiler-rt.mk
@@ -0,0 +1,33 @@ 
+################################################################################
+#
+# compiler-rt
+#
+################################################################################
+
+# Compiler-RT should be bumped together with LLVM and Clang as the run-time is
+# tied to the version of those tools
+COMPILER_RT_VERSION = 7.0.0
+COMPILER_RT_SOURCE = compiler-rt-$(COMPILER_RT_VERSION).src.tar.xz
+COMPILER_RT_SITE = http://llvm.org/releases/$(COMPILER_RT_VERSION)
+COMPILER_RT_LICENSE = NCSA MIT
+COMPILER_RT_LICENSE_FILES = LICENSE.TXT
+COMPILER_RT_DEPENDENCIES = host-clang llvm
+
+COMPILER_RT_INSTALL_STAGING = YES
+COMPILER_RT_INSTALL_TARGET = NO
+
+# The installation of the target runtime libraries is currently into the
+# host-{clang,llvm} resources directory. The "resources" directory is loosely
+# document and this location will probably need revisited when making the
+# llvm/clang tools SDK relocatable.
+COMPILER_RT_CONF_OPTS=-DCOMPILER_RT_INCLUDE_TESTS=ON \
+	-DCOMPILER_RT_STANDALONE_BUILD=ON \
+	-DCOMPILER_RT_DEFAULT_TARGET_TRIPLE=$(GNU_TARGET_NAME) \
+	-DLLVM_CONFIG_PATH=$(HOST_DIR)/usr/bin/llvm-config \
+	-DCOMPILER_RT_INSTALL_PATH=$(HOST_DIR)/lib/clang/$(HOST_CLANG_VERSION)/
+
+define COMPILER_RT_INSTALL_STAGING_CMDS
+	$(TARGET_MAKE_ENV) $(MAKE) -C $(@D) install/fast
+endef
+
+$(eval $(cmake-package))