Skip to content
Snippets Groups Projects
  1. Jan 15, 2025
  2. Oct 30, 2024
    • Oliver Smith's avatar
      cross/crossdirect: fakeroot: add helpful error msg (MR 5744) · c45d7ec0
      Oliver Smith authored
      Alpine's abuild runs build() without fakeroot, and package() with
      fakeroot. From the APKBUILD reference page in the Alpine wiki:
      
      > Note: Building in fakeroot will reduce performance for parallel
      > builds dramatically. It is for this reason that we split the build
      > and package process into two separate functions.
      
      Every now and then we see a package that tries to run a compiler (gcc,
      g++, clang, ...) during package() in the APKBUILD. This is a bug in the
      APKBUILD / build system of the program we are packaging. All compiling
      should be done during build().
      
      Let crossdirect print the following when this happens:
      
        ============================================================================================
        ERROR: crossdirect was called with: LD_PRELOAD=libfakeroot.so
        This means your package tried to run a compiler during package().
        This is not supported by crossdirect, and usually not a good idea.
        * Try to fix your APKBUILD so it does not run the compiler during package(), only in build()
          * If you're using meson install, try to add '--no-rebuild'
        * If this is not possible, you can work around it by setting options="!pmb:crossdirect"
          (compilation will be slower!)
        ============================================================================================
      
      Instead of:
      
        ERROR: crossdirect: can't handle LD_PRELOAD: libfakeroot.so
        Please report this at: https://gitlab.com/postmarketOS/pmaports/issues
        As a workaround, you can compile without crossdirect.
      
      In the past I've also tried to add 'strcmp(ldPreload, "libfakeroot.so") == 0'
      (pmaports MR 2231), and today I made the same patch. The current code
      looks like it would then work by just using libfakeroot.so from the
      native chroot, but it does not work. And as mentioned, if we hit this
      then we are compiling in package() which is something we should not do
      anyway!
      
      Fixes: pmb issue 2039
      Related: pma issue 2351, pma MR 5738
      c45d7ec0
  3. Oct 07, 2024
  4. Sep 05, 2023
    • Oliver Smith's avatar
      cross/crossdirect: partially use sccache for rust (MR 4310) · d9830c63
      Oliver Smith authored
      Wrap rustc commands with sccache when building native build scripts.
      More interesting will be using sscache for compiling for the target
      architecture, but sccache currently refuses to cache with --sysroot.
      This can be optimized further later on, get some initial support for
      sccache in here first.
      
      While at it, tweak the -vV logic to also support -V, start using semver
      with this and add myself as maintainer of the package.
      
      [ci:skip-build]: already built successfully in CI
      d9830c63
  5. Jul 24, 2023
    • Affe Null's avatar
      cross/crossdirect: improve rust handling (MR 4234) · f0286576
      Affe Null authored and Oliver Smith's avatar Oliver Smith committed
      Add a cargo wrapper which appends a --target argument to the command
      line. This makes cargo pass the --target argument to rustc for crates
      being built for the target architecture, even if the target is the same
      as the host. It will omit the --target argument for build scripts and
      crates used in macros.
      
      Check for this --target argument in the rustc wrapper and adjust the
      library paths depending on its presence. The fallback that runs rustc
      under qemu is no longer needed because macros are now built for the
      native architecture and can be loaded into the native compiler without
      any problems.
      
      Also check if the arguments passed to rustc are "-vV". If this is the
      case, we still need to fall back to the target rustc because the native
      rustc will return the wrong architecture. If the wrong host architecture
      is passed to a build script, it might try to look for a cross-compiler
      or do something else that doesn't work.
      
      [ci:skip-build]: already built successfully in CI
      f0286576
  6. Sep 11, 2020
  7. Apr 10, 2020
  8. Jan 14, 2020
    • Oliver Smith's avatar
      cross/crossdirect: support rust (!845) · f329c8f5
      Oliver Smith authored
      Use the native rustc cross compiler where possible, and fall back to the
      qemu rustc if necessary. This should improve speed and reliability.
      Without this patch, building squeekbox 1.4.0 for aarch64 with the
      pmbootstrap stack just hangs forever.
      
      Related: pmbootstrap#1861
      f329c8f5
  9. Sep 11, 2019
    • Oliver Smith's avatar
      cross/crossdirect: pkgrel bump · de2b9a33
      Oliver Smith authored
      Rebuild to make it use the new armhf triplet. Otherwise cross compiling
      with crossdirect to armhf fails with:
      
      ERROR: crossdirect: failed to execute /native/usr/lib/ccache/bin/armv6-alpine-linux-muslgnueabihf-gcc: No such file or directory
      
      This finally fixes #295.
      de2b9a33
  10. Jun 26, 2019
  11. Apr 14, 2019
    • Oliver Smith's avatar
      cross/crossdirect: use qemu when linking (!318) · 2c07f284
      Oliver Smith authored
      Cross linker (e.g. ld from binutils-armhf) does not support any method
      of setting additional link paths, and this causes problems when building
      various packages. Work around this problem by calling the qemu binary
      instead of the cross binary from the native chroot, whenever we are
      linking.
      
      I have tested that this allows successfully building hello-world,
      coreinfo, libhybris for armhf. So this fixes #227 and fixes #228.
      
      Regarding performance, this is the same way as distcc does it. We would
      get a performance gain if we were able to use the cross-linker. But so
      far I could not figure out how to patch the binutils source to make it
      work like we want to have it. Maybe I'll ask on some binutils mailing
      list for advice. In the meantime, this workaround should make
      crossdirect work for all use-cases, and it is still faster than the
      previous distcc setup, because we can avoid the overhead of setting up
      and running a ssh server locally to work around missing authentication
      in distcc (see pmbootstrap!1649). Let's test this for some more time,
      and then make a pmbootstrap release that rolls out crossdirect for
      everyone.
      2c07f284
  12. Apr 03, 2019
    • Oliver Smith's avatar
      cross/crossdirect: use ccache, execve, -Werror (!299) · 958f597a
      Oliver Smith authored
      Instead of running compilers directly, let them go through the native
      ccache binary. Note that it will still use the foreign arches cache dir
      because the native cache dir would be at /native/home/pmos/.ccache.
      
      Use execve instead of setenv and execv, because that didn't work with
      LD_LIBRARY_PATH (ccache was complaining that it couldn't load zlib).
      
      Enable -Werror, because we are maintaining this program and it helps
      us catching bugs early.
      958f597a
  13. Mar 23, 2019
Loading