mirror of
https://github.com/ruby/ruby.git
synced 2022-11-09 12:17:21 -05:00
mjit.c: allow using MJIT header in build directory
when $MJIT_SEARCH_BUILD_DIR is set. If prefix path is owned by root, `make install` needs to be run by root. But in general we don't want to run `make test-all`, and also running `make test-all` currently fails due to permission tests of rdoc and rubygems. Thus, prior to this commit, specifying a prefix like "/usr/local" could mean there was no way to pass test-all. So we should not depend on `make install` for `make test-all`. Thus I reverted r64104 and r64103, and applied this workaround to pass `make test-all` without `make install`. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@64143 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
This commit is contained in:
parent
c4734308b6
commit
11974fc010
5 changed files with 18 additions and 9 deletions
|
@ -589,6 +589,7 @@ mjit_config.h:
|
||||||
echo '#define RUBY_MJIT_CONFIG_H 1'; \
|
echo '#define RUBY_MJIT_CONFIG_H 1'; \
|
||||||
echo; \
|
echo; \
|
||||||
sep=; \
|
sep=; \
|
||||||
|
quote MJIT_BUILD_DIR "$(dir $(realpath $(firstword $(MAKEFILE_LIST))))"; \
|
||||||
quote MJIT_MIN_HEADER_NAME "/$(MJIT_HEADER_INSTALL_DIR)/$(MJIT_MIN_HEADER_NAME)"; \
|
quote MJIT_MIN_HEADER_NAME "/$(MJIT_HEADER_INSTALL_DIR)/$(MJIT_MIN_HEADER_NAME)"; \
|
||||||
sep=,; \
|
sep=,; \
|
||||||
quote "MJIT_CC_COMMON " $(MJIT_CC); \
|
quote "MJIT_CC_COMMON " $(MJIT_CC); \
|
||||||
|
|
|
@ -732,13 +732,10 @@ no-test-testframework: PHONY
|
||||||
test-sample: test-basic # backward compatibility for mswin-build
|
test-sample: test-basic # backward compatibility for mswin-build
|
||||||
test: btest-ruby test-knownbug test-basic
|
test: btest-ruby test-knownbug test-basic
|
||||||
|
|
||||||
INPLACE_TEST = $(LIBRUBY_RELATIVE:yes=)
|
|
||||||
# $ make test-all TESTOPTS="--help" displays more detail
|
# $ make test-all TESTOPTS="--help" displays more detail
|
||||||
# for example, make test-all TESTOPTS="-j2 -v -n test-name -- test-file-name"
|
# for example, make test-all TESTOPTS="-j2 -v -n test-name -- test-file-name"
|
||||||
test-all: $(TEST_RUNNABLE)-test-all
|
test-all: $(TEST_RUNNABLE)-test-all
|
||||||
# `make test-all` depends on `make install`: Since r62262, test_jit.rb fails if installed MJIT header is not updated
|
yes-test-all: programs PHONY
|
||||||
# and --enable-load-relative is not specified. We don't have solution for this yet. See also: https://bugs.ruby-lang.org/issues/13620
|
|
||||||
yes-test-all: programs $(INPLACE_TEST:no=install) PHONY
|
|
||||||
$(gnumake_recursive)$(Q)$(exec) $(RUNRUBY) "$(srcdir)/test/runner.rb" --ruby="$(RUNRUBY)" $(TEST_EXCLUDES) $(TESTOPTS) $(TESTS)
|
$(gnumake_recursive)$(Q)$(exec) $(RUNRUBY) "$(srcdir)/test/runner.rb" --ruby="$(RUNRUBY)" $(TEST_EXCLUDES) $(TESTOPTS) $(TESTS)
|
||||||
TESTS_BUILD = mkmf
|
TESTS_BUILD = mkmf
|
||||||
no-test-all: PHONY
|
no-test-all: PHONY
|
||||||
|
|
17
mjit.c
17
mjit.c
|
@ -1469,7 +1469,7 @@ init_header_filename(void)
|
||||||
int fd;
|
int fd;
|
||||||
/* Root path of the running ruby process. Equal to RbConfig::TOPDIR. */
|
/* Root path of the running ruby process. Equal to RbConfig::TOPDIR. */
|
||||||
VALUE basedir_val;
|
VALUE basedir_val;
|
||||||
char *basedir;
|
const char *basedir;
|
||||||
size_t baselen;
|
size_t baselen;
|
||||||
/* A name of the header file included in any C file generated by MJIT for iseqs. */
|
/* A name of the header file included in any C file generated by MJIT for iseqs. */
|
||||||
static const char header_name[] = MJIT_MIN_HEADER_NAME;
|
static const char header_name[] = MJIT_MIN_HEADER_NAME;
|
||||||
|
@ -1486,9 +1486,18 @@ init_header_filename(void)
|
||||||
const size_t libpathflag_len = sizeof(libpathflag) - 1;
|
const size_t libpathflag_len = sizeof(libpathflag) - 1;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
basedir_val = ruby_prefix_path;
|
if (getenv("MJIT_SEARCH_BUILD_DIR")) {
|
||||||
basedir = StringValuePtr(basedir_val);
|
/* This path is not intended to be used on production, but using build directory's
|
||||||
baselen = RSTRING_LEN(basedir_val);
|
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. */
|
||||||
|
basedir = MJIT_BUILD_DIR;
|
||||||
|
baselen = strlen(basedir);
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
basedir_val = ruby_prefix_path;
|
||||||
|
basedir = StringValuePtr(basedir_val);
|
||||||
|
baselen = RSTRING_LEN(basedir_val);
|
||||||
|
}
|
||||||
|
|
||||||
header_file = xmalloc(baselen + header_name_len + 1);
|
header_file = xmalloc(baselen + header_name_len + 1);
|
||||||
p = append_str2(header_file, basedir, baselen);
|
p = append_str2(header_file, basedir, baselen);
|
||||||
|
|
|
@ -35,7 +35,8 @@ module JITSupport
|
||||||
]
|
]
|
||||||
args << '--jit-save-temps' if save_temps
|
args << '--jit-save-temps' if save_temps
|
||||||
args << '-e' << script
|
args << '-e' << script
|
||||||
args.unshift(env) if env
|
base_env = { 'MJIT_SEARCH_BUILD_DIR' => 'true' } # workaround to skip requiring `make install` for `make test-all`
|
||||||
|
args.unshift(env ? base_env.merge!(env) : base_env)
|
||||||
EnvUtil.invoke_ruby(args,
|
EnvUtil.invoke_ruby(args,
|
||||||
'', true, true, timeout: timeout,
|
'', true, true, timeout: timeout,
|
||||||
)
|
)
|
||||||
|
|
|
@ -1295,6 +1295,7 @@ mjit_config.h:
|
||||||
#ifndef RUBY_MJIT_CONFIG_H
|
#ifndef RUBY_MJIT_CONFIG_H
|
||||||
#define RUBY_MJIT_CONFIG_H 1
|
#define RUBY_MJIT_CONFIG_H 1
|
||||||
|
|
||||||
|
#define MJIT_BUILD_DIR "$(MAKEDIR)"
|
||||||
#define MJIT_MIN_HEADER_NAME "/$(MJIT_HEADER_INSTALL_DIR)/$(MJIT_MIN_HEADER_NAME)"
|
#define MJIT_MIN_HEADER_NAME "/$(MJIT_HEADER_INSTALL_DIR)/$(MJIT_MIN_HEADER_NAME)"
|
||||||
<<KEEP
|
<<KEEP
|
||||||
@
|
@
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue