Compile Erlang 24.2 for iOS on mac system

Dominic Letz dominic@REDACTED
Fri Jan 14 16:22:31 CET 2022


Looks like the OpenSSL build you have created is missing some symbols.
Getting OpenSSL to cross-compile correctly was fun for me as well although
I don't recall all the error messages.

This is the script I'm using to compile OpenSSL (you probably want
ARCH=ios64-xcrun for native iOS or ARCH=iossimulator-arm64 for the
simulator on an M1)
https://github.com/elixir-desktop/runtimes/blob/master/scripts/install_openssl.sh

This is the patched cross-compilation config file to make it generate the
right symbols:
https://github.com/elixir-desktop/runtimes/blob/master/patch/openssl-ios.conf
(copy it to openssl-$VSN/Configurations/15-ios.conf)

And this was my related pull request to get some of this into OpenSSL
master, they only merged it to OpenSSL-3.0 though hence I think the manual
patching above is atm the only way.
https://github.com/openssl/openssl/pull/16659

Hope this helps to fix the OpenSSL linkage.

Cheers!

On Fri, 14 Jan 2022 at 16:01, Michael S <michael_489@REDACTED> wrote:

> Hey!
>
> I applied the patch in socket_util.c, but now I am getting the following
> error "
>
> Undefined symbols for architecture arm64:  "_BN_CTX_free", referenced
> from:"
>
> I configure the otp_build script the following ... in /ios/openssl/ is the
> compiled openssl version 1.1.1k for ios build.
> ./otp_build configure
> --xcomp-conf=./xcomp/erl-xcomp-arm64-ios.conf
> --with-ssl=/Users/michael/Entwicklung/compile/ios/openssl/
>
> Also i compiled OpenSSL 1.1.1k for the cross build, also applied with a
> patch to get it compiled.
>
> See below the whole output, any hints?
>
>
> *sys/common/erl_check_io.c:1754:34: **warning: **cast to smaller integer
> type 'ErtsPollEvents' (aka 'unsigned int') from 'void *'
> [-Wvoid-pointer-to-int-cast]*
>
>         ErtsPollEvents revents = ERTS_POLL_RES_GET_EVTS(&psi->pollres[i]);
>
> *                                 ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*
>
> *sys/common/erl_poll.h:229:54: note: *expanded from macro
> 'ERTS_POLL_RES_GET_EVTS'
>
> #define ERTS_POLL_RES_GET_EVTS(evt)
> ERTS_POLL_EV_N2E((ErtsPollEvents)(evt)->udata)
>
> *
>   ~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~*
>
> *sys/common/erl_poll.h:271:54: note: *expanded from macro
> 'ERTS_POLL_EV_N2E'
>
> #define ERTS_POLL_EV_N2E(EV)            ERTS_POLL_EV_NKP_N2E((EV))
>
> *                                        ~~~~~~~~~~~~~~~~~~~~~~^~~~*
>
> *sys/common/erl_poll.h:241:40: note: *expanded from macro
> 'ERTS_POLL_EV_NKP_N2E'
>
>   ((ErtsPollEvents) ((unsigned short) (EV)))
>
> *                                       ^~*
>
> 1 warning generated.
>
>  CC obj/aarch64-apple-ios/opt/emu/erl_mseg.o
>
>  CC obj/aarch64-apple-ios/opt/emu/erl_mmap.o
>
>  CC obj/aarch64-apple-ios/opt/emu/erl_osenv.o
>
>  CC obj/aarch64-apple-ios/opt/emu/erl_unix_sys_ddll.o
>
>  CC obj/aarch64-apple-ios/opt/emu/erl_mtrace_sys_wrap.o
>
>  CC obj/aarch64-apple-ios/opt/emu/erl_sys_common_misc.o
>
>  CC obj/aarch64-apple-ios/opt/emu/erl_os_monotonic_time_extender.o
>
>  CC obj/aarch64-apple-ios/opt/emu/erlang_lttng.o
>
>  CC obj/aarch64-apple-ios/opt/emu/inet_drv.o
>
>  CC obj/aarch64-apple-ios/opt/emu/ram_file_drv.o
>
>  CC obj/aarch64-apple-ios/opt/emu/ttsl_drv.o
>
>  CC obj/aarch64-apple-ios/opt/emu/erl_tracer_nif.o
>
>  CC obj/aarch64-apple-ios/opt/emu/prim_buffer_nif.o
>
>  CC obj/aarch64-apple-ios/opt/emu/prim_file_nif.o
>
>  CC obj/aarch64-apple-ios/opt/emu/zlib_nif.o
>
>  CC obj/aarch64-apple-ios/opt/emu/prim_socket_nif.o
>
>  CC obj/aarch64-apple-ios/opt/emu/prim_net_nif.o
>
>  LD
> /Users/michael/Entwicklung/compile/ios/otp/bin/aarch64-apple-ios/beam.emu
>
> Apple clang version 13.0.0 (clang-1300.0.29.3)
>
> Target: arm64-apple-darwin21.1.0
>
> Thread model: posix
>
> InstalledDir:
> /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin
>
>  "/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/ld"
> -demangle -lto_library
> /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/libLTO.dylib
> -dynamic -arch arm64 -platform_version ios 15.0.0 15.0 -syslibroot
> /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS15.0.sdk
> -o
> /Users/michael/Entwicklung/compile/ios/otp/bin/aarch64-apple-ios/beam.emu
> -L/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS15.0.sdk/usr/lib/
> -L../lib/internal/aarch64-apple-ios -lc++
> obj/aarch64-apple-ios/opt/emu/erl_main.o
> obj/aarch64-apple-ios/opt/emu/preload.o
> obj/aarch64-apple-ios/opt/emu/erl_process.o
> obj/aarch64-apple-ios/opt/emu/beam_emu.o
> obj/aarch64-apple-ios/opt/emu/emu_load.o
> obj/aarch64-apple-ios/opt/emu/beam_common.o
> obj/aarch64-apple-ios/opt/emu/beam_bif_load.o
> obj/aarch64-apple-ios/opt/emu/beam_bp.o
> obj/aarch64-apple-ios/opt/emu/beam_catches.o
> obj/aarch64-apple-ios/opt/emu/beam_debug.o
> obj/aarch64-apple-ios/opt/emu/beam_load.o
> obj/aarch64-apple-ios/opt/emu/beam_opcodes.o
> obj/aarch64-apple-ios/opt/emu/beam_ranges.o
> obj/aarch64-apple-ios/opt/emu/beam_transform.o
> obj/aarch64-apple-ios/opt/emu/beam_transform_engine.o
> obj/aarch64-apple-ios/opt/emu/beam_transform_helpers.o
> obj/aarch64-apple-ios/opt/emu/code_ix.o
> obj/aarch64-apple-ios/opt/emu/erl_alloc.o
> obj/aarch64-apple-ios/opt/emu/erl_mtrace.o
> obj/aarch64-apple-ios/opt/emu/erl_alloc_util.o
> obj/aarch64-apple-ios/opt/emu/erl_goodfit_alloc.o
> obj/aarch64-apple-ios/opt/emu/erl_bestfit_alloc.o
> obj/aarch64-apple-ios/opt/emu/erl_afit_alloc.o
> obj/aarch64-apple-ios/opt/emu/erl_init.o
> obj/aarch64-apple-ios/opt/emu/erl_atom_table.o
> obj/aarch64-apple-ios/opt/emu/erl_bif_table.o
> obj/aarch64-apple-ios/opt/emu/erl_bif_ddll.o
> obj/aarch64-apple-ios/opt/emu/erl_bif_guard.o
> obj/aarch64-apple-ios/opt/emu/erl_bif_info.o
> obj/aarch64-apple-ios/opt/emu/erl_bif_op.o
> obj/aarch64-apple-ios/opt/emu/erl_bif_os.o
> obj/aarch64-apple-ios/opt/emu/erl_bif_lists.o
> obj/aarch64-apple-ios/opt/emu/erl_bif_persistent.o
> obj/aarch64-apple-ios/opt/emu/erl_bif_atomics.o
> obj/aarch64-apple-ios/opt/emu/erl_bif_counters.o
> obj/aarch64-apple-ios/opt/emu/erl_bif_trace.o
> obj/aarch64-apple-ios/opt/emu/erl_bif_unique.o
> obj/aarch64-apple-ios/opt/emu/erl_guard_bifs.o
> obj/aarch64-apple-ios/opt/emu/erl_dirty_bif_wrap.o
> obj/aarch64-apple-ios/opt/emu/erl_trace.o
> obj/aarch64-apple-ios/opt/emu/copy.o obj/aarch64-apple-ios/opt/emu/utils.o
> obj/aarch64-apple-ios/opt/emu/bif.o obj/aarch64-apple-ios/opt/emu/io.o
> obj/aarch64-apple-ios/opt/emu/erl_printf_term.o
> obj/aarch64-apple-ios/opt/emu/erl_debug.o
> obj/aarch64-apple-ios/opt/emu/erl_md5.o
> obj/aarch64-apple-ios/opt/emu/erl_message.o
> obj/aarch64-apple-ios/opt/emu/erl_proc_sig_queue.o
> obj/aarch64-apple-ios/opt/emu/erl_process_dict.o
> obj/aarch64-apple-ios/opt/emu/erl_process_lock.o
> obj/aarch64-apple-ios/opt/emu/erl_port_task.o
> obj/aarch64-apple-ios/opt/emu/erl_arith.o
> obj/aarch64-apple-ios/opt/emu/time.o
> obj/aarch64-apple-ios/opt/emu/erl_time_sup.o
> obj/aarch64-apple-ios/opt/emu/external.o
> obj/aarch64-apple-ios/opt/emu/dist.o obj/aarch64-apple-ios/opt/emu/binary.o
> obj/aarch64-apple-ios/opt/emu/erl_db.o
> obj/aarch64-apple-ios/opt/emu/erl_db_util.o
> obj/aarch64-apple-ios/opt/emu/erl_db_hash.o
> obj/aarch64-apple-ios/opt/emu/erl_db_tree.o
> obj/aarch64-apple-ios/opt/emu/erl_thr_progress.o
> obj/aarch64-apple-ios/opt/emu/big.o obj/aarch64-apple-ios/opt/emu/hash.o
> obj/aarch64-apple-ios/opt/emu/index.o obj/aarch64-apple-ios/opt/emu/atom.o
> obj/aarch64-apple-ios/opt/emu/module.o
> obj/aarch64-apple-ios/opt/emu/export.o
> obj/aarch64-apple-ios/opt/emu/register.o
> obj/aarch64-apple-ios/opt/emu/break.o
> obj/aarch64-apple-ios/opt/emu/erl_async.o
> obj/aarch64-apple-ios/opt/emu/erl_lock_check.o
> obj/aarch64-apple-ios/opt/emu/erl_dyn_lock_check.o
> obj/aarch64-apple-ios/opt/emu/erl_gc.o
> obj/aarch64-apple-ios/opt/emu/erl_lock_count.o
> obj/aarch64-apple-ios/opt/emu/erl_posix_str.o
> obj/aarch64-apple-ios/opt/emu/erl_bits.o
> obj/aarch64-apple-ios/opt/emu/erl_math.o
> obj/aarch64-apple-ios/opt/emu/erl_fun.o
> obj/aarch64-apple-ios/opt/emu/erl_bif_port.o
> obj/aarch64-apple-ios/opt/emu/erl_term.o
> obj/aarch64-apple-ios/opt/emu/erl_node_tables.o
> obj/aarch64-apple-ios/opt/emu/erl_monitor_link.o
> obj/aarch64-apple-ios/opt/emu/erl_process_dump.o
> obj/aarch64-apple-ios/opt/emu/erl_hl_timer.o
> obj/aarch64-apple-ios/opt/emu/erl_cpu_topology.o
> obj/aarch64-apple-ios/opt/emu/erl_drv_thread.o
> obj/aarch64-apple-ios/opt/emu/erl_bif_chksum.o
> obj/aarch64-apple-ios/opt/emu/erl_bif_re.o
> obj/aarch64-apple-ios/opt/emu/erl_unicode.o
> obj/aarch64-apple-ios/opt/emu/packet_parser.o
> obj/aarch64-apple-ios/opt/emu/safe_hash.o
> obj/aarch64-apple-ios/opt/emu/erl_zlib.o
> obj/aarch64-apple-ios/opt/emu/erl_nif.o
> obj/aarch64-apple-ios/opt/emu/erl_bif_binary.o
> obj/aarch64-apple-ios/opt/emu/erl_ao_firstfit_alloc.o
> obj/aarch64-apple-ios/opt/emu/erl_thr_queue.o
> obj/aarch64-apple-ios/opt/emu/erl_sched_spec_pre_alloc.o
> obj/aarch64-apple-ios/opt/emu/erl_ptab.o
> obj/aarch64-apple-ios/opt/emu/erl_map.o
> obj/aarch64-apple-ios/opt/emu/erl_msacc.o
> obj/aarch64-apple-ios/opt/emu/erl_lock_flags.o
> obj/aarch64-apple-ios/opt/emu/erl_io_queue.o
> obj/aarch64-apple-ios/opt/emu/erl_db_catree.o
> obj/aarch64-apple-ios/opt/emu/socket_dbg.o
> obj/aarch64-apple-ios/opt/emu/socket_tarray.o
> obj/aarch64-apple-ios/opt/emu/socket_util.o
> obj/aarch64-apple-ios/opt/emu/erl_flxctr.o
> obj/aarch64-apple-ios/opt/emu/erl_nfunc_sched.o
> obj/aarch64-apple-ios/opt/emu/erl_global_literals.o
> obj/aarch64-apple-ios/opt/emu/beam_file.o
> obj/aarch64-apple-ios/opt/emu/sys.o
> obj/aarch64-apple-ios/opt/emu/sys_drivers.o
> obj/aarch64-apple-ios/opt/emu/sys_env.o
> obj/aarch64-apple-ios/opt/emu/sys_uds.o
> obj/aarch64-apple-ios/opt/emu/driver_tab.o
> obj/aarch64-apple-ios/opt/emu/unix_prim_file.o
> obj/aarch64-apple-ios/opt/emu/sys_float.o
> obj/aarch64-apple-ios/opt/emu/sys_time.o
> obj/aarch64-apple-ios/opt/emu/sys_signal_stack.o
> obj/aarch64-apple-ios/opt/emu/erl_poll.o
> obj/aarch64-apple-ios/opt/emu/erl_check_io.o
> obj/aarch64-apple-ios/opt/emu/erl_mseg.o
> obj/aarch64-apple-ios/opt/emu/erl_mmap.o
> obj/aarch64-apple-ios/opt/emu/erl_osenv.o
> obj/aarch64-apple-ios/opt/emu/erl_unix_sys_ddll.o
> obj/aarch64-apple-ios/opt/emu/erl_mtrace_sys_wrap.o
> obj/aarch64-apple-ios/opt/emu/erl_sys_common_misc.o
> obj/aarch64-apple-ios/opt/emu/erl_os_monotonic_time_extender.o
> obj/aarch64-apple-ios/opt/emu/erl_poll.flbk.o
> obj/aarch64-apple-ios/opt/emu/erlang_lttng.o
> obj/aarch64-apple-ios/opt/emu/inet_drv.o
> obj/aarch64-apple-ios/opt/emu/ram_file_drv.o
> obj/aarch64-apple-ios/opt/emu/ttsl_drv.o
> obj/aarch64-apple-ios/opt/emu/erl_tracer_nif.o
> obj/aarch64-apple-ios/opt/emu/prim_buffer_nif.o
> obj/aarch64-apple-ios/opt/emu/prim_file_nif.o
> obj/aarch64-apple-ios/opt/emu/zlib_nif.o
> obj/aarch64-apple-ios/opt/emu/prim_socket_nif.o
> obj/aarch64-apple-ios/opt/emu/prim_net_nif.o
> /Users/michael/Entwicklung/compile/ios/otp/lib/asn1/priv/lib/aarch64-apple-ios/asn1rt_nif.a
> /Users/michael/Entwicklung/compile/ios/otp/lib/crypto/priv/lib/aarch64-apple-ios/crypto.a
> -lutil -ldl -lm
> /Users/michael/Entwicklung/compile/ios/otp/erts/emulator/zlib/obj/aarch64-apple-ios/opt/libz.a
> /Users/michael/Entwicklung/compile/ios/otp/erts/emulator/pcre/obj/aarch64-apple-ios/opt/libepcre.a
> -lethread -lerts_internal_r -lpthread -lSystem
> /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/clang/13.0.0/lib/darwin/libclang_rt.ios.a
>
> Undefined symbols for architecture arm64:
>
>   "_BN_CTX_free", referenced from:
>
>       _mod_exp_nif in crypto.a(bn_static.o)
>
>       _srp_value_B_nif in crypto.a(srp_static.o)
>
>       _srp_user_secret_nif in crypto.a(srp_static.o)
>
>       _srp_host_secret_nif in crypto.a(srp_static.o)
>
> ......
>
>
>   "_RSA_size", referenced from:
>
>       _size_of_RSA in crypto.a(pkey_static.o)
>
> ld: symbol(s) not found for architecture arm64
>
> clang: *error: **linker command failed with exit code 1 (use -v to see
> invocation)*
>
> make[4]: ***
> [/Users/michael/Entwicklung/compile/ios/otp/bin/aarch64-apple-ios/beam.emu]
> Error 1
>
> make[3]: *** [opt] Error 2
>
> make[2]: *** [opt] Error 2
>
> make[1]: *** [emu] Error 2
>
> make: *** [emulator] Error 2
>
>
> Am 23.12.21 um 16:14 schrieb Dominic Letz:
>
> That has been fixed on master
> https://github.com/diodechain/otp/commit/b5551600082fda193fe85f7feb5bd69bcc1f858c
>
> But that change did not make it into the OTP-24 maintenance branch it
> seems. So I guess you have to apply it yourself manually until there is a
> point release with the fix.
>
> Best
>
>
>

-- 
// Dominic Letz | CTO
+49 163 9198 211 (.de)
dominic@REDACTED

DIODE
diode.io
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://erlang.org/pipermail/erlang-questions/attachments/20220114/e1a3d053/attachment-0001.htm>


More information about the erlang-questions mailing list