On this page:
cross-system-type
cross-system-library-subpath
cross-installation?

6.14 API for Cross-Platform Configuration

See the raco cross documentation for information about raco cross, a tool that is provided by the "raco-cross" package as a convenient interface to cross-compilation for Racket. The underlying API documented here supports raco cross and other tools.

The setup/cross-system library provides functions for querying the system properties of a destination platform, which can be different than the current platform in cross-installation modes.

A Racket installation includes a "system.rktd" file in the directory reported by (find-lib-dir). When the information in that file does not match the running Racket’s information, then the setup/cross-system module infers that Racket is being run in cross-installation mode.

For example, if an in-place Racket BC installation for a different platform resides at cross-dir, then running Racket BC as

  racket -C -G cross-dir/etc -X cross-dir/collects -l- raco pkg

runs raco pkg using the current platform’s racket executable, but using the collections and other configuration information of cross-dir, as well as modifying the packages of cross-dir. That can work as long as no platform-specific libraries need to run to perform the requested raco pkg action (e.g., when installing built packages), or as long as the current platform’s installation already includes those libraries.

For Racket CS, cross compilation is more complicated, because Racket CS ".zo" files are platform-specific:

For example, the raco pkg example for Racket CS is

  racket --cross-compiler target-machine cross-dir/lib \

    -MCR absolute-zo-dir: \

    -G cross-dir/etc -X cross-dir/collects -l- raco pkg

The target-machine provided to --cross-compiler should be the same as the target-machine entry in "cross-dir/lib/systemd.rktd".

The -C flag is shorthand for --cross, -M is short for --compile-any, -R is short for --compiled, -G is short for --config, -X is short for --collects, and -MCR is short for -M -C -R.

Added in version 6.3 of package base.

procedure

(cross-system-type [mode])

  (or/c symbol? string? bytes? exact-positive-integer? vector?)
  mode : 
(or/c 'os 'word 'gc 'vm 'link 'machine
      'so-suffix 'so-mode 'fs-change)
 = 'os
Like system-type, but for the target platform instead of the current platform in cross-installation mode. When not in cross-installation mode, the results are the same as for system-type.

See also 'cross mode for system-type.

procedure

(cross-system-library-subpath [mode])  path-for-some-system?

  mode : (or/c 'cgc '3m 'cs #f) = (system-type 'gc)
Like system-library-subpath, but for the target platform instead of the current platform in cross-installation mode. When not in cross-installation mode, the results are the same as for system-library-subpath.

In cross-installation mode, the target platform may have a different path convention than the current platform, so the result is path-for-some-system? instead of path?.

procedure

(cross-installation?)  boolean?

Returns #t if cross-installation mode has been detected, #f otherwise.