diff options
author | nobu <nobu@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2018-11-06 04:13:48 +0000 |
---|---|---|
committer | nobu <nobu@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2018-11-06 04:13:48 +0000 |
commit | a39080f59c8bb2ad05beb3381f90354f8117aedb (patch) | |
tree | 43ec908f5bf849b5ff187a71f99613036c34ca2a | |
parent | a4b73e7e9f9d8cc317be0810e834f202e9ec0f16 (diff) | |
download | ruby-a39080f59c8bb2ad05beb3381f90354f8117aedb.tar.gz |
mjit_build_dir: separate MJIT_BUILD_DIR
* Makefile.in (mjit_build_dir.so): separate MJIT_BUILD_DIR to
eliminate the feature for test-all after installation.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@65563 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
-rw-r--r-- | Makefile.in | 9 | ||||
-rw-r--r-- | mjit.c | 12 | ||||
-rw-r--r-- | test/lib/jit_support.rb | 6 |
3 files changed, 23 insertions, 4 deletions
diff --git a/Makefile.in b/Makefile.in index 913e4df814..6d2db109f5 100644 --- a/Makefile.in +++ b/Makefile.in @@ -445,6 +445,7 @@ clean-local:: $(Q)$(RM) $(MJIT_MIN_HEADER) $(MJIT_MIN_HEADER:.h=)$(MJIT_HEADER_SUFFIX:%=*).h $(Q)$(RM) $(MJIT_HEADER_INSTALL_DIR)/rb_mjit_min_header-*.h $(Q)$(RM) $(TIMESTAMPDIR)/$(MJIT_HEADER:.h=)$(MJIT_HEADER_SUFFIX).time mjit_config.h + $(Q)$(RM) mjit_build_dir.* -$(Q) $(RMDIRS) $(MJIT_HEADER_INSTALL_DIR) 2> $(NULL) || exit 0 # DTrace static library hacks described here: @@ -607,7 +608,6 @@ mjit_config.h: echo '#define RUBY_MJIT_CONFIG_H 1'; \ echo; \ sep=; \ - quote MJIT_BUILD_DIR "`$(CHDIR) . && pwd`"; \ quote MJIT_MIN_HEADER_NAME "/$(MJIT_HEADER_INSTALL_DIR)/$(MJIT_MIN_HEADER_NAME)"; \ sep=,; \ quote "MJIT_CC_COMMON " "`command -v $(MJIT_CC)`"; \ @@ -630,3 +630,10 @@ mjit_config.h: echo; \ echo '#endif /* RUBY_MJIT_CONFIG_H */'; \ } > $@ + +main: mjit_build_dir.$(SOEXT) +mjit_build_dir.$(SOEXT): $(MJIT_MIN_HEADER) + $(Q) { \ + echo 'const char MJIT_BUILD_DIR[] = "'"`$(CHDIR) . && pwd`"'";'; \ + } > $(@:.$(SOEXT)=.c) + $(Q) $(DLDSHARED) $(MJIT_DLDFLAGS) $(ARCH_FLAG) $(CFLAGS) $(CPPFLAGS) $(@:.$(SOEXT)=.c) $(OUTFLAG)$@ @@ -381,7 +381,7 @@ init_header_filename(void) const size_t libpathflag_len = sizeof(libpathflag) - 1; #endif #ifndef LOAD_RELATIVE - static const char build_dir[] = MJIT_BUILD_DIR; + const char *build_dir = 0; struct stat st; #endif @@ -394,7 +394,12 @@ init_header_filename(void) /* This path is not intended to be used on production, but using build directory's header file here because people want to run `make test-all` without running `make install`. Don't use $MJIT_SEARCH_BUILD_DIR except for test-all. */ - if (build_dir[0] != '/') { + + build_dir = dlsym(RTLD_DEFAULT, "MJIT_BUILD_DIR"); + if (!build_dir) { + verbose(1, "No mjit_build_directory"); + } + else if (build_dir[0] != '/') { verbose(1, "Non-absolute path MJIT_BUILD_DIR: %s", build_dir); } else if (stat(build_dir, &st) || !S_ISDIR(st.st_mode)) { @@ -405,8 +410,9 @@ init_header_filename(void) return FALSE; } else { + verbose(3, "MJIT_BUILD_DIR: %s", build_dir); basedir = build_dir; - baselen = sizeof(build_dir) - 1; + baselen = strlen(build_dir); } } #endif diff --git a/test/lib/jit_support.rb b/test/lib/jit_support.rb index fa1402e4b4..91e3cf84a5 100644 --- a/test/lib/jit_support.rb +++ b/test/lib/jit_support.rb @@ -30,6 +30,12 @@ module JITSupport args << '--jit-save-temps' if save_temps args << '-e' << script base_env = { 'MJIT_SEARCH_BUILD_DIR' => 'true' } # workaround to skip requiring `make install` for `make test-all` + if preloadenv = RbConfig::CONFIG['PRELOADENV'] + so = "mjit_build_dir.#{RbConfig::CONFIG['SOEXT']}" + if File.exist?(so) + base_env[preloadenv] = so + end + end args.unshift(env ? base_env.merge!(env) : base_env) EnvUtil.invoke_ruby(args, '', true, true, timeout: timeout, |