All of lore.kernel.org
 help / color / mirror / Atom feed
* [Buildroot] [PATCH 1/1] package/glog: fix build without threads
@ 2022-08-09 21:18 Fabrice Fontaine
  2022-08-10 21:22 ` Thomas Petazzoni via buildroot
  2022-08-11 21:00 ` Thomas Petazzoni via buildroot
  0 siblings, 2 replies; 4+ messages in thread
From: Fabrice Fontaine @ 2022-08-09 21:18 UTC (permalink / raw)
  To: buildroot; +Cc: Fabrice Fontaine, Rahul Bedarkar

Fix the following build failure without threads raised since bump to
version 0.6.0 in commit 017dbc770c4fd58d7d52cf290dd3fc39a3603e0d and
https://github.com/google/glog/commit/4a4331f2f2de4c35ce72badf0bdc604c04eebb26:

CMake Error at /home/giuliobenetti/autobuild/run/instance-1/output-1/build/glog-0.6.0/CMakeFiles/CMakeTmp/CMakeLists.txt:18 (add_executable):
  Target "cmTC_ed950" links to target "Threads::Threads" but the target was
  not found.  Perhaps a find_package() call is missing for an IMPORTED
  target, or an ALIAS target is missing?

Fixes:
 - http://autobuild.buildroot.org/results/bf0846a51da69169286c7af38089d204d3d242d1

Signed-off-by: Fabrice Fontaine <fontaine.fabrice@gmail.com>
---
 .../glog/0001-added-emscripten-support.patch  | 290 ++++++++++++++++++
 1 file changed, 290 insertions(+)
 create mode 100644 package/glog/0001-added-emscripten-support.patch

diff --git a/package/glog/0001-added-emscripten-support.patch b/package/glog/0001-added-emscripten-support.patch
new file mode 100644
index 0000000000..d47085bc28
--- /dev/null
+++ b/package/glog/0001-added-emscripten-support.patch
@@ -0,0 +1,290 @@
+From 6ed0c9e58b11680779c571996a3007bd972e0853 Mon Sep 17 00:00:00 2001
+From: Sergiu Deitsch <sergiud@users.noreply.github.com>
+Date: Thu, 4 Aug 2022 22:52:47 +0200
+Subject: [PATCH] added emscripten support (#846)
+
+[Retrieved from:
+https://github.com/google/glog/commit/6ed0c9e58b11680779c571996a3007bd972e0853]
+Signed-off-by: Fabrice Fontaine <fontaine.fabrice@gmail.com>
+---
+ .github/workflows/emscripten.yml | 60 ++++++++++++++++++++++++++++++++
+ CMakeLists.txt                   | 14 ++++----
+ src/config.h.cmake.in            |  6 ++--
+ src/glog/logging.h.in            |  6 ++--
+ src/glog/platform.h              |  2 ++
+ src/logging.cc                   | 11 ++++--
+ src/raw_logging.cc               |  9 ++---
+ src/stacktrace_unwind-inl.h      |  2 +-
+ src/symbolize.cc                 |  2 +-
+ src/utilities.h                  |  2 +-
+ 10 files changed, 93 insertions(+), 21 deletions(-)
+ create mode 100644 .github/workflows/emscripten.yml
+
+diff --git a/.github/workflows/emscripten.yml b/.github/workflows/emscripten.yml
+new file mode 100644
+index 00000000..566c67eb
+--- /dev/null
++++ b/.github/workflows/emscripten.yml
+@@ -0,0 +1,60 @@
++name: Emscripten
++
++on: [push, pull_request]
++
++jobs:
++  build-linux:
++    defaults:
++      run:
++        shell: bash
++    name: Emscripten-C++${{matrix.std}}-${{matrix.build_type}}-${{matrix.lib}}-${{matrix.extra}}
++    runs-on: ubuntu-latest
++    container: emscripten/emsdk
++    strategy:
++      fail-fast: true
++      matrix:
++        build_type: [Release, Debug]
++        extra: [no-custom-prefix, custom-prefix]
++        lib: [static]
++        std: [98, 11, 14, 17, 20]
++
++    steps:
++      - uses: actions/checkout@v2
++
++      - name: Setup Dependencies
++        run: |
++          apt-get update
++          DEBIAN_FRONTEND=noninteractive sudo apt-get install -y \
++            cmake \
++            ninja-build
++
++      - name: Setup C++98 Environment
++        if: matrix.std == '98'
++        run: |
++          echo 'CXXFLAGS=-Wno-error=variadic-macros -Wno-error=long-long ${{env.CXXFLAGS}}' >> $GITHUB_ENV
++
++      - name: Configure
++        env:
++          CXXFLAGS: -Wall -Wextra -Wsign-conversion -Wtautological-compare -Wformat-nonliteral -Wundef -Werror -Wno-error=wasm-exception-spec ${{env.CXXFLAGS}}
++        run: |
++          cmake -S . -B build_${{matrix.build_type}} \
++            -DBUILD_SHARED_LIBS=${{matrix.lib == 'shared'}} \
++            -DCMAKE_AR=$(which emar) \
++            -DCMAKE_C_COMPILER=$(which emcc) \
++            -DCMAKE_CXX_COMPILER=$(which em++) \
++            -DCMAKE_CXX_STANDARD=${{matrix.std}} \
++            -DCMAKE_CXX_STANDARD_REQUIRED=ON \
++            -DCMAKE_FIND_ROOT_PATH_MODE_INCLUDE=ONLY \
++            -DCMAKE_FIND_ROOT_PATH_MODE_LIBRARY=ONLY \
++            -DCMAKE_FIND_ROOT_PATH_MODE_PACKAGE=ONLY \
++            -DCMAKE_FIND_ROOT_PATH_MODE_PROGRAM=NEVER \
++            -DCMAKE_INSTALL_PREFIX=${{github.workspace}}/install \
++            -DCMAKE_RANLIB=$(which emranlib) \
++            -DWITH_CUSTOM_PREFIX=${{matrix.extra == 'custom-prefix'}} \
++            -G Ninja \
++            -Werror
++
++      - name: Build
++        run: |
++          cmake --build build_${{matrix.build_type}} \
++                --config ${{matrix.build_type}}
+diff --git a/CMakeLists.txt b/CMakeLists.txt
+index 643a8b8a..ce6daa40 100644
+--- a/CMakeLists.txt
++++ b/CMakeLists.txt
+@@ -93,11 +93,11 @@ find_package (Unwind)
+ if (Unwind_FOUND)
+   set (HAVE_LIB_UNWIND 1)
+ else (Unwind_FOUND)
+-  check_include_file_cxx (unwind.h HAVE_UNWIND_H)
+   # Check whether linking actually succeeds. ARM toolchains of LLVM unwind
+   # implementation do not necessarily provide the _Unwind_Backtrace function
+   # which causes the previous check to succeed but the linking to fail.
+   check_cxx_symbol_exists (_Unwind_Backtrace unwind.h HAVE__UNWIND_BACKTRACE)
++  check_cxx_symbol_exists (_Unwind_GetIP unwind.h HAVE__UNWIND_GETIP)
+ endif (Unwind_FOUND)
+ 
+ check_include_file_cxx (dlfcn.h HAVE_DLFCN_H)
+@@ -197,9 +197,10 @@ int main(void)
+ }
+ " HAVE___SYNC_VAL_COMPARE_AND_SWAP)
+ 
+-cmake_push_check_state (RESET)
+-set (CMAKE_REQUIRED_LIBRARIES Threads::Threads)
+-check_cxx_source_compiles ("
++if (Threads_FOUND)
++  cmake_push_check_state (RESET)
++  set (CMAKE_REQUIRED_LIBRARIES Threads::Threads)
++  check_cxx_source_compiles ("
+ #define _XOPEN_SOURCE 500
+ #include <pthread.h>
+ int main(void)
+@@ -209,8 +210,9 @@ int main(void)
+   pthread_rwlock_rdlock(&l);
+   return 0;
+ }
+-" HAVE_RWLOCK)
+-cmake_pop_check_state ()
++  " HAVE_RWLOCK)
++  cmake_pop_check_state ()
++endif (Threads_FOUND)
+ 
+ check_cxx_source_compiles ("
+ __declspec(selectany) int a;
+diff --git a/src/config.h.cmake.in b/src/config.h.cmake.in
+index b67e8a77..20b5f1c4 100644
+--- a/src/config.h.cmake.in
++++ b/src/config.h.cmake.in
+@@ -118,12 +118,12 @@
+ /* Define to 1 if you have the <unistd.h> header file. */
+ #cmakedefine HAVE_UNISTD_H ${HAVE_UNISTD_H}
+ 
+-/* Define if you have the <unwind.h> header file. */
+-#cmakedefine HAVE_UNWIND_H
+-
+ /* Define if you linking to _Unwind_Backtrace is possible. */
+ #cmakedefine HAVE__UNWIND_BACKTRACE
+ 
++/* Define if you linking to _Unwind_GetIP is possible. */
++#cmakedefine HAVE__UNWIND_GETIP
++
+ /* define if the compiler supports using expression for operator */
+ #cmakedefine HAVE_USING_OPERATOR
+ 
+diff --git a/src/glog/logging.h.in b/src/glog/logging.h.in
+index c6def152..098e28fe 100644
+--- a/src/glog/logging.h.in
++++ b/src/glog/logging.h.in
+@@ -97,7 +97,7 @@
+ 
+ @ac_google_start_namespace@
+ 
+-#if @ac_cv_have_uint16_t@      // the C99 format
++#if @ac_cv_have_stdint_h@      // the C99 format
+ typedef int32_t int32;
+ typedef uint32_t uint32;
+ typedef int64_t int64;
+@@ -1822,8 +1822,8 @@ GLOG_EXPORT void SetEmailLogging(LogSeverity min_severity,
+ 
+ // A simple function that sends email. dest is a commma-separated
+ // list of addressess.  Thread-safe.
+-GLOG_EXPORT bool SendEmail(const char *dest,
+-                                    const char *subject, const char *body);
++GLOG_EXPORT bool SendEmail(const char* dest, const char* subject,
++                           const char* body);
+ 
+ GLOG_EXPORT const std::vector<std::string>& GetLoggingDirectories();
+ 
+diff --git a/src/glog/platform.h b/src/glog/platform.h
+index e6144119..7893c45d 100644
+--- a/src/glog/platform.h
++++ b/src/glog/platform.h
+@@ -50,6 +50,8 @@
+ #define GLOG_OS_NETBSD
+ #elif defined(__OpenBSD__)
+ #define GLOG_OS_OPENBSD
++#elif defined(__EMSCRIPTEN__)
++#define GLOG_OS_EMSCRIPTEN
+ #else
+ // TODO(hamaji): Add other platforms.
+ #error Platform not supported by glog. Please consider to contribute platform information by submitting a pull request on Github.
+diff --git a/src/logging.cc b/src/logging.cc
+index e65e80e9..1df1034a 100644
+--- a/src/logging.cc
++++ b/src/logging.cc
+@@ -2188,6 +2188,7 @@ void SetExitOnDFatal(bool value) {
+ }  // namespace internal
+ }  // namespace base
+ 
++#ifndef GLOG_OS_EMSCRIPTEN
+ // Shell-escaping as we need to shell out ot /bin/mail.
+ static const char kDontNeedShellEscapeChars[] =
+             "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
+@@ -2222,14 +2223,14 @@ static string ShellEscape(const string& src) {
+   }
+   return result;
+ }
+-
++#endif
+ 
+ // use_logging controls whether the logging functions LOG/VLOG are used
+ // to log errors.  It should be set to false when the caller holds the
+ // log_mutex.
+ static bool SendEmailInternal(const char*dest, const char *subject,
+                               const char*body, bool use_logging) {
+-#ifndef __EMSCRIPTEN__
++#ifndef GLOG_OS_EMSCRIPTEN
+   if (dest && *dest) {
+     if ( use_logging ) {
+       VLOG(1) << "Trying to send TITLE:" << subject
+@@ -2275,6 +2276,12 @@ static bool SendEmailInternal(const char*dest, const char *subject,
+       }
+     }
+   }
++#else
++  (void)dest;
++  (void)subject;
++  (void)body;
++  (void)use_logging;
++  LOG(WARNING) << "Email support not available; not sending message";
+ #endif
+   return false;
+ }
+diff --git a/src/raw_logging.cc b/src/raw_logging.cc
+index 43159832..befeac89 100644
+--- a/src/raw_logging.cc
++++ b/src/raw_logging.cc
+@@ -59,11 +59,12 @@
+ # include <unistd.h>
+ #endif
+ 
+-#if (defined(HAVE_SYSCALL_H) || defined(HAVE_SYS_SYSCALL_H)) && (!(defined(GLOG_OS_MACOSX)))
+-# define safe_write(fd, s, len)  syscall(SYS_write, fd, s, len)
++#if (defined(HAVE_SYSCALL_H) || defined(HAVE_SYS_SYSCALL_H)) && \
++    (!(defined(GLOG_OS_MACOSX))) && !defined(GLOG_OS_EMSCRIPTEN)
++#define safe_write(fd, s, len) syscall(SYS_write, fd, s, len)
+ #else
+-  // Not so safe, but what can you do?
+-# define safe_write(fd, s, len)  write(fd, s, len)
++// Not so safe, but what can you do?
++#define safe_write(fd, s, len) write(fd, s, len)
+ #endif
+ 
+ _START_GOOGLE_NAMESPACE_
+diff --git a/src/stacktrace_unwind-inl.h b/src/stacktrace_unwind-inl.h
+index fbb5f988..dc1665b4 100644
+--- a/src/stacktrace_unwind-inl.h
++++ b/src/stacktrace_unwind-inl.h
+@@ -73,7 +73,7 @@ static _Unwind_Reason_Code GetOneFrame(struct _Unwind_Context *uc, void *opq) {
+   if (targ->skip_count > 0) {
+     targ->skip_count--;
+   } else {
+-    targ->result[targ->count++] = (void *) _Unwind_GetIP(uc);
++    targ->result[targ->count++] = reinterpret_cast<void *>(_Unwind_GetIP(uc));
+   }
+ 
+   if (targ->count == targ->max_depth) {
+diff --git a/src/symbolize.cc b/src/symbolize.cc
+index 51025018..f56e97c9 100644
+--- a/src/symbolize.cc
++++ b/src/symbolize.cc
+@@ -834,7 +834,7 @@ static ATTRIBUTE_NOINLINE bool SymbolizeAndDemangle(void *pc, char *out,
+ 
+ _END_GOOGLE_NAMESPACE_
+ 
+-#elif defined(GLOG_OS_MACOSX) && defined(HAVE_DLADDR)
++#elif (defined(GLOG_OS_MACOSX) || defined(GLOG_OS_EMSCRIPTEN)) && defined(HAVE_DLADDR)
+ 
+ #include <dlfcn.h>
+ #include <cstring>
+diff --git a/src/utilities.h b/src/utilities.h
+index bd0ec632..760c142c 100644
+--- a/src/utilities.h
++++ b/src/utilities.h
+@@ -88,7 +88,7 @@
+ 
+ #if defined(HAVE_LIB_UNWIND)
+ # define STACKTRACE_H "stacktrace_libunwind-inl.h"
+-#elif defined(HAVE__UNWIND_BACKTRACE)
++#elif defined(HAVE__UNWIND_BACKTRACE) && defined(HAVE__UNWIND_GETIP)
+ # define STACKTRACE_H "stacktrace_unwind-inl.h"
+ #elif !defined(NO_FRAME_POINTER)
+ # if defined(__i386__) && __GNUC__ >= 2
-- 
2.35.1

_______________________________________________
buildroot mailing list
buildroot@buildroot.org
https://lists.buildroot.org/mailman/listinfo/buildroot

^ permalink raw reply related	[flat|nested] 4+ messages in thread

* Re: [Buildroot] [PATCH 1/1] package/glog: fix build without threads
  2022-08-09 21:18 [Buildroot] [PATCH 1/1] package/glog: fix build without threads Fabrice Fontaine
@ 2022-08-10 21:22 ` Thomas Petazzoni via buildroot
  2022-08-10 21:27   ` Fabrice Fontaine
  2022-08-11 21:00 ` Thomas Petazzoni via buildroot
  1 sibling, 1 reply; 4+ messages in thread
From: Thomas Petazzoni via buildroot @ 2022-08-10 21:22 UTC (permalink / raw)
  To: Fabrice Fontaine; +Cc: Rahul Bedarkar, buildroot

On Tue,  9 Aug 2022 23:18:37 +0200
Fabrice Fontaine <fontaine.fabrice@gmail.com> wrote:

> Fix the following build failure without threads raised since bump to
> version 0.6.0 in commit 017dbc770c4fd58d7d52cf290dd3fc39a3603e0d and
> https://github.com/google/glog/commit/4a4331f2f2de4c35ce72badf0bdc604c04eebb26:
> 
> CMake Error at /home/giuliobenetti/autobuild/run/instance-1/output-1/build/glog-0.6.0/CMakeFiles/CMakeTmp/CMakeLists.txt:18 (add_executable):
>   Target "cmTC_ed950" links to target "Threads::Threads" but the target was
>   not found.  Perhaps a find_package() call is missing for an IMPORTED
>   target, or an ALIAS target is missing?
> 
> Fixes:
>  - http://autobuild.buildroot.org/results/bf0846a51da69169286c7af38089d204d3d242d1
> 
> Signed-off-by: Fabrice Fontaine <fontaine.fabrice@gmail.com>
> ---
>  .../glog/0001-added-emscripten-support.patch  | 290 ++++++++++++++++++
>  1 file changed, 290 insertions(+)
>  create mode 100644 package/glog/0001-added-emscripten-support.patch

Do you have an explanation of the link between building without threads
and the addition of emscripten support? The link seems not obvious, at
least to me :-)

Best regards,

Thomas
-- 
Thomas Petazzoni, CTO, Bootlin
Embedded Linux and Kernel engineering
https://bootlin.com
_______________________________________________
buildroot mailing list
buildroot@buildroot.org
https://lists.buildroot.org/mailman/listinfo/buildroot

^ permalink raw reply	[flat|nested] 4+ messages in thread

* Re: [Buildroot] [PATCH 1/1] package/glog: fix build without threads
  2022-08-10 21:22 ` Thomas Petazzoni via buildroot
@ 2022-08-10 21:27   ` Fabrice Fontaine
  0 siblings, 0 replies; 4+ messages in thread
From: Fabrice Fontaine @ 2022-08-10 21:27 UTC (permalink / raw)
  To: Thomas Petazzoni; +Cc: Rahul Bedarkar, buildroot


[-- Attachment #1.1: Type: text/plain, Size: 1683 bytes --]

Le mer. 10 août 2022 à 23:22, Thomas Petazzoni <thomas.petazzoni@bootlin.com>
a écrit :

> On Tue,  9 Aug 2022 23:18:37 +0200
> Fabrice Fontaine <fontaine.fabrice@gmail.com> wrote:
>
> > Fix the following build failure without threads raised since bump to
> > version 0.6.0 in commit 017dbc770c4fd58d7d52cf290dd3fc39a3603e0d and
> >
> https://github.com/google/glog/commit/4a4331f2f2de4c35ce72badf0bdc604c04eebb26
> :
> >
> > CMake Error at
> /home/giuliobenetti/autobuild/run/instance-1/output-1/build/glog-0.6.0/CMakeFiles/CMakeTmp/CMakeLists.txt:18
> (add_executable):
> >   Target "cmTC_ed950" links to target "Threads::Threads" but the target
> was
> >   not found.  Perhaps a find_package() call is missing for an IMPORTED
> >   target, or an ALIAS target is missing?
> >
> > Fixes:
> >  -
> http://autobuild.buildroot.org/results/bf0846a51da69169286c7af38089d204d3d242d1
> >
> > Signed-off-by: Fabrice Fontaine <fontaine.fabrice@gmail.com>
> > ---
> >  .../glog/0001-added-emscripten-support.patch  | 290 ++++++++++++++++++
> >  1 file changed, 290 insertions(+)
> >  create mode 100644 package/glog/0001-added-emscripten-support.patch
>
> Do you have an explanation of the link between building without threads
> and the addition of emscripten support? The link seems not obvious, at
> least to me :-)
>

I was too slow in rebasing my PR and so upstream decided to fix the threads
issue in the same commit than emscripten:
https://github.com/google/glog/pull/841


>
> Best regards,
>
> Thomas
> --
> Thomas Petazzoni, CTO, Bootlin
> Embedded Linux and Kernel engineering
> https://bootlin.com


Best Regards,

Fabrice

[-- Attachment #1.2: Type: text/html, Size: 2849 bytes --]

[-- Attachment #2: Type: text/plain, Size: 150 bytes --]

_______________________________________________
buildroot mailing list
buildroot@buildroot.org
https://lists.buildroot.org/mailman/listinfo/buildroot

^ permalink raw reply	[flat|nested] 4+ messages in thread

* Re: [Buildroot] [PATCH 1/1] package/glog: fix build without threads
  2022-08-09 21:18 [Buildroot] [PATCH 1/1] package/glog: fix build without threads Fabrice Fontaine
  2022-08-10 21:22 ` Thomas Petazzoni via buildroot
@ 2022-08-11 21:00 ` Thomas Petazzoni via buildroot
  1 sibling, 0 replies; 4+ messages in thread
From: Thomas Petazzoni via buildroot @ 2022-08-11 21:00 UTC (permalink / raw)
  To: Fabrice Fontaine; +Cc: Rahul Bedarkar, buildroot

On Tue,  9 Aug 2022 23:18:37 +0200
Fabrice Fontaine <fontaine.fabrice@gmail.com> wrote:

> Fix the following build failure without threads raised since bump to
> version 0.6.0 in commit 017dbc770c4fd58d7d52cf290dd3fc39a3603e0d and
> https://github.com/google/glog/commit/4a4331f2f2de4c35ce72badf0bdc604c04eebb26:
> 
> CMake Error at /home/giuliobenetti/autobuild/run/instance-1/output-1/build/glog-0.6.0/CMakeFiles/CMakeTmp/CMakeLists.txt:18 (add_executable):
>   Target "cmTC_ed950" links to target "Threads::Threads" but the target was
>   not found.  Perhaps a find_package() call is missing for an IMPORTED
>   target, or an ALIAS target is missing?
> 
> Fixes:
>  - http://autobuild.buildroot.org/results/bf0846a51da69169286c7af38089d204d3d242d1
> 
> Signed-off-by: Fabrice Fontaine <fontaine.fabrice@gmail.com>
> ---
>  .../glog/0001-added-emscripten-support.patch  | 290 ++++++++++++++++++
>  1 file changed, 290 insertions(+)
>  create mode 100644 package/glog/0001-added-emscripten-support.patch

Applied to master after extending the comment in the patch itself to
indicate why we have this patch: it fixes build without threads, but
the fix is mixed in a larger commit adding emscripten support.

Thanks!

Thomas
-- 
Thomas Petazzoni, CTO, Bootlin
Embedded Linux and Kernel engineering
https://bootlin.com
_______________________________________________
buildroot mailing list
buildroot@buildroot.org
https://lists.buildroot.org/mailman/listinfo/buildroot

^ permalink raw reply	[flat|nested] 4+ messages in thread

end of thread, other threads:[~2022-08-11 21:00 UTC | newest]

Thread overview: 4+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2022-08-09 21:18 [Buildroot] [PATCH 1/1] package/glog: fix build without threads Fabrice Fontaine
2022-08-10 21:22 ` Thomas Petazzoni via buildroot
2022-08-10 21:27   ` Fabrice Fontaine
2022-08-11 21:00 ` Thomas Petazzoni via buildroot

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.