mirror of
https://gitlab.com/eql/lqml.git
synced 2025-12-06 02:30:38 -08:00
89 lines
2.4 KiB
Markdown
89 lines
2.4 KiB
Markdown
Define environment variable and alias
|
|
-------------------------------------
|
|
|
|
Put this in e.g. `~/.profile`:
|
|
```
|
|
export ECL_IOS='<path-to-cross-compiled-ecl>/ecl-ios'
|
|
|
|
alias qmake-ios='<path-to-qt5.15>/ios/bin/qmake'
|
|
```
|
|
(Use `source ~/.profile` to make new environment variables take effect
|
|
immediately in your current terminal session.)
|
|
|
|
|
|
|
|
Build cross-compiled ECL for iOS
|
|
--------------------------------
|
|
|
|
You'll need ECL 23.9.9.
|
|
|
|
**Important**: pay attention to file `src/c/unixsys.d`, function `si_system()`.
|
|
Function `system()` inside of it needs to work when running script **1**, and
|
|
needs to just return `NIL` when running script **2**.
|
|
|
|
Different ECL versions handle this problem differently, but none of them
|
|
worked for me, so you need to find a hack for yourself for achieving the above,
|
|
like:
|
|
|
|
for script **1** put:
|
|
```
|
|
cl_object
|
|
si_system(cl_object cmd_string)
|
|
{
|
|
cl_object cmd = si_copy_to_simple_base_string(cmd_string);
|
|
int code = system((const char *)(cmd->base_string.self));
|
|
@(return ecl_make_fixnum(code));
|
|
}
|
|
```
|
|
for script **2** put:
|
|
```
|
|
cl_object
|
|
si_system(cl_object cmd_string)
|
|
{
|
|
FElibc_error("si_system not implemented",1);
|
|
@(return ECL_NIL);
|
|
}
|
|
```
|
|
|
|
* extract a fresh copy of the ECL sources in e.g. `~/ecl`, and rename
|
|
`ecl-23.9.9` to `ios`
|
|
* copy the 2 scripts from [platforms/ios/build-ecl/](platforms/ios/build-ecl/)
|
|
to `~/ecl/ios/`
|
|
* run first script
|
|
```
|
|
./1-make-ecl-host.sh
|
|
```
|
|
Edit `src/c/threads/process.d`, search for `pthread_attr_init` (around line 588)
|
|
and add the following below that line (iOS has quite limited stack size, but at
|
|
least we provide double the stack size for threads):
|
|
```
|
|
pthread_attr_setstacksize(&pthreadattr, 2 * 236 * 4096); // double default size
|
|
```
|
|
* run second script
|
|
```
|
|
./2-make-ecl-ios.sh
|
|
```
|
|
|
|
Now you should have your cross-compiled ECL under `~/ecl/ios/ecl-ios/`, and
|
|
your host ECL (for cross-compiling) under `~/ecl/ios/ecl-ios-host/`.
|
|
|
|
|
|
|
|
Build for iOS Simulator (optional)
|
|
----------------------------------
|
|
|
|
Note: only tested on **Intel**.
|
|
|
|
For this to work, you will need to upgrade your **gmp** library to the latest
|
|
version (tested with gmp 6.2.1). Just substitute it in `src/gmp/`:
|
|
|
|
* download [gmp](https://gmplib.org/download/gmp/gmp-6.2.1.tar.xz)
|
|
|
|
* extract it with `tar xvf gmp-6.2.1.tar.xz` and replace the version in `src/gmp/`
|
|
|
|
* run second script again, passing **sim**
|
|
```
|
|
./2-make-ecl-ios.sh sim
|
|
```
|
|
This will first compile for the simulator, then combine both versions to
|
|
universal binaries.
|