[bug#36477,v2,32/61] gnu: boost: Fix cross-compilation.
diff mbox series

Message ID 20190821085455.18508-32-m.othacehe@gmail.com
State New
Headers show
Series
  • Add --target support to guix system
Related show

Commit Message

Mathieu Othacehe Aug. 21, 2019, 8:54 a.m. UTC
* gnu/packages/patches/boost-dumpversion.patch: New file.
* gnu/local.mk (dist_patch_DATA): Add it.
* gnu/packages/boost.scm (boost)[source]: Apply it,
[arguments]: pass cross-compilation mandatory
flags and fill a user-config.jam file pointing to cross-compiler.
---
 gnu/local.mk                                 |  1 +
 gnu/packages/boost.scm                       | 28 +++++++++++++++++++-
 gnu/packages/patches/boost-dumpversion.patch | 24 +++++++++++++++++
 3 files changed, 52 insertions(+), 1 deletion(-)
 create mode 100644 gnu/packages/patches/boost-dumpversion.patch

Patch
diff mbox series

diff --git a/gnu/local.mk b/gnu/local.mk
index 74f09ba42b..a45a1a0802 100644
--- a/gnu/local.mk
+++ b/gnu/local.mk
@@ -708,6 +708,7 @@  dist_patch_DATA =						\
   %D%/packages/patches/binutils-loongson-workaround.patch	\
   %D%/packages/patches/blender-2.79-newer-ffmpeg.patch		\
   %D%/packages/patches/blender-2.79-python-3.7-fix.patch	\
+  %D%/packages/patches/boost-dumpversion.patch 			\
   %D%/packages/patches/byobu-writable-status.patch		\
   %D%/packages/patches/calibre-no-updates-dialog.patch		\
   %D%/packages/patches/calibre-remove-test-bs4.patch		\
diff --git a/gnu/packages/boost.scm b/gnu/packages/boost.scm
index a2253a9efc..536a4bee0f 100644
--- a/gnu/packages/boost.scm
+++ b/gnu/packages/boost.scm
@@ -10,6 +10,7 @@ 
 ;;; Copyright © 2018, 2019 Ricardo Wurmus <rekado@elephly.net>
 ;;; Copyright © 2018 Maxim Cournoyer <maxim.cournoyer@gmail.com>
 ;;; Copyright © 2018 Efraim Flashner <efraim@flashner.co.il>
+;;; Copyright © 2019 Mathieu Othacehe <m.othacehe@gmail.com>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -54,6 +55,8 @@ 
                            (string-append "https://dl.bintray.com/boostorg/release/"
                                           version "/source/boost_"
                                           version-with-underscores ".tar.bz2"))))
+              (patches
+               (search-patches "boost-dumpversion.patch"))
               (sha256
                (base32
                 "0y47nc7w0arwgj4x1phadxbvl7wyfcgknbz5kv8lzpl98wsyh2j3"))))
@@ -76,7 +79,22 @@ 
 
              ;; Set the RUNPATH to $libdir so that the libs find each other.
              (string-append "linkflags=-Wl,-rpath="
-                            (assoc-ref %outputs "out") "/lib"))
+                            (assoc-ref %outputs "out") "/lib")
+             ,@(if (%current-target-system)
+                   `("--user-config=user-config.jam"
+                     "binary-format=elf"
+                     "target-os=linux"
+                     ,@(cond
+                        ((string-prefix? "armhf" (%current-target-system))
+                         '("abi=aapcs"
+                           "address-model=32"
+                           "architecture=arm"))
+                        ((string-prefix? "aarch64" (%current-target-system))
+                         '("abi=aapcs"
+                           "address-model=64"
+                           "architecture=arm"))
+                        (else '())))
+                   '()))
        #:phases
        (modify-phases %standard-phases
          (delete 'bootstrap)
@@ -94,6 +112,14 @@ 
                (setenv "SHELL" (which "sh"))
                (setenv "CONFIG_SHELL" (which "sh"))
 
+               ,@(if (%current-target-system)
+                     `((call-with-output-file "user-config.jam"
+                          (lambda (port)
+                            (format port
+                                    "using gcc : cross : ~a-c++ ;"
+                                    ,(%current-target-system)))))
+                     '())
+
                (invoke "./bootstrap.sh"
                        (string-append "--prefix=" out)
                        ;; Auto-detection looks for ICU only in traditional
diff --git a/gnu/packages/patches/boost-dumpversion.patch b/gnu/packages/patches/boost-dumpversion.patch
new file mode 100644
index 0000000000..7df779cfe6
--- /dev/null
+++ b/gnu/packages/patches/boost-dumpversion.patch
@@ -0,0 +1,24 @@ 
+This issue is described here: https://github.com/openwrt/packages/pull/8685
+and has not been solved as of 1.70.0 release.
+
+--- a/tools/build/src/tools/common.jam
++++ b/tools/build/src/tools/common.jam
+@@ -973,18 +973,6 @@
+         }
+     }
+ 
+-    # From GCC 5, versioning changes and minor becomes patch
+-    if $(tag) = gcc && [ numbers.less 4 $(version[1]) ]
+-    {
+-        version = $(version[1]) ;
+-    }
+-
+-    # Ditto, from Clang 4
+-    if ( $(tag) = clang || $(tag) = clangw ) && [ numbers.less 3 $(version[1]) ]
+-    {
+-        version = $(version[1]) ;
+-    }
+-
+     # On intel, version is not added, because it does not matter and it is the
+     # version of vc used as backend that matters. Ideally, we should encode the
+     # backend version but that would break compatibility with V1.