@@ -53,6 +53,44 @@ 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 := $(HOTSPOT_GTEST_BUILD_DIR ) /gtest-manual
70+ HOTSPOT_GTEST_RESULT_DIR := $(HOTSPOT_GTEST_BUILD_DIR ) /gtest-results
71+ HOTSPOT_GTEST_EXITCODE := $(HOTSPOT_GTEST_RESULT_DIR ) /exitcode.txt
72+ CVM_CONFIGURE_URL := \
73+ --with-vendor-url="https://github.com/bytedance/CompoundVM" \
74+ --with-vendor-bug-url="https://github.com/bytedance/CompoundVM/issues" \
75+ --with-vendor-vm-bug-url="https://github.com/bytedance/CompoundVM/issues"
76+ JDK8_CONFIGURE_OPTIONS = \
77+ --with-debug-level=$(MODE ) \
78+ --with-boot-jdk=$(BOOTJDK8 ) \
79+ --with-milestone=fcs \
80+ --with-user-release-suffix="cvm" \
81+ --with-vendor-name="ByteDance" \
82+ $(CVM_CONFIGURE_URL )
83+ JDK17_CONFIGURE_OPTIONS = \
84+ --with-debug-level=$(MODE ) \
85+ --with-boot-jdk=$(BOOTJDK17 ) \
86+ --with-hotspot-target-classlib=8 \
87+ --with-vendor-name="ByteDance" \
88+ $(CVM_CONFIGURE_URL ) \
89+ --without-version-pre \
90+ --without-version-opt \
91+ --with-cvm-version-string=$(VERSION ) \
92+ --with-vendor-name="CompoundVM"
93+ JDK17_GTEST_CONFIGURE_OPTIONS = --with-gtest=$(GTEST_DIR )
5694
5795# compile set of alternative kernel/application classes
5896# $1 source directory
@@ -154,6 +192,18 @@ $(JDK8_JDK_SRC):
154192 wget -nc -O $(JDK8_SRC_TAR ) $(JDK8_SRC_TAR_URL )
155193 [[ -d $( JDK8_SRCROOT) ]] || (mkdir -p $( JDK8_SRCROOT) && tar -xzf $( JDK8_SRC_TAR) -C $( JDK8_SRCROOT) --strip-components=1)
156194
195+ $(GTEST_HEADER ) :
196+ @echo " Installing googletest $( GTEST_VERSION) to $( GTEST_DIR) "
197+ { \
198+ set -e; \
199+ [[ -d $( GTEST_ROOT) ]] || mkdir -p $(GTEST_ROOT ) ; \
200+ rm -f $(GTEST_ARCHIVE ) ; \
201+ wget -q $(GTEST_URL ) -O $(GTEST_ARCHIVE ) ; \
202+ rm -fr $(GTEST_DIR ) ; \
203+ tar xf $(GTEST_ARCHIVE ) -C $(GTEST_ROOT ) ; \
204+ rm -f $(GTEST_ARCHIVE ) ; \
205+ }
206+
157207cvm8 : jdk8vm17
158208
159209cvm8default17 : jdk8vm17
@@ -224,15 +274,7 @@ endif
224274build_jdk8u : -bootstrap $(JDK8_JDK_SRC )
225275 { cd $( JDK8_SRCROOT) ; \
226276 if [[ " x$$ (find ./build -type f -name config.log | grep $( MODE) )" = " x" ]]; then \
227- bash configure --with-debug-level=$(MODE ) \
228- --with-boot-jdk=$(BOOTJDK8 ) \
229- --with-milestone=fcs \
230- --with-user-release-suffix=" cvm" \
231- --with-vendor-name=" ByteDance" \
232- --with-vendor-url=" https://github.com/bytedance/CompoundVM" \
233- --with-vendor-bug-url=" https://github.com/bytedance/CompoundVM/issues" \
234- --with-vendor-vm-bug-url=" https://github.com/bytedance/CompoundVM/issues" \
235- ; \
277+ bash configure $(JDK8_CONFIGURE_OPTIONS ) ; \
236278 fi ; \
237279 make $(JDK_MAKE_OPTS ) CONF=linux-$(CVM_ARCH ) -normal-server-$(MODE ) images; \
238280 [[ $$ ? -eq 0 ]] || exit 127; \
@@ -242,22 +284,53 @@ build_jdk8u: -bootstrap $(JDK8_JDK_SRC)
242284build_jdk17u : -bootstrap
243285 { \
244286 if [[ " x$$ (find ./build -type f -name config.log | grep $( MODE) )" = " x" ]]; then \
245- bash configure --with-debug-level=$(MODE ) \
246- --with-boot-jdk=$(BOOTJDK17 ) \
247- --with-hotspot-target-classlib=8 \
248- --with-vendor-name=" ByteDance" \
249- --with-vendor-url=" https://github.com/bytedance/CompoundVM" \
250- --with-vendor-bug-url=" https://github.com/bytedance/CompoundVM/issues" \
251- --with-vendor-vm-bug-url=" https://github.com/bytedance/CompoundVM/issues" \
252- --without-version-pre \
253- --without-version-opt \
254- --with-cvm-version-string=$(VERSION ) \
255- --with-vendor-name=" CompoundVM" \
256- ; \
287+ bash configure $(JDK17_CONFIGURE_OPTIONS ) ; \
257288 fi ; \
258289 }
259290 make $(JDK_MAKE_OPTS ) CONF=linux-$(CVM_ARCH ) -server-$(MODE ) hotspot jdk.jdwp.agent
260291
292+ ifeq ($(SKIP_BUILD ) , true)
293+ -configure_jdk17u_gtest : $(GTEST_HEADER ) -bootstrap
294+ else
295+ -configure_jdk17u_gtest : $(GTEST_HEADER ) cvm8default17
296+ endif
297+ { \
298+ if [[ ! -f $(HOTSPOT_GTEST_BUILD_DIR)/spec.gmk ]] || \
299+ ! grep -Fqx 'GTEST_FRAMEWORK_SRC := $(GTEST_DIR)' $(HOTSPOT_GTEST_BUILD_DIR)/spec.gmk 2>/dev/null; then \
300+ bash configure $(JDK17_CONFIGURE_OPTIONS) $(JDK17_GTEST_CONFIGURE_OPTIONS) ; \
301+ fi; \
302+ }
303+
304+ build_gtest_hotspot17 : -configure_jdk17u_gtest
305+ $(MAKE ) $(JDK_MAKE_OPTS ) CONF=$(HOTSPOT_GTEST_CONF ) test-image-hotspot-gtest
306+
307+ ifeq ($(SKIP_BUILD ) , true)
308+ test_gtest_hotspot17 :
309+ else
310+ test_gtest_hotspot17 : build_gtest_hotspot17
311+ endif
312+ @echo
313+ @echo "Running hotspot gtest \"$(HOTSPOT_GTEST_TEST)\""
314+ @echo " Launcher: $(HOTSPOT_GTEST_LAUNCHER)"
315+ @echo " JDK under test: $(HOTSPOT_GTEST_JDKDIR)"
316+ @echo " Work dir: $(HOTSPOT_GTEST_WORKDIR)"
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+ $(HOTSPOT_GTEST_LAUNCHER) \
324+ -jdk $(HOTSPOT_GTEST_JDKDIR) \
325+ $(HOTSPOT_GTEST_FILTER) \
326+ --gtest_output=xml:$(HOTSPOT_GTEST_RESULT_DIR)/gtest.xml \
327+ --gtest_catch_exceptions=0 \
328+ > >(tee $(HOTSPOT_GTEST_RESULT_DIR)/gtest.txt); \
329+ exit_code=$$?; \
330+ echo $$exit_code > $(HOTSPOT_GTEST_EXITCODE); \
331+ exit $$exit_code; \
332+ }
333+
261334# ############### alternative kernel classes ########
262335# here we copy the JDK17 kernel classes to separate diretory,
263336# and tweak the code to fit into JDK8's boots.
@@ -400,3 +473,6 @@ help:
400473 @echo " Run CVM8 jtreg8 tests in directory $( CVM8_SRCROOT) /hotspot/test"
401474 @echo " make test_cvm8 JT_TEST=<test selection>"
402475 @echo " Run additional jtreg8 tests for CVM8 in directory test"
476+ @echo " make test_gtest_hotspot17 HOTSPOT_GTEST_TEST=<gtest selection>"
477+ @echo " Run hotspot gtests directly against the CVM output image"
478+ @echo " e.g. HOTSPOT_GTEST_TEST='gtest:all'"
0 commit comments