Packages
mob
0.5.15
0.7.20
0.7.19
0.7.18
0.7.17
0.7.16
0.7.15
0.7.14
0.7.13
0.7.12
0.7.11
0.7.10
0.7.9
0.7.8
0.7.7
0.7.6
0.7.5
0.7.4
0.7.3
0.7.2
0.7.1
0.7.0
0.6.26
0.6.25
0.6.24
0.6.23
0.6.22
0.6.21
0.6.20
0.6.19
0.6.18
0.6.17
0.6.16
0.6.15
0.6.14
0.6.13
0.6.12
0.6.11
0.6.10
0.6.9
0.6.8
0.6.7
0.6.6
0.6.5
0.6.2
0.6.1
0.6.0
0.5.18
0.5.17
0.5.16
0.5.15
0.5.14
0.5.11
0.5.10
0.5.7
0.5.6
0.5.5
0.5.4
0.5.3
0.5.2
0.5.1
0.5.0
0.4.0
0.3.10
0.3.9
0.3.8
0.3.7
0.3.6
0.3.5
0.3.4
0.3.3
0.3.2
0.3.1
0.3.0
0.2.0
0.1.0
BEAM-on-device mobile framework for Elixir
Current section
Files
Jump to
Current section
Files
ios/driver_tab_ios.c
// driver_tab_ios.c — Static NIF table with mob_nif added.
// Link BEFORE libbeam.a to override the built-in driver_tab.
// Mirrors driver_tab_android.c for iOS.
#include <stddef.h>
typedef struct { void* de; int flags; } ErtsStaticDriver;
#define THE_NON_VALUE ((unsigned long)0)
typedef struct {
void* (*nif_init)(void);
int is_builtin;
unsigned long nif_mod;
void* entry;
} ErtsStaticNif;
typedef struct { void* de; int flags; } ErlDrvEntryStub;
extern ErlDrvEntryStub inet_driver_entry;
extern ErlDrvEntryStub ram_file_driver_entry;
ErtsStaticDriver driver_tab[] = {
{&inet_driver_entry, 0},
{&ram_file_driver_entry, 0},
{NULL, 0}
};
void erts_init_static_drivers(void) {}
void *prim_tty_nif_init(void);
void *erl_tracer_nif_init(void);
void *prim_buffer_nif_init(void);
void *prim_file_nif_init(void);
void *zlib_nif_init(void);
void *zstd_nif_init(void);
void *prim_socket_nif_init(void);
void *prim_net_nif_init(void);
void *asn1rt_nif_nif_init(void);
// crypto.c's ERL_NIF_INIT(crypto, ...) generates: crypto_nif_init.
// Built into the app binary via crypto.a + libcrypto.a (OpenSSL).
// Same pattern as Android — see driver_tab_android.c for the rationale
// (Android RTLD_LOCAL hides parent's enif_* symbols from dlopen'd
// children; iOS App Store likewise rejects dynamic NIFs in the bundle).
void *crypto_nif_init(void);
// mob_nif.m's ERL_NIF_INIT(mob_nif,...) with -DSTATIC_ERLANG_NIF
// generates function name: mob_nif_nif_init
void *mob_nif_nif_init(void);
// exqlite sqlite3_nif is linked statically on device (pass -DMOB_STATIC_SQLITE_NIF
// when compiling this file in device builds). On simulator it loads dynamically
// as a .so and must NOT appear in the static table.
#ifdef MOB_STATIC_SQLITE_NIF
void *sqlite3_nif_nif_init(void);
#endif
ErtsStaticNif erts_static_nif_tab[] = {
{prim_tty_nif_init, 0, THE_NON_VALUE, NULL},
{erl_tracer_nif_init, 0, THE_NON_VALUE, NULL},
{prim_buffer_nif_init, 0, THE_NON_VALUE, NULL},
{prim_file_nif_init, 0, THE_NON_VALUE, NULL},
{zlib_nif_init, 0, THE_NON_VALUE, NULL},
{zstd_nif_init, 0, THE_NON_VALUE, NULL},
{prim_socket_nif_init, 0, THE_NON_VALUE, NULL},
{prim_net_nif_init, 0, THE_NON_VALUE, NULL},
{asn1rt_nif_nif_init, 1, THE_NON_VALUE, NULL},
{crypto_nif_init, 1, THE_NON_VALUE, NULL},
{mob_nif_nif_init, 0, THE_NON_VALUE, NULL},
#ifdef MOB_STATIC_SQLITE_NIF
{sqlite3_nif_nif_init, 0, THE_NON_VALUE, NULL},
#endif
{NULL, 0, THE_NON_VALUE, NULL}
};