1
0
Fork 0
mirror of https://github.com/ruby/ruby.git synced 2022-11-09 12:17:21 -05:00

Add -bundle_loader to mjit compilation args on macOS

This commit is contained in:
Yuta Saito 2022-07-30 20:26:57 +09:00
parent 184fd94d7e
commit 00f411c58a
Notes: git 2022-08-04 16:29:44 +09:00
2 changed files with 25 additions and 5 deletions

12
mjit.c
View file

@ -811,8 +811,16 @@ start_compiling_c_to_so(const char *c_file, const char *so_file)
# endif
c_file, NULL
};
char **args = form_args(7, CC_LDSHARED_ARGS, CC_CODEFLAG_ARGS, cc_added_args,
so_args, CC_LIBS, CC_DLDFLAGS_ARGS, CC_LINKER_ARGS);
# if defined(__MACH__)
extern VALUE rb_libruby_selfpath;
const char *loader_args[] = {"-bundle_loader", StringValuePtr(rb_libruby_selfpath), NULL};
# else
const char *loader_args[] = {NULL};
# endif
char **args = form_args(8, CC_LDSHARED_ARGS, CC_CODEFLAG_ARGS, cc_added_args,
so_args, loader_args, CC_LIBS, CC_DLDFLAGS_ARGS, CC_LINKER_ARGS);
if (args == NULL) return -1;
rb_vm_t *vm = GET_VM();

18
ruby.c
View file

@ -22,7 +22,7 @@
# include <sys/cygwin.h>
#endif
#if defined(LOAD_RELATIVE) && defined(HAVE_DLADDR)
#if (defined(LOAD_RELATIVE) || defined(__MACH__)) && defined(HAVE_DLADDR)
# include <dlfcn.h>
#endif
@ -534,7 +534,7 @@ str_conv_enc(VALUE str, rb_encoding *from, rb_encoding *to)
void ruby_init_loadpath(void);
#if defined(LOAD_RELATIVE)
#if defined(LOAD_RELATIVE) || defined(__MACH__)
static VALUE
runtime_libruby_path(void)
{
@ -615,6 +615,10 @@ runtime_libruby_path(void)
#define INITIAL_LOAD_PATH_MARK rb_intern_const("@gem_prelude_index")
VALUE ruby_archlibdir_path, ruby_prefix_path;
#if defined(__MACH__)
// A path to libruby.dylib itself or where it's statically linked to.
VALUE rb_libruby_selfpath;
#endif
void
ruby_init_loadpath(void)
@ -622,6 +626,14 @@ ruby_init_loadpath(void)
VALUE load_path, archlibdir = 0;
ID id_initial_load_path_mark;
const char *paths = ruby_initial_load_paths;
#if defined(LOAD_RELATIVE) || defined(__MACH__)
VALUE libruby_path = runtime_libruby_path();
# if defined(__MACH__)
rb_libruby_selfpath = libruby_path;
rb_gc_register_address(&rb_libruby_selfpath);
# endif
#endif
#if defined LOAD_RELATIVE
#if !defined ENABLE_MULTIARCH
# define RUBY_ARCH_PATH ""
@ -635,7 +647,7 @@ ruby_init_loadpath(void)
size_t baselen;
const char *p;
sopath = runtime_libruby_path();
sopath = libruby_path;
libpath = RSTRING_PTR(sopath);
p = strrchr(libpath, '/');