@@ -53,6 +53,22 @@ SRC_BUILDDIR_8 :=
5353SRC_BUILDDIR_17 :=
5454SCRIPTS_DIR ?= $(WORKSPACE ) /scripts
5555SKIP_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+
157185cvm8 : jdk8vm17
158186
159187cvm8default17 : jdk8vm17
@@ -258,6 +286,56 @@ 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+ ifeq ($(SKIP_BUILD ) , true)
313+ test_hotspot_gtest :
314+ else
315+ test_hotspot_gtest : build_hotspot_gtest
316+ endif
317+ @echo
318+ @echo "Running hotspot gtest \"$(HOTSPOT_GTEST_TEST)\""
319+ @echo " Launcher: $(HOTSPOT_GTEST_LAUNCHER)"
320+ @echo " JDK under test: $(HOTSPOT_GTEST_JDKDIR)"
321+ @echo " Test report: $(HOTSPOT_GTEST_RESULT_DIR)"
322+ @echo
323+ @{ \
324+ mkdir -p $(HOTSPOT_GTEST_WORKDIR) $(HOTSPOT_GTEST_RESULT_DIR) && \
325+ cd $(HOTSPOT_GTEST_WORKDIR) && \
326+ set +e; \
327+ LD_LIBRARY_PATH=$(HOTSPOT_GTEST_JDKDIR)/jre/lib:$(HOTSPOT_GTEST_JDKDIR)/jre/lib/$(ARCH_DIR):$(HOTSPOT_GTEST_JDKDIR)/jre/lib/$(ARCH_DIR)/server17 \
328+ $(HOTSPOT_GTEST_LAUNCHER) \
329+ -jdk $(HOTSPOT_GTEST_JDKDIR) \
330+ $(HOTSPOT_GTEST_FILTER) \
331+ --gtest_output=xml:$(HOTSPOT_GTEST_RESULT_DIR)/gtest.xml \
332+ --gtest_catch_exceptions=0 \
333+ > >(tee $(HOTSPOT_GTEST_RESULT_DIR)/gtest.txt); \
334+ exit_code=$$?; \
335+ echo $$exit_code > $(HOTSPOT_GTEST_EXITCODE); \
336+ exit $$exit_code; \
337+ }
338+
261339# ############### alternative kernel classes ########
262340# here we copy the JDK17 kernel classes to separate diretory,
263341# and tweak the code to fit into JDK8's boots.
@@ -400,3 +478,6 @@ help:
400478 @echo " Run CVM8 jtreg8 tests in directory $( CVM8_SRCROOT) /hotspot/test"
401479 @echo " make test_cvm8 JT_TEST=<test selection>"
402480 @echo " Run additional jtreg8 tests for CVM8 in directory test"
481+ @echo " make test_hotspot_gtest HOTSPOT_GTEST_TEST=<gtest selection>"
482+ @echo " Run hotspot gtests directly against the CVM output image"
483+ @echo " e.g. HOTSPOT_GTEST_TEST='gtest:all'"
0 commit comments