Bug 188862

Summary: [GTK] [2.22.0] Fails to build in armel
Product: WebKit Reporter: Alberto Garcia <berto>
Component: WebKitGTKAssignee: Nobody <webkit-unassigned>
Status: RESOLVED FIXED    
Severity: Normal CC: bugs-noreply, dominik.infuehr, guijemont, mcatanzaro
Priority: P2    
Version: Other   
Hardware: Unspecified   
OS: Unspecified   
Attachments:
Description Flags
Patch
none
Patch mcatanzaro: review+

Description Alberto Garcia 2018-08-22 13:53:25 PDT
Here's the error message:

[ 33%] Generating ../../DerivedSources/JavaScriptCore/LLIntAssembly.h
cd webkit2gtk-2.21.91/obj-arm-linux-gnueabi/DerivedSources/JavaScriptCore && /usr/bin/ruby webkit2gtk-2.21.91/Source/JavaScriptCore/offlineasm/asm.rb -Iwebkit2gtk-2.21.91/obj-arm-linux-gnueabi/DerivedSources/JavaScriptCore/ webkit2gtk-2.21.91/Source/JavaScriptCore/llint/LowLevelInterpreter.asm webkit2gtk-2.21.91/obj-arm-linux-gnueabi/bin/LLIntOffsetsExtractor webkit2gtk-2.21.91/obj-arm-linux-gnueabi/DerivedSources/JavaScriptCore/LLIntAssembly.h
offlineasm: No magic values found. Skipping assembly file generation.
make[2]: *** [Source/JavaScriptCore/CMakeFiles/JavaScriptCore.dir/build.make:110: DerivedSources/JavaScriptCore/LLIntAssembly.h] Error 1
Comment 1 Alberto Garcia 2018-09-03 04:36:12 PDT
Still happening with 2.22.0
Comment 2 Alberto Garcia 2018-09-04 04:46:43 PDT
Building with -DENABLE_JIT=OFF works around that problem, but the build ultimately fails when generating the documentation:

gtkdoc-fixxref --module=webkit2gtk-4.0 --module-dir=html/webkit2gtk-4.0 --extra-dir=/usr/share/gtk-doc/html/libsoup-2.4 --extra-dir=/usr/share/gtk-doc/html/gtk3 --extra-dir=/usr/share/gtk-doc/html/gdk3 --extra-dir=/usr/share/gtk-doc/html/gdk-pixbuf --extra-dir=/usr/share/gtk-doc/html/glib --extra-dir=/usr/share/gtk-doc/html/gobject --extra-dir=/usr/share/gtk-doc/html/gio --extra-dir=/home/user/webkit2gtk-2.22.0/obj-arm-linux-gnueabi/Documentation/webkitdomgtk-4.0/html --extra-dir=/home/user/webkit2gtk-2.22.0/obj-arm-linux-gnueabi/Documentation/jsc-glib-4.0/html
Traceback (most recent call last):
  File "/usr/bin/gtkdoc-fixxref", line 57, in <module>
    fixxref.Run(options)
  File "/usr/share/gtk-doc/python/gtkdoc/fixxref.py", line 64, in Run
    FixCrossReferences(options.module_dir, options.module, options.src_lang)
  File "/usr/share/gtk-doc/python/gtkdoc/fixxref.py", line 224, in FixCrossReferences
    FixHTMLFile(src_lang, module, full_entry)
  File "/usr/share/gtk-doc/python/gtkdoc/fixxref.py", line 247, in FixHTMLFile
    repl_func, content, flags=re.DOTALL)
  File "/usr/lib/python2.7/re.py", line 155, in sub
    return _compile(pattern, flags).sub(repl, string, count)
  File "/usr/share/gtk-doc/python/gtkdoc/fixxref.py", line 244, in repl_func
    return HighlightSource(src_lang, m.group(1), m.group(2))
  File "/usr/share/gtk-doc/python/gtkdoc/fixxref.py", line 354, in HighlightSource
    [config.highlight] + shlex.split(highlight_options) + [temp_source_file]).decode('utf-8')
  File "/usr/lib/python2.7/subprocess.py", line 223, in check_output
    raise CalledProcessError(retcode, cmd, output=output)
subprocess.CalledProcessError: Command '['/usr/bin/highlight', '--syntax=c', '--out-format=xhtml', '-f', '--class-name=gtkdoc', '/tmp/tmpjRU4NW.c']' returned non-zero exit status -4

But this is almost certainly not a webkit bug.
Comment 3 Alberto Garcia 2018-11-25 09:47:00 PST
I tried this again with WebKitGTK+ 2.23.1

I think this fails because OFFLINE_ASM_BACKEND is unset in Source/JavaScriptCore/CMakeLists.txt

There's no ARMv7 (because the Debian armel port targets older CPUs) and there's no CLoop because it's disabled by default on ARM.

I can fix this by passing ENABLE_C_LOOP=ON manually, but should the build system detect this scenario instead?
Comment 4 Michael Catanzaro 2018-11-25 09:56:32 PST
Per https://lists.webkit.org/pipermail/webkit-dev/2018-October/030220.html cloop should be enabled. This architecture check in WebKitFeatures.cmake is insufficient:

    if (WTF_CPU_ARM64 OR WTF_CPU_X86_64)
        set(ENABLE_JIT_DEFAULT ON)
        set(ENABLE_FTL_DEFAULT ON)
        set(USE_SYSTEM_MALLOC_DEFAULT OFF)
        set(ENABLE_C_LOOP_DEFAULT OFF)
        set(ENABLE_SAMPLING_PROFILER_DEFAULT ON)
    elseif (WTF_CPU_ARM AND WTF_OS_LINUX)
        set(ENABLE_JIT_DEFAULT ON)
        set(ENABLE_FTL_DEFAULT OFF)
        set(USE_SYSTEM_MALLOC_DEFAULT OFF)
        set(ENABLE_C_LOOP_DEFAULT OFF)
        set(ENABLE_SAMPLING_PROFILER_DEFAULT ON)
    else ()
        set(ENABLE_JIT_DEFAULT OFF)
        set(ENABLE_FTL_DEFAULT OFF)
        set(USE_SYSTEM_MALLOC_DEFAULT ON)
        set(ENABLE_C_LOOP_DEFAULT ON)
        set(ENABLE_SAMPLING_PROFILER_DEFAULT OFF)
    endif ()

The WTF_CPU_ARM branch enables the JIT stuff, but this is no longer supported on your WTF_CPU_ARM board. So that branch is incorrect. More logic is needed to distinguish between ARMv7 + thumb and older ARM. Should look something like:

elseif (WTF_CPU_ARM AND has thumb2 AND armv7 AND WTF_OS_LINUX)
Comment 5 Alberto Garcia 2018-11-25 11:48:16 PST
Yeah, something like that. I can give it a try and try to come up with a patch.
Comment 6 Alberto Garcia 2018-11-25 14:49:45 PST
Created attachment 355607 [details]
Patch
Comment 7 Alberto Garcia 2018-11-25 14:50:57 PST
Created attachment 355608 [details]
Patch

This seems to be enough
Comment 8 Alberto Garcia 2018-11-26 00:54:26 PST
Committed r238489: <https://trac.webkit.org/changeset/238489>