[V2] vulkan-samples: fix do_compile failure

Submitted by changqing.li@windriver.com on Nov. 16, 2020, 1:43 a.m. | Patch ID: 178043

Details

Message ID 20201116014342.10081-1-changqing.li@windriver.com
State Accepted
Commit 65410c5ff4f9c34758d1e2270132c631166e7d1a
Headers show

Commit Message

changqing.li@windriver.com Nov. 16, 2020, 1:43 a.m.
fix error:
| framework/lib/ppc/libframework.a(device.cpp.o): in function `std::__atomic_base<unsigned long long>::load(std::memory_order) const':
| /usr/include/c++/10.2.0/bits/atomic_base.h:426: undefined reference to `__atomic_load_8'

some arch don't have built-in atomic, so need to link it
explicitly

Signed-off-by: Changqing Li <changqing.li@windriver.com>

---
 ...inst-libatomic-if-no-built-in-atomic.patch | 117 ++++++++++++++++++
 .../vulkan/vulkan-samples_git.bb              |   2 +
 2 files changed, 119 insertions(+)
 create mode 100644 meta/recipes-graphics/vulkan/vulkan-samples/0001-support-link-against-libatomic-if-no-built-in-atomic.patch

-- 
2.26.2
-=-=-=-=-=-=-=-=-=-=-=-
Links: You receive all messages sent to this group.
View/Reply Online (#144604): https://lists.openembedded.org/g/openembedded-core/message/144604
Mute This Topic: https://lists.openembedded.org/mt/78283898/1003190
Group Owner: openembedded-core+owner@lists.openembedded.org
Unsubscribe: https://lists.openembedded.org/g/openembedded-core/unsub [mhalstead@linuxfoundation.org]
-=-=-=-=-=-=-=-=-=-=-=-

Patch hide | download patch | download mbox

diff --git a/meta/recipes-graphics/vulkan/vulkan-samples/0001-support-link-against-libatomic-if-no-built-in-atomic.patch b/meta/recipes-graphics/vulkan/vulkan-samples/0001-support-link-against-libatomic-if-no-built-in-atomic.patch
new file mode 100644
index 0000000000..6c0fb60868
--- /dev/null
+++ b/meta/recipes-graphics/vulkan/vulkan-samples/0001-support-link-against-libatomic-if-no-built-in-atomic.patch
@@ -0,0 +1,117 @@ 
+From e20a5d13935a41a856e8f71c49f2cc9d81b1d92c Mon Sep 17 00:00:00 2001
+From: Changqing Li <changqing.li@windriver.com>
+Date: Fri, 13 Nov 2020 17:07:00 +0800
+Subject: [PATCH] support link against libatomic if no built-in atomic exist
+
+fix error:
+| framework/lib/ppc/libframework.a(device.cpp.o): in function `std::__atomic_base<unsigned long long>::load(std::memory_order) const':
+| /usr/include/c++/10.2.0/bits/atomic_base.h:426: undefined reference to `__atomic_load_8'
+
+Upstream-Status: Submitted [https://github.com/KhronosGroup/Vulkan-Samples/pull/212]
+
+Signed-off-by: Changqing Li <changqing.li@windriver.com>
+---
+ CMakeLists.txt                  |  1 +
+ bldsys/cmake/check_atomic.cmake | 62 +++++++++++++++++++++++++++++++++
+ framework/CMakeLists.txt        |  4 +++
+ 3 files changed, 67 insertions(+)
+ create mode 100644 bldsys/cmake/check_atomic.cmake
+
+diff --git a/CMakeLists.txt b/CMakeLists.txt
+index e72e829..466f51d 100644
+--- a/CMakeLists.txt
++++ b/CMakeLists.txt
+@@ -42,6 +42,7 @@ endmacro(vulkan_samples_pch)
+ include(utils)
+ include(global_options)
+ include(sample_helper)
++include(check_atomic)
+ 
+ # Add third party libraries
+ add_subdirectory(third_party)
+diff --git a/bldsys/cmake/check_atomic.cmake b/bldsys/cmake/check_atomic.cmake
+new file mode 100644
+index 0000000..6b47a7a
+--- /dev/null
++++ b/bldsys/cmake/check_atomic.cmake
+@@ -0,0 +1,62 @@
++# check weither need to link atomic library explicitly
++INCLUDE(CheckCXXSourceCompiles)
++INCLUDE(CheckLibraryExists)
++
++if(NOT DEFINED VULKAN_COMPILER_IS_GCC_COMPATIBLE)
++  if(CMAKE_COMPILER_IS_GNUCXX)
++    set(VULKAN_COMPILER_IS_GCC_COMPATIBLE ON) 
++  elseif( MSVC )
++    set(VULKAN_COMPILER_IS_GCC_COMPATIBLE OFF)
++  elseif( "${CMAKE_CXX_COMPILER_ID}" MATCHES "Clang" )
++    set(VULKAN_COMPILER_IS_GCC_COMPATIBLE ON) 
++  elseif( "${CMAKE_CXX_COMPILER_ID}" MATCHES "Intel" )
++    set(VULKAN_COMPILER_IS_GCC_COMPATIBLE ON) 
++  endif()
++endif()
++
++# Sometimes linking against libatomic is required for atomic ops, if
++# the platform doesn't support lock-free atomics.
++
++function(check_working_cxx_atomics varname)
++  set(OLD_CMAKE_REQUIRED_FLAGS ${CMAKE_REQUIRED_FLAGS})
++  set(CMAKE_REQUIRED_FLAGS "${CMAKE_REQUIRED_FLAGS} -std=c++11")
++  CHECK_CXX_SOURCE_COMPILES("
++#include <atomic>
++std::atomic<int> x;
++std::atomic<short> y;
++std::atomic<char> z;
++int main() {
++  ++z;
++  ++y;
++  return ++x;
++}
++" ${varname})
++  set(CMAKE_REQUIRED_FLAGS ${OLD_CMAKE_REQUIRED_FLAGS})
++endfunction(check_working_cxx_atomics)
++
++function(check_working_cxx_atomics64 varname)
++  set(OLD_CMAKE_REQUIRED_FLAGS ${CMAKE_REQUIRED_FLAGS})
++  set(CMAKE_REQUIRED_FLAGS "-std=c++11 ${CMAKE_REQUIRED_FLAGS}")
++  CHECK_CXX_SOURCE_COMPILES("
++#include <atomic>
++#include <cstdint>
++std::atomic<uint64_t> x (0);
++int main() {
++  uint64_t i = x.load(std::memory_order_relaxed);
++  (void)i;
++  return 0;
++}
++" ${varname})
++  set(CMAKE_REQUIRED_FLAGS ${OLD_CMAKE_REQUIRED_FLAGS})
++endfunction(check_working_cxx_atomics64)
++
++set(NEED_LINK_ATOMIC  OFF CACHE BOOL "weither need to link against atomic library")
++if(VULKAN_COMPILER_IS_GCC_COMPATIBLE)
++    # check if non-64-bit atomics work without the library.
++    check_working_cxx_atomics(HAVE_CXX_ATOMICS_WITHOUT_LIB)
++    # check 64-bit atomics work without the library.
++    check_working_cxx_atomics64(HAVE_CXX_ATOMICS64_WITHOUT_LIB)
++    if (NOT HAVE_CXX_ATOMICS_WITHOUT_LIB OR NOT HAVE_CXX_ATOMICS64_WITHOUT_LIB)
++        set(NEED_LINK_ATOMIC  ON CACHE BOOL "weither need to link to atomic library" FORCE)
++    endif()
++endif()
+diff --git a/framework/CMakeLists.txt b/framework/CMakeLists.txt
+index bf26786..322526e 100644
+--- a/framework/CMakeLists.txt
++++ b/framework/CMakeLists.txt
+@@ -412,6 +412,10 @@ target_link_libraries(${PROJECT_NAME}
+     ctpl
+     docopt)
+ 
++if(${NEED_LINK_ATOMIC})
++    target_link_libraries(${PROJECT_NAME} atomic)
++endif()
++
+ # Link platform specific libraries
+ if(ANDROID)
+     target_link_libraries(${PROJECT_NAME} log android native_app_glue)
+-- 
+2.17.1
+
diff --git a/meta/recipes-graphics/vulkan/vulkan-samples_git.bb b/meta/recipes-graphics/vulkan/vulkan-samples_git.bb
index 241a313a7b..980557a3b9 100644
--- a/meta/recipes-graphics/vulkan/vulkan-samples_git.bb
+++ b/meta/recipes-graphics/vulkan/vulkan-samples_git.bb
@@ -5,7 +5,9 @@  LIC_FILES_CHKSUM = "file://LICENSE;md5=48aa35cefb768436223a6e7f18dc2a2a"
 
 SRC_URI = "gitsm://github.com/KhronosGroup/Vulkan-Samples.git \
            file://0001-CMakeLists.txt-do-not-hardcode-lib-as-installation-t.patch \
+           file://0001-support-link-against-libatomic-if-no-built-in-atomic.patch \
            "
+
 UPSTREAM_CHECK_COMMITS = "1"
 SRCREV = "f52361d3cd6ac8c30fc3365a464b4e220c32cfd6"