Skip to content

Commit cd48bc5

Browse files
committed
support hotspot gtest
1 parent 6607390 commit cd48bc5

2 files changed

Lines changed: 87 additions & 0 deletions

File tree

cvm.mk

Lines changed: 79 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -53,6 +53,22 @@ SRC_BUILDDIR_8 :=
5353
SRC_BUILDDIR_17 :=
5454
SCRIPTS_DIR ?= $(WORKSPACE)/scripts
5555
SKIP_BUILD ?= false
56+
GTEST_VERSION ?= $(shell sed -n 's/^GTEST_VERSION=//p' $(WORKSPACE)/make/conf/github-actions.conf | head -n 1)
57+
GTEST_ROOT := $(WORKSPACE)/.gtest
58+
GTEST_ARCHIVE := $(GTEST_ROOT)/release-$(GTEST_VERSION).tar.gz
59+
GTEST_URL := https://github.com/google/googletest/archive/refs/tags/v$(GTEST_VERSION).tar.gz
60+
GTEST_DIR := $(GTEST_ROOT)/googletest-$(GTEST_VERSION)
61+
GTEST_HEADER := $(GTEST_DIR)/googletest/include/gtest/gtest.h
62+
HOTSPOT_GTEST_CONF := linux-$(CVM_ARCH)-server-$(MODE)
63+
HOTSPOT_GTEST_BUILD_DIR := $(JDK17_SRCROOT)/build/$(HOTSPOT_GTEST_CONF)
64+
HOTSPOT_GTEST_LAUNCHER := $(HOTSPOT_GTEST_BUILD_DIR)/images/test/hotspot/gtest/server/gtestLauncher
65+
HOTSPOT_GTEST_TEST ?= gtest:all
66+
HOTSPOT_GTEST_SELECTOR := $(patsubst %/server,%,$(patsubst gtest:%,%,$(HOTSPOT_GTEST_TEST)))
67+
HOTSPOT_GTEST_FILTER := $(if $(filter all,$(HOTSPOT_GTEST_SELECTOR)),,--gtest_filter=$(HOTSPOT_GTEST_SELECTOR)*)
68+
HOTSPOT_GTEST_JDKDIR := $(OUTPUTDIR)/$(DISTRO_NAME)
69+
HOTSPOT_GTEST_WORKDIR := $(BUILDDIR)/gtest-manual
70+
HOTSPOT_GTEST_RESULT_DIR := $(BUILDDIR)/gtest-results
71+
HOTSPOT_GTEST_EXITCODE := $(HOTSPOT_GTEST_RESULT_DIR)/exitcode.txt
5672

5773
# compile set of alternative kernel/application classes
5874
# $1 source directory
@@ -154,6 +170,18 @@ $(JDK8_JDK_SRC):
154170
wget -nc -O $(JDK8_SRC_TAR) $(JDK8_SRC_TAR_URL)
155171
[[ -d $(JDK8_SRCROOT) ]] || (mkdir -p $(JDK8_SRCROOT) && tar -xzf $(JDK8_SRC_TAR) -C $(JDK8_SRCROOT) --strip-components=1)
156172

173+
$(GTEST_HEADER):
174+
@echo "Installing googletest $(GTEST_VERSION) to $(GTEST_DIR)"
175+
{ \
176+
set -e; \
177+
[[ -d $(GTEST_ROOT) ]] || mkdir -p $(GTEST_ROOT); \
178+
rm -f $(GTEST_ARCHIVE); \
179+
wget -q $(GTEST_URL) -O $(GTEST_ARCHIVE); \
180+
rm -fr $(GTEST_DIR); \
181+
tar xf $(GTEST_ARCHIVE) -C $(GTEST_ROOT); \
182+
rm -f $(GTEST_ARCHIVE); \
183+
}
184+
157185
cvm8: jdk8vm17
158186

159187
cvm8default17: jdk8vm17
@@ -258,6 +286,52 @@ build_jdk17u: -bootstrap
258286
}
259287
make $(JDK_MAKE_OPTS) CONF=linux-$(CVM_ARCH)-server-$(MODE) hotspot jdk.jdwp.agent
260288

289+
-configure_jdk17u_gtest: $(GTEST_HEADER) cvm8default17
290+
{ \
291+
if [[ ! -f $(HOTSPOT_GTEST_BUILD_DIR)/spec.gmk ]] || \
292+
! grep -Fqx 'GTEST_FRAMEWORK_SRC := $(GTEST_DIR)' $(HOTSPOT_GTEST_BUILD_DIR)/spec.gmk 2>/dev/null; then \
293+
bash configure --with-debug-level=$(MODE) \
294+
--with-boot-jdk=$(BOOTJDK17) \
295+
--with-hotspot-target-classlib=8 \
296+
--with-vendor-name="ByteDance" \
297+
--with-vendor-url="https://github.com/bytedance/CompoundVM" \
298+
--with-vendor-bug-url="https://github.com/bytedance/CompoundVM/issues" \
299+
--with-vendor-vm-bug-url="https://github.com/bytedance/CompoundVM/issues" \
300+
--without-version-pre \
301+
--without-version-opt \
302+
--with-cvm-version-string=$(VERSION) \
303+
--with-vendor-name="CompoundVM" \
304+
--with-gtest=$(GTEST_DIR) \
305+
; \
306+
fi; \
307+
}
308+
309+
build_hotspot_gtest: -configure_jdk17u_gtest
310+
$(MAKE) $(JDK_MAKE_OPTS) CONF=$(HOTSPOT_GTEST_CONF) test-image-hotspot-gtest
311+
312+
test_hotspot_gtest: build_hotspot_gtest
313+
@echo
314+
@echo "Running hotspot gtest \"$(HOTSPOT_GTEST_TEST)\""
315+
@echo " Launcher: $(HOTSPOT_GTEST_LAUNCHER)"
316+
@echo " JDK under test: $(HOTSPOT_GTEST_JDKDIR)"
317+
@echo " Test report: $(HOTSPOT_GTEST_RESULT_DIR)"
318+
@echo
319+
@{ \
320+
mkdir -p $(HOTSPOT_GTEST_WORKDIR) $(HOTSPOT_GTEST_RESULT_DIR) && \
321+
cd $(HOTSPOT_GTEST_WORKDIR) && \
322+
set +e; \
323+
LD_LIBRARY_PATH=$(HOTSPOT_GTEST_JDKDIR)/jre/lib:$(HOTSPOT_GTEST_JDKDIR)/jre/lib/$(ARCH_DIR):$(HOTSPOT_GTEST_JDKDIR)/jre/lib/$(ARCH_DIR)/server17 \
324+
$(HOTSPOT_GTEST_LAUNCHER) \
325+
-jdk $(HOTSPOT_GTEST_JDKDIR) \
326+
$(HOTSPOT_GTEST_FILTER) \
327+
--gtest_output=xml:$(HOTSPOT_GTEST_RESULT_DIR)/gtest.xml \
328+
--gtest_catch_exceptions=0 \
329+
> >(tee $(HOTSPOT_GTEST_RESULT_DIR)/gtest.txt); \
330+
exit_code=$$?; \
331+
echo $$exit_code > $(HOTSPOT_GTEST_EXITCODE); \
332+
exit $$exit_code; \
333+
}
334+
261335
################ alternative kernel classes ########
262336
# here we copy the JDK17 kernel classes to separate diretory,
263337
# and tweak the code to fit into JDK8's boots.
@@ -400,3 +474,8 @@ help:
400474
@echo " Run CVM8 jtreg8 tests in directory $(CVM8_SRCROOT)/hotspot/test"
401475
@echo " make test_cvm8 JT_TEST=<test selection>"
402476
@echo " Run additional jtreg8 tests for CVM8 in directory test"
477+
@echo " make build_hotspot_gtest MODE=slowdebug"
478+
@echo " Download googletest if needed and build hotspot gtest artifacts"
479+
@echo " make test_hotspot_gtest MODE=slowdebug HOTSPOT_GTEST_TEST='gtest:all'"
480+
@echo " Run hotspot gtests directly against the CVM output image"
481+
@echo " e.g. HOTSPOT_GTEST_TEST='gtest:Log/server'"

src/hotspot/os/linux/os_linux.cpp

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2707,10 +2707,18 @@ void os::jvm_path(char *buf, jint buflen) {
27072707
len = strlen(buf);
27082708
assert(len < buflen, "Ran out of buffer room");
27092709
jrelib_p = buf + len;
2710+
2711+
#if HOTSPOT_TARGET_CLASSLIB == 8
2712+
snprintf(jrelib_p, buflen-len, "/jre/lib/%s", HOTSPOT_LIB_ARCH);
2713+
if (0 != access(buf, F_OK)) {
2714+
snprintf(jrelib_p, buflen-len, "/lib/%s", HOTSPOT_LIB_ARCH);
2715+
}
2716+
#else
27102717
snprintf(jrelib_p, buflen-len, "/jre/lib");
27112718
if (0 != access(buf, F_OK)) {
27122719
snprintf(jrelib_p, buflen-len, "/lib");
27132720
}
2721+
#endif
27142722

27152723
if (0 == access(buf, F_OK)) {
27162724
// Use current module name "libjvm.so"

0 commit comments

Comments
 (0)