Bug 183116

Summary: [CMake][OpenVR] Linkage errors happen because only OpenVR is compiled with -stdlib=libc++ if Clang is used
Product: WebKit Reporter: Fujii Hironori <Hironori.Fujii>
Component: WebKitGTKAssignee: Fujii Hironori <Hironori.Fujii>
Status: RESOLVED FIXED    
Severity: Normal CC: bugs-noreply, commit-queue, svillar, zan
Priority: P2    
Version: WebKit Nightly Build   
Hardware: Unspecified   
OS: Unspecified   
Bug Depends on:    
Bug Blocks: 145121    
Attachments:
Description Flags
Patch none

Description Fujii Hironori 2018-02-25 20:35:21 PST
trunk@228984

> export CC=clang-5.0
> export CXX=clang++-5.0
> ./Tools/Scripts/build-webkit --gtk --release

> FAILED: bin/TestWebKitAPI/WebCore/TestWebCore 
> : && /usr/bin/clang++-5.0  -fdiagnostics-color=always -fcolor-diagnostics -Wno-parentheses-equality -Wno-noexcept-type -Qunused-arguments -Wwrite-strings -Wundef -Wpointer-arith -Wmissing-format-attribute -Wformat-security -Wcast-align -Wextra -Wall  -fno-strict-aliasing -fno-exceptions -std=c++14 -fno-rtti -O3 -DNDEBUG  -L/home/fujii/work/webkit/ga/WebKitBuild/DependenciesGTK/Root/lib -fuse-ld=gold -Wl,--disable-new-dtags   -rdynamic Tools/TestWebKitAPI/CMakeFiles/TestWebCore.dir/gtk/main.cpp.o Tools/TestWebKitAPI/CMakeFiles/TestWebCore.dir/glib/UtilitiesGLib.cpp.o Tools/TestWebKitAPI/CMakeFiles/TestWebCore.dir/TestsController.cpp.o Tools/TestWebKitAPI/CMakeFiles/TestWebCore.dir/Tests/WebCore/CSSParser.cpp.o Tools/TestWebKitAPI/CMakeFiles/TestWebCore.dir/Tests/WebCore/ComplexTextController.cpp.o Tools/TestWebKitAPI/CMakeFiles/TestWebCore.dir/Tests/WebCore/FileMonitor.cpp.o Tools/TestWebKitAPI/CMakeFiles/TestWebCore.dir/Tests/WebCore/FileSystem.cpp.o Tools/TestWebKitAPI/CMakeFiles/TestWebCore.dir/Tests/WebCore/GridPosition.cpp.o Tools/TestWebKitAPI/CMakeFiles/TestWebCore.dir/Tests/WebCore/HTMLParserIdioms.cpp.o Tools/TestWebKitAPI/CMakeFiles/TestWebCore.dir/Tests/WebCore/LayoutUnit.cpp.o Tools/TestWebKitAPI/CMakeFiles/TestWebCore.dir/Tests/WebCore/MIMETypeRegistry.cpp.o Tools/TestWebKitAPI/CMakeFiles/TestWebCore.dir/Tests/WebCore/PublicSuffix.cpp.o Tools/TestWebKitAPI/CMakeFiles/TestWebCore.dir/Tests/WebCore/SecurityOrigin.cpp.o Tools/TestWebKitAPI/CMakeFiles/TestWebCore.dir/Tests/WebCore/SharedBuffer.cpp.o Tools/TestWebKitAPI/CMakeFiles/TestWebCore.dir/Tests/WebCore/SharedBufferTest.cpp.o Tools/TestWebKitAPI/CMakeFiles/TestWebCore.dir/Tests/WebCore/URL.cpp.o Tools/TestWebKitAPI/CMakeFiles/TestWebCore.dir/Tests/WebCore/URLParser.cpp.o Tools/TestWebKitAPI/CMakeFiles/TestWebCore.dir/Tests/WebCore/UserAgentQuirks.cpp.o Tools/TestWebKitAPI/CMakeFiles/TestWebCore.dir/Tests/WebCore/SampleMap.cpp.o  -o bin/TestWebKitAPI/WebCore/TestWebCore  -Wl,-rpath,/home/fujii/work/webkit/ga/WebKitBuild/Release/lib -Wl,--whole-archive lib/libWTFGTK.a -Wl,--no-whole-archive -Wl,--whole-archive lib/libWebCoreGTK.a -Wl,--no-whole-archive -Wl,--whole-archive lib/libgtest.so -Wl,--no-whole-archive -Wl,--whole-archive lib/libWebCorePlatformGTK.a -Wl,--no-whole-archive -Wl,--whole-archive -lgdk-3 -Wl,--no-whole-archive -Wl,--whole-archive -lpangocairo-1.0 -Wl,--no-whole-archive -Wl,--whole-archive -lpango-1.0 -Wl,--no-whole-archive -Wl,--whole-archive -lgdk_pixbuf-2.0 -Wl,--no-whole-archive -Wl,--whole-archive -lcairo-gobject -Wl,--no-whole-archive -Wl,--whole-archive -lcairo -Wl,--no-whole-archive -Wl,--whole-archive -lgobject-2.0 -Wl,--no-whole-archive -Wl,--whole-archive -lglib-2.0 -Wl,--no-whole-archive -Wl,--whole-archive -lgtk-3 -Wl,--no-whole-archive -Wl,--whole-archive -lgdk-3 -Wl,--no-whole-archive -Wl,--whole-archive -lpangocairo-1.0 -Wl,--no-whole-archive -Wl,--whole-archive -lpango-1.0 -Wl,--no-whole-archive -Wl,--whole-archive -latk-1.0 -Wl,--no-whole-archive -Wl,--whole-archive -lcairo-gobject -Wl,--no-whole-archive -Wl,--whole-archive -lcairo -Wl,--no-whole-archive -Wl,--whole-archive -lgdk_pixbuf-2.0 -Wl,--no-whole-archive -Wl,--whole-archive -lgio-2.0 -Wl,--no-whole-archive -Wl,--whole-archive -lgobject-2.0 -Wl,--no-whole-archive -Wl,--whole-archive -lglib-2.0 -Wl,--no-whole-archive lib/libANGLESupport.a -lgdk-3 -lpangocairo-1.0 -lpango-1.0 -lgdk_pixbuf-2.0 -lcairo-gobject -lcairo -latk-1.0 ../DependenciesGTK/Root/lib/libxml2.so /usr/lib/x86_64-linux-gnu/libxslt.so /usr/lib/x86_64-linux-gnu/libsqlite3.so lib/libPAL.a lib/libjavascriptcoregtk-4.0.so.18.7.4 lib/libWTFGTK.a lib/libbmalloc.a -ldl ../DependenciesGTK/Root/lib/libicudata.so ../DependenciesGTK/Root/lib/libicuuc.so -lpthread ../DependenciesGTK/Root/lib/libicui18n.so /usr/lib/x86_64-linux-gnu/libGL.so /usr/lib/x86_64-linux-gnu/libEGL.so lib/libopenvr_api.a ../DependenciesGTK/Root/lib/libwoff2dec.so lib/libxdgmime.a ../DependenciesGTK/Root/lib/libcairo.so ../DependenciesGTK/Root/lib/libfontconfig.so ../DependenciesGTK/Root/lib/libfreetype.so ../DependenciesGTK/Root/lib/libharfbuzz.so ../DependenciesGTK/Root/lib/libharfbuzz-icu.so ../DependenciesGTK/Root/lib/libgcrypt.so ../DependenciesGTK/Root/lib/libgstapp-1.0.so ../DependenciesGTK/Root/lib/libgstbase-1.0.so ../DependenciesGTK/Root/lib/libgstreamer-1.0.so ../DependenciesGTK/Root/lib/libgstpbutils-1.0.so ../DependenciesGTK/Root/lib/libgstaudio-1.0.so ../DependenciesGTK/Root/lib/libgsttag-1.0.so ../DependenciesGTK/Root/lib/libgstvideo-1.0.so ../DependenciesGTK/Root/lib/libgstgl-1.0.so ../DependenciesGTK/Root/lib/libgstfft-1.0.so /usr/lib/x86_64-linux-gnu/libjpeg.so /usr/lib/x86_64-linux-gnu/libpng.so /usr/lib/x86_64-linux-gnu/libwebp.so /usr/lib/x86_64-linux-gnu/libwebpdemux.so ../DependenciesGTK/Root/lib/libatk-1.0.so ../DependenciesGTK/Root/lib/libcairo.so ../DependenciesGTK/Root/lib/libfontconfig.so ../DependenciesGTK/Root/lib/libfreetype.so ../DependenciesGTK/Root/lib/libharfbuzz.so ../DependenciesGTK/Root/lib/libharfbuzz-icu.so ../DependenciesGTK/Root/lib/libgcrypt.so ../DependenciesGTK/Root/lib/libgstapp-1.0.so ../DependenciesGTK/Root/lib/libgstbase-1.0.so ../DependenciesGTK/Root/lib/libgstreamer-1.0.so ../DependenciesGTK/Root/lib/libgstpbutils-1.0.so ../DependenciesGTK/Root/lib/libgstaudio-1.0.so ../DependenciesGTK/Root/lib/libgsttag-1.0.so ../DependenciesGTK/Root/lib/libgstvideo-1.0.so ../DependenciesGTK/Root/lib/libgstgl-1.0.so ../DependenciesGTK/Root/lib/libgstfft-1.0.so /usr/lib/x86_64-linux-gnu/libjpeg.so /usr/lib/x86_64-linux-gnu/libpng.so /usr/lib/x86_64-linux-gnu/libwebp.so /usr/lib/x86_64-linux-gnu/libwebpdemux.so ../DependenciesGTK/Root/lib/libatk-1.0.so /usr/lib/x86_64-linux-gnu/libenchant.so ../DependenciesGTK/Root/lib/libgio-2.0.so ../DependenciesGTK/Root/lib/libgmodule-2.0.so ../DependenciesGTK/Root/lib/libgobject-2.0.so ../DependenciesGTK/Root/lib/libglib-2.0.so -lsecret-1 ../DependenciesGTK/Root/lib/libsoup-2.4.so /usr/lib/x86_64-linux-gnu/libtasn1.so /usr/lib/x86_64-linux-gnu/libhyphen.so /usr/lib/x86_64-linux-gnu/libX11.so /usr/lib/x86_64-linux-gnu/libXcomposite.so /usr/lib/x86_64-linux-gnu/libXdamage.so /usr/lib/x86_64-linux-gnu/libXrender.so /usr/lib/x86_64-linux-gnu/libXt.so /usr/lib/x86_64-linux-gnu/libz.so -lwayland-server -lwayland-egl -lwayland-client -lgobject-2.0 -lglib-2.0 -lgio-2.0 -lgobject-2.0 -lglib-2.0 -lgio-2.0 && :
> lib/libopenvr_api.a(lib/../Source/ThirdParty/openvr/src/CMakeFiles/openvr_api.dir/openvr_api_public.cpp.o):../../Source/ThirdParty/openvr/src/openvr_api_public.cpp:function VR_InitInternal2: error: undefined reference to 'std::__1::recursive_mutex::lock()'
> lib/libopenvr_api.a(lib/../Source/ThirdParty/openvr/src/CMakeFiles/openvr_api.dir/openvr_api_public.cpp.o):../../Source/ThirdParty/openvr/src/openvr_api_public.cpp:function VR_InitInternal2: error: undefined reference to 'std::__1::recursive_mutex::unlock()'
> lib/libopenvr_api.a(lib/../Source/ThirdParty/openvr/src/CMakeFiles/openvr_api.dir/openvr_api_public.cpp.o):../../Source/ThirdParty/openvr/src/openvr_api_public.cpp:function VR_InitInternal2: error: undefined reference to 'std::__1::recursive_mutex::unlock()'
> lib/libopenvr_api.a(lib/../Source/ThirdParty/openvr/src/CMakeFiles/openvr_api.dir/openvr_api_public.cpp.o):../../Source/ThirdParty/openvr/src/openvr_api_public.cpp:function vr::VR_LoadHmdSystemInternal(): error: undefined reference to 'std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >::__init(char const*, unsigned long)'
> lib/libopenvr_api.a(lib/../Source/ThirdParty/openvr/src/CMakeFiles/openvr_api.dir/openvr_api_public.cpp.o):../../Source/ThirdParty/openvr/src/openvr_api_public.cpp:function vr::VR_LoadHmdSystemInternal(): error: undefined reference to 'std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >::__init(char const*, unsigned long)'
> lib/libopenvr_api.a(lib/../Source/ThirdParty/openvr/src/CMakeFiles/openvr_api.dir/openvr_api_public.cpp.o):../../Source/ThirdParty/openvr/src/openvr_api_public.cpp:function vr::VR_LoadHmdSystemInternal(): error: undefined reference to 'std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >::~basic_string()'
> lib/libopenvr_api.a(lib/../Source/ThirdParty/openvr/src/CMakeFiles/openvr_api.dir/openvr_api_public.cpp.o):../../Source/ThirdParty/openvr/src/openvr_api_public.cpp:function vr::VR_LoadHmdSystemInternal(): error: undefined reference to 'std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >::~basic_string()'

Full build log: https://gist.github.com/fujii/fcf073f8648fac237d4fe38a3ee408f1

-stdlib=libc++ is given only when Clang is used.
https://trac.webkit.org/browser/webkit/trunk/Source/ThirdParty/openvr/CMakeLists.txt?rev=227518#L46
Comment 1 Fujii Hironori 2018-02-25 20:46:15 PST
This is configurable by the option USE_LIBCXX.

https://trac.webkit.org/browser/webkit/trunk/Source/ThirdParty/openvr/CMakeLists.txt?rev=227518#L7

> option(USE_LIBCXX "Uses libc++ instead of libstdc++" ON)
Comment 2 Fujii Hironori 2018-02-25 21:14:31 PST
Created attachment 334590 [details]
Patch
Comment 3 Zan Dobersek 2018-02-25 23:37:12 PST
Comment on attachment 334590 [details]
Patch

LGTM. I guess the whole "Enable some properties" section could be removed in the future.
Comment 4 WebKit Commit Bot 2018-02-26 00:01:17 PST
Comment on attachment 334590 [details]
Patch

Clearing flags on attachment: 334590

Committed r228985: <https://trac.webkit.org/changeset/228985>
Comment 5 WebKit Commit Bot 2018-02-26 00:01:18 PST
All reviewed patches have been landed.  Closing bug.