WebKit Bugzilla
New
Browse
Log In
×
Sign in with GitHub
or
Remember my login
Create Account
·
Forgot Password
Forgotten password account recovery
RESOLVED CONFIGURATION CHANGED
172799
[GTK] [2.17.3] Fails to build in x86
https://bugs.webkit.org/show_bug.cgi?id=172799
Summary
[GTK] [2.17.3] Fails to build in x86
Alberto Garcia
Reported
2017-06-01 02:37:59 PDT
x86_64 builds fine, but I'm having this error when trying to build it for x86: In file included from /tmp/webkit2gtk-2.17.3/Source/JavaScriptCore/interpreter/CallFrame.h:26:0, from /tmp/webkit2gtk-2.17.3/Source/JavaScriptCore/runtime/ClassInfo.h:25, from /tmp/webkit2gtk-2.17.3/Source/JavaScriptCore/runtime/Structure.h:28, from /tmp/webkit2gtk-2.17.3/Source/JavaScriptCore/runtime/ArrayStorage.h:33, from /tmp/webkit2gtk-2.17.3/Source/JavaScriptCore/runtime/ButterflyInlines.h:28, from /tmp/webkit2gtk-2.17.3/Source/JavaScriptCore/runtime/JSArray.h:24, from /tmp/webkit2gtk-2.17.3/Source/JavaScriptCore/bytecode/ArrayProfile.h:29, from /tmp/webkit2gtk-2.17.3/Source/JavaScriptCore/llint/LLIntOffsetsExtractor.cpp:28: /tmp/webkit2gtk-2.17.3/Source/JavaScriptCore/interpreter/CalleeBits.h: In static member function 'static void* JSC::CalleeBits::boxWasm(JSC::Wasm::Callee*)': /tmp/webkit2gtk-2.17.3/Source/JavaScriptCore/interpreter/CalleeBits.h:54:81: error: 'TagBitsWasm' was not declared in this scope CalleeBits result(bitwise_cast<void*>(bitwise_cast<uintptr_t>(callee) | TagBitsWasm)); ^~~~~~~~~~~ /tmp/webkit2gtk-2.17.3/Source/JavaScriptCore/interpreter/CalleeBits.h: In member function 'bool JSC::CalleeBits::isWasm() const': /tmp/webkit2gtk-2.17.3/Source/JavaScriptCore/interpreter/CalleeBits.h:63:50: error: 'TagWasmMask' was not declared in this scope return (bitwise_cast<uintptr_t>(m_ptr) & TagWasmMask) == TagBitsWasm; ^~~~~~~~~~~ /tmp/webkit2gtk-2.17.3/Source/JavaScriptCore/interpreter/CalleeBits.h:63:66: error: 'TagBitsWasm' was not declared in this scope return (bitwise_cast<uintptr_t>(m_ptr) & TagWasmMask) == TagBitsWasm; ^~~~~~~~~~~ /tmp/webkit2gtk-2.17.3/Source/JavaScriptCore/interpreter/CalleeBits.h: In member function 'JSC::Wasm::Callee* JSC::CalleeBits::asWasmCallee() const': /tmp/webkit2gtk-2.17.3/Source/JavaScriptCore/interpreter/CalleeBits.h:80:78: error: 'TagBitsWasm' was not declared in this scope return bitwise_cast<Wasm::Callee*>(bitwise_cast<uintptr_t>(m_ptr) & ~TagBitsWasm); ^~~~~~~~~~~ Source/JavaScriptCore/CMakeFiles/LLIntOffsetsExtractor.dir/build.make:99: recipe for target 'Source/JavaScriptCore/CMakeFiles/LLIntOffsetsExtractor.dir/llint/LLIntOffsetsExtractor.cpp.o' failed
Attachments
Add attachment
proposed patch, testcase, etc.
Alberto Garcia
Comment 1
2017-06-01 04:09:13 PDT
I think that the reason is that I'm building this on an x86_64 machine using an i386 chroot. In CMakeLists.txt, CMAKE_SYSTEM_PROCESSOR is defined by CMake using (I believe) "uname -m", which is x86_64 (the host CPU). if (MSVC_CXX_ARCHITECTURE_ID) string(TOLOWER ${MSVC_CXX_ARCHITECTURE_ID} LOWERCASE_CMAKE_SYSTEM_PROCESSOR) else () string(TOLOWER ${CMAKE_SYSTEM_PROCESSOR} LOWERCASE_CMAKE_SYSTEM_PROCESSOR) endif () if (LOWERCASE_CMAKE_SYSTEM_PROCESSOR MATCHES "^arm") set(WTF_CPU_ARM 1) [...] elseif (LOWERCASE_CMAKE_SYSTEM_PROCESSOR MATCHES "(x64|x86_64|amd64)") set(WTF_CPU_X86_64 1) elseif (LOWERCASE_CMAKE_SYSTEM_PROCESSOR MATCHES "(i[3-6]86|x86)") set(WTF_CPU_X86 1) [...]
Adrian Perez
Comment 2
2017-06-01 05:00:46 PDT
(In reply to Alberto Garcia from
comment #1
)
> I think that the reason is that I'm building this on an x86_64 machine using > an i386 chroot. > > In CMakeLists.txt, CMAKE_SYSTEM_PROCESSOR is defined by CMake using (I > believe) "uname -m", which is x86_64 (the host CPU). > > if (MSVC_CXX_ARCHITECTURE_ID) > string(TOLOWER ${MSVC_CXX_ARCHITECTURE_ID} > LOWERCASE_CMAKE_SYSTEM_PROCESSOR) > else () > string(TOLOWER ${CMAKE_SYSTEM_PROCESSOR} > LOWERCASE_CMAKE_SYSTEM_PROCESSOR) > endif () > if (LOWERCASE_CMAKE_SYSTEM_PROCESSOR MATCHES "^arm") > set(WTF_CPU_ARM 1) > [...] > elseif (LOWERCASE_CMAKE_SYSTEM_PROCESSOR MATCHES "(x64|x86_64|amd64)") > set(WTF_CPU_X86_64 1) > elseif (LOWERCASE_CMAKE_SYSTEM_PROCESSOR MATCHES "(i[3-6]86|x86)") > set(WTF_CPU_X86 1) > [...]
Passing “-m32” to the compiler under x86_64 is equivalent to cross-compiling. When cross-compiling using CMake one is supposed to supply a “toolchain file” which defines a few things, including the value for CMAKE_SYSTEM_PROCESSOR _for the target system_ (x86 in your case). See:
https://cmake.org/Wiki/CMake_Cross_Compiling
Now, having to provide a complete toolchain file sounds like a chore, but IIUC from the CMake documentation, you can as well pass the variables directly to the CMake invocation, and you could get away with something like: cmake path/to/sources -DCMAKE_SYSTEM_PROCESSOR=i686 ... In general CMake won't use the built-in default values for variables defined in the command line. I hope this helps.
Alberto Garcia
Comment 3
2017-06-01 05:10:54 PDT
(In reply to Adrian Perez from
comment #2
)
> Passing “-m32” to the compiler under x86_64 is equivalent to > cross-compiling.
I'm not doing that, I'm using a native 32-bit compiler. Everything inside the chroot is 32bit, just the kernel is 64bit.
> Now, having to provide a complete toolchain file sounds like a chore, > but IIUC from the CMake documentation, you can as well pass the > variables directly to the CMake invocation, and you could get away > with something like:
>
> cmake path/to/sources -DCMAKE_SYSTEM_PROCESSOR=i686 ...
Passing -DCMAKE_SYSTEM_PROCESSOR=XXX doesn't seem to solve the problem.
Alberto Garcia
Comment 4
2017-06-01 06:53:23 PDT
I confirm that using CMAKE_CXX_LIBRARY_ARCHITECTURE instead of CMAKE_SYSTEM_PROCESSOR solves the problem. I'm not sure if that's a good solution for all platforms supported by WebKit, so I can keep it as a Debian-specific workaround while we don't have the proper fix.
Carlos Alberto Lopez Perez
Comment 5
2018-05-22 07:54:00 PDT
Is this still an issue? I can successfully build webkit in an i386 container/schroot with Debian and as well cross-compile for i686 with Yocto (on an x86_64 host). Are you setting a 32 bit personality before starting the build? "uname -m" should return i686. If you use schroot you can set "personality=linux32" on the schroot config. If you use a raw chroot then you can prefix the build script/command with the "linux32" command. Example: $ uname -m x86_64 $ linux32 uname -m i686
Carlos Alberto Lopez Perez
Comment 6
2018-05-22 07:56:47 PDT
(In reply to Carlos Alberto Lopez Perez from
comment #5
)
> If you use a raw chroot then you can prefix the build script/command with > the "linux32" command. > > Example: > > $ uname -m > x86_64 > > $ linux32 uname -m > i686
Or better... prefix the chroot command before entering into it so everything you execute into the container has the right personality by default: $ sudo linux32 chroot container_i386
Alberto Garcia
Comment 7
2018-05-22 08:52:20 PDT
(In reply to Carlos Alberto Lopez Perez from
comment #5
)
> If you use a raw chroot then you can prefix the build script/command > with the "linux32" command.
Ok, I didn't know that. Not sure how that would work with the Debian buildds, I need to see what's the current status.
Note
You need to
log in
before you can comment on or make changes to this bug.
Top of Page
Format For Printing
XML
Clone This Bug