Re: Compile Erlang 24.2 for iOS on mac system
Dominic Letz <[email protected]> Fri, 14 Jan 2022 16:22:31 +0100
| Newsgroups | gmane.comp.lang.erlang.general |
|---|---|
| Message-ID | <CACbRgNLUgwAT6eXbSRhmRSyMn-BMjWBTQ1JKdh-6uL=4WuMgLg@mail.gmail.com> |
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 <[email protected]> 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) [email protected] DIODE diode.io