29 Cross-compiling Racket Sources for iOS

► |  | Inside: Racket C API

I | Inside Racket CS
II | Inside Racket BC (3m and CGC)
III | Appendices
| Index

▼ | III | Appendices

28 | Building Racket from Source
29 | Cross-compiling Racket Sources for i OS
30 | Linking to DLLs on Windows
31 | Embedding Files in Executable Sections

Racket
top contents ← prev up next →

## 29 Cross-compiling Racket Sources for iOS🔗ℹ

See API for Cross-Platform Configuration for general information on using Racket in cross-build mode. Everything in this section can be adapted to other cross-compilation targets, but iOS is used to make the examples concrete.

After cross-compiling Racket CS for iOS according to the source distribution’s "src/README.txt" file, you can use that build ‹ios-racket-dir› in conjunction with the host build it was compiled by to cross-compile Racket modules for iOS by passing the following set of flags to the host executable:

racket \
--compile-any \
--compiled ‹ios-racket-dir›/src/build/cs/c/compiled: \
--cross \
--cross-compiler tarm64osx ‹ios-racket-dir›/src/build/cs/c \
--config ‹ios-racket-dir›/etc \
--collects ‹ios-racket-dir›/collects

The above command runs the host Racket REPL with support for writing compiled code for both the host machine and for the tarm64osx target. The first path to --compiled (before the :) can be any absolute path, and ".zo" files for the host platform will be written there; specifying the path "‹ios-racket-dir›/src/build/cs/c/compiled" is meant to reuse the directory that was created during cross-compilation installation. The second path to --compiled (after :) is empty, which causes target-platform ".zo" files to be written in the usual "compiled" subdirectory.

Instruct the host Racket to run library code by passing the -l flag. For example, you can setup the target Racket’s installation with the following command:

racket \
--compile-any \
--compiled ‹ios-racket-dir›/src/build/cs/c/compiled: \
--cross \
--cross-compiler tarm64osx ‹ios-racket-dir›/lib \
--config ‹ios-racket-dir›/etc \
--collects ‹ios-racket-dir›/collects \
-l- \
raco setup

Finally, you can package up a Racket module and its dependencies for use with racket_embedded_load_file (after installing "compiler-lib" and "cext-lib" for the target Racket) with:

racket \
--compile-any \
--compiled ‹ios-racket-dir›/src/build/cs/c/compiled: \
--cross \
--cross-compiler tarm64osx ‹ios-racket-dir›/lib \
--config ‹ios-racket-dir›/etc \
--collects ‹ios-racket-dir›/collects \
-l- \
raco ctool --mods application.zo src/application.rkt

top contents ← prev up next →