[CMake] Build 32bit binaries on Linux/64bit when the --32-bit is passed to build-jsc
authorcommit-queue@webkit.org <commit-queue@webkit.org@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Mon, 11 Mar 2019 19:11:09 +0000 (19:11 +0000)
committercommit-queue@webkit.org <commit-queue@webkit.org@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Mon, 11 Mar 2019 19:11:09 +0000 (19:11 +0000)
https://bugs.webkit.org/show_bug.cgi?id=194147

Patch by Xan Lopez <xan@igalia.com> on 2019-03-11
Reviewed by Michael Saboff.

.:

* CMakeLists.txt: set WTF_CPU properly if FORCE_32BIT is set in
build-jsc.

Tools:

To make --32-bit work correctly on Linux/64bit we need to:

- Set FORCE_32BIT on, which will be read by CMake to set WTF_CPU
correctly. Ideally we'd just redefine CMAKE_SYSTEM_PROCESSOR, but
unfortunately CMake only allows us to do this during
crosscompilation, which is overkill here.
- Set CMAKE_PREFIX_PATH and CMAKE_LIBRARY_ARCHITECTURE so that the
pkg-config detection module uses the x86 .pc files instead of the
x86_64 ones.
- Set the -m32 flags for the compiler.

* Scripts/webkitdirs.pm:
(generateBuildSystemFromCMakeProject):

git-svn-id: https://svn.webkit.org/repository/webkit/trunk@242724 268f45cc-cd09-0410-ab3c-d52691b4dbfc

CMakeLists.txt
ChangeLog
Tools/ChangeLog
Tools/Scripts/webkitdirs.pm

index 31adc44..1e75371 100644 (file)
@@ -93,7 +93,15 @@ elseif (LOWERCASE_CMAKE_SYSTEM_PROCESSOR MATCHES "^mips64")
 elseif (LOWERCASE_CMAKE_SYSTEM_PROCESSOR MATCHES "^mips")
     set(WTF_CPU_MIPS 1)
 elseif (LOWERCASE_CMAKE_SYSTEM_PROCESSOR MATCHES "(x64|x86_64|amd64)")
-    set(WTF_CPU_X86_64 1)
+    # FORCE_32BIT is set in the build script when --32-bit is passed
+    # on a Linux/intel 64bit host. This allows us to produce 32bit
+    # binaries without setting the build up as a crosscompilation,
+    # which is the only way to modify CMAKE_SYSTEM_PROCESSOR.
+    if (FORCE_32BIT)
+        set(WTF_CPU X86 1)
+    else ()
+        set(WTF_CPU_X86_64 1)
+    endif ()
 elseif (LOWERCASE_CMAKE_SYSTEM_PROCESSOR MATCHES "(i[3-6]86|x86)")
     set(WTF_CPU_X86 1)
 elseif (LOWERCASE_CMAKE_SYSTEM_PROCESSOR MATCHES "ppc")
index c02c360..619ba25 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,13 @@
+2019-03-11  Xan Lopez  <xan@igalia.com>
+
+        [CMake] Build 32bit binaries on Linux/64bit when the --32-bit is passed to build-jsc
+        https://bugs.webkit.org/show_bug.cgi?id=194147
+
+        Reviewed by Michael Saboff.
+
+        * CMakeLists.txt: set WTF_CPU properly if FORCE_32BIT is set in
+        build-jsc.
+
 2019-03-11  Michael Catanzaro  <mcatanzaro@igalia.com>
 
         [WPE] Enable web process sandbox
index 57e491b..29f3d34 100644 (file)
@@ -1,3 +1,24 @@
+2019-03-11  Xan Lopez  <xan@igalia.com>
+
+        [CMake] Build 32bit binaries on Linux/64bit when the --32-bit is passed to build-jsc
+        https://bugs.webkit.org/show_bug.cgi?id=194147
+
+        Reviewed by Michael Saboff.
+
+        To make --32-bit work correctly on Linux/64bit we need to:
+
+        - Set FORCE_32BIT on, which will be read by CMake to set WTF_CPU
+        correctly. Ideally we'd just redefine CMAKE_SYSTEM_PROCESSOR, but
+        unfortunately CMake only allows us to do this during
+        crosscompilation, which is overkill here.
+        - Set CMAKE_PREFIX_PATH and CMAKE_LIBRARY_ARCHITECTURE so that the
+        pkg-config detection module uses the x86 .pc files instead of the
+        x86_64 ones.
+        - Set the -m32 flags for the compiler.
+
+        * Scripts/webkitdirs.pm:
+        (generateBuildSystemFromCMakeProject):
+
 2019-03-08  Dewei Zhu  <dewei_zhu@apple.com>
 
         Add MotionMark-1.1 plan file for run-benchmark script.
index f7835e2..7700e02 100755 (executable)
@@ -2262,6 +2262,15 @@ sub generateBuildSystemFromCMakeProject
     # Some ports have production mode, but build-webkit should always use developer mode.
     push @args, "-DDEVELOPER_MODE=ON" if isGtk() || isJSCOnly() || isWPE() || isWinCairo();
 
+    if ($architecture eq "x86_64" && shouldBuild32Bit()) {
+        # CMAKE_LIBRARY_ARCHITECTURE is needed to get the right .pc
+        # files in Debian-based systems, for the others
+        # CMAKE_PREFIX_PATH will get us /usr/lib, which should be the
+        # right path for 32bit. See FindPkgConfig.cmake.
+        push @cmakeArgs, '-DFORCE_32BIT=ON -DCMAKE_PREFIX_PATH="/usr" -DCMAKE_LIBRARY_ARCHITECTURE=x86';
+        $ENV{"CFLAGS"} =  "-m32" . ($ENV{"CFLAGS"} || "");
+        $ENV{"CXXFLAGS"} = "-m32" . ($ENV{"CXXFLAGS"} || "");
+    }
     push @args, @cmakeArgs if @cmakeArgs;
 
     my $cmakeSourceDir = isCygwin() ? windowsSourceDir() : sourceDir();