@@ -243,6 +243,13 @@ unit_tests_data = $(data)
243243
244244# Why isn't this working automatically?
245245EXTRA_DIST = $(data )
246+ kokkos_unit_test_sources = \
247+ numerics/kokkos_numerics_oracle_test_utils.h \
248+ numerics/kokkos_tensor_ops_oracle_fixtures.h \
249+ numerics/kokkos_tensor_ops_oracle_runners.h \
250+ numerics/kokkos_vector_ops_oracle_fixtures.h \
251+ numerics/kokkos_vector_ops_oracle_runners.h
252+ EXTRA_DIST += $(kokkos_unit_test_sources )
246253
247254if LIBMESH_ENABLE_FPARSER
248255 unit_tests_sources += \
@@ -255,20 +262,19 @@ TESTS =
255262if LIBMESH_ENABLE_KOKKOS
256263 KOKKOS_TEST_CPPFLAGS += -I$(top_srcdir ) /include $(KOKKOS_CPPFLAGS )
257264
258- check_PROGRAMS += kokkos_vector_ops_oracle_unit kokkos_tensor_ops_oracle_unit
259- TESTS += kokkos_vector_ops_oracle_unit kokkos_tensor_ops_oracle_unit
260-
261- kokkos_vector_ops_oracle_unit_SOURCES = numerics/kokkos_vector_ops_oracle_test.K
262- kokkos_vector_ops_oracle_unit_CPPFLAGS = $(AM_CPPFLAGS ) $(KOKKOS_TEST_CPPFLAGS )
263- kokkos_vector_ops_oracle_unit_CXXFLAGS = $(AM_CXXFLAGS ) $(KOKKOS_CXXFLAGS )
264- kokkos_vector_ops_oracle_unit_LDFLAGS = $(AM_LDFLAGS ) $(KOKKOS_LDFLAGS )
265- kokkos_vector_ops_oracle_unit_LDADD = $(top_builddir ) /libmesh_opt.la $(KOKKOS_LIBS ) $(libmesh_optional_LIBS )
265+ if LIBMESH_DBG_MODE
266+ check_PROGRAMS += unit_tests-kokkos-dbg
267+ TESTS += unit_tests-kokkos-dbg
268+ unit_tests_kokkos_dbg_SOURCES =
269+ EXTRA_unit_tests_kokkos_dbg_SOURCES = driver_kokkos.K
270+ endif
266271
267- kokkos_tensor_ops_oracle_unit_SOURCES = numerics/kokkos_tensor_ops_oracle_test.K
268- kokkos_tensor_ops_oracle_unit_CPPFLAGS = $(AM_CPPFLAGS ) $(KOKKOS_TEST_CPPFLAGS )
269- kokkos_tensor_ops_oracle_unit_CXXFLAGS = $(AM_CXXFLAGS ) $(KOKKOS_CXXFLAGS )
270- kokkos_tensor_ops_oracle_unit_LDFLAGS = $(AM_LDFLAGS ) $(KOKKOS_LDFLAGS )
271- kokkos_tensor_ops_oracle_unit_LDADD = $(top_builddir ) /libmesh_opt.la $(KOKKOS_LIBS ) $(libmesh_optional_LIBS )
272+ if LIBMESH_OPT_MODE
273+ check_PROGRAMS += unit_tests-kokkos-opt
274+ TESTS += unit_tests-kokkos-opt
275+ unit_tests_kokkos_opt_SOURCES =
276+ EXTRA_unit_tests_kokkos_opt_SOURCES = driver_kokkos.K
277+ endif
272278endif
273279
274280# our GLIBC debugging preprocessor flags seem to potentially conflict
@@ -383,24 +389,52 @@ if LIBMESH_ENABLE_CPPUNIT
383389TESTS += run_unit_tests.sh
384390endif
385391
386- # Compile .K translation units with the Kokkos device compiler.
387- # If KOKKOS_CXX is not the MPI wrapper, configure populates
388- # $(KOKKOS_MPI_CPPFLAGS) from the wrapper's compile flags so mpi.h and
389- # any wrapper-provided defines remain visible.
390- .K.o :
392+ if LIBMESH_ENABLE_KOKKOS
393+ driver_kokkos_src = driver_kokkos.K
394+ unit_tests_kokkos_dbg_object = unit_tests_kokkos_dbg-driver_kokkos.$(OBJEXT )
395+ unit_tests_kokkos_opt_object = unit_tests_kokkos_opt-driver_kokkos.$(OBJEXT )
396+ unit_tests_kokkos_dbg_depfile = $(DEPDIR ) /unit_tests_kokkos_dbg-driver_kokkos.d
397+ unit_tests_kokkos_opt_depfile = $(DEPDIR ) /unit_tests_kokkos_opt-driver_kokkos.d
398+ kokkos_unit_test_depfiles = $(unit_tests_kokkos_dbg_depfile ) $(unit_tests_kokkos_opt_depfile )
399+ kokkos_unit_test_cleanfiles = $(unit_tests_kokkos_dbg_object ) $(unit_tests_kokkos_opt_object ) \
400+ $(kokkos_unit_test_depfiles ) \
401+ unit_tests-kokkos-dbg$(EXEEXT ) unit_tests-kokkos-opt$(EXEEXT )
402+
403+ # Build the Kokkos tests with the same mode-suffixed naming as the
404+ # original libMesh unit test executables, while still compiling with
405+ # the Kokkos device compiler and mode-specific flags.
406+ $(unit_tests_kokkos_dbg_object ) : $(driver_kokkos_src )
407+ @$(MKDIR_P ) $(DEPDIR )
391408 $(KOKKOS_CXX ) $(DEFS ) $(DEFAULT_INCLUDES ) $(INCLUDES ) \
392- $(KOKKOS_MPI_CPPFLAGS ) $(AM_CPPFLAGS ) $(CPPFLAGS ) $(KOKKOS_TEST_CPPFLAGS ) \
393- $(AM_CXXFLAGS ) $(CXXFLAGS ) $(KOKKOS_CXXFLAGS ) \
409+ $(KOKKOS_MPI_CPPFLAGS ) $(CPPFLAGS_DBG ) $(AM_CPPFLAGS ) $(CPPFLAGS ) $(KOKKOS_TEST_CPPFLAGS ) \
410+ $(AM_CXXFLAGS ) $(CXXFLAGS_DBG ) $(CXXFLAGS ) $(KOKKOS_CXXFLAGS ) \
411+ -MMD -MP -MF $(unit_tests_kokkos_dbg_depfile ) \
394412 -c $< -o $@
395413
396- # Custom link rules so the Kokkos compiler drives the final link step.
397- kokkos_vector_ops_oracle_unit_LINK = \
398- $(LIBTOOL ) --tag=CXX --mode=link $(KOKKOS_CXX ) \
399- $(LDFLAGS ) $(kokkos_vector_ops_oracle_unit_LDFLAGS ) -o $@
414+ $(unit_tests_kokkos_opt_object ) : $(driver_kokkos_src )
415+ @$(MKDIR_P ) $(DEPDIR )
416+ $(KOKKOS_CXX ) $(DEFS ) $(DEFAULT_INCLUDES ) $(INCLUDES ) \
417+ $(KOKKOS_MPI_CPPFLAGS ) $(CPPFLAGS_OPT ) $(AM_CPPFLAGS ) $(CPPFLAGS ) $(KOKKOS_TEST_CPPFLAGS ) \
418+ $(AM_CXXFLAGS ) $(CXXFLAGS_OPT ) $(CXXFLAGS ) $(KOKKOS_CXXFLAGS ) \
419+ -MMD -MP -MF $(unit_tests_kokkos_opt_depfile ) \
420+ -c $< -o $@
400421
401- kokkos_tensor_ops_oracle_unit_LINK = \
402- $(LIBTOOL ) --tag=CXX --mode=link $(KOKKOS_CXX ) \
403- $(LDFLAGS ) $(kokkos_tensor_ops_oracle_unit_LDFLAGS ) -o $@
422+ unit_tests-kokkos-dbg$(EXEEXT ) : $(unit_tests_kokkos_dbg_object ) $(top_builddir ) /libmesh_dbg.la
423+ @rm -f $@
424+ $(AM_V_GEN )$(LIBTOOL ) --tag=CXX --mode=link $(KOKKOS_CXX ) \
425+ $(LDFLAGS ) $(AM_LDFLAGS ) $(KOKKOS_LDFLAGS ) -o $@ \
426+ $(unit_tests_kokkos_dbg_object ) \
427+ $(top_builddir ) /libmesh_dbg.la $(KOKKOS_LIBS ) $(libmesh_optional_LIBS ) $(LIBS )
428+
429+ unit_tests-kokkos-opt$(EXEEXT ) : $(unit_tests_kokkos_opt_object ) $(top_builddir ) /libmesh_opt.la
430+ @rm -f $@
431+ $(AM_V_GEN )$(LIBTOOL ) --tag=CXX --mode=link $(KOKKOS_CXX ) \
432+ $(LDFLAGS ) $(AM_LDFLAGS ) $(KOKKOS_LDFLAGS ) -o $@ \
433+ $(unit_tests_kokkos_opt_object ) \
434+ $(top_builddir ) /libmesh_opt.la $(KOKKOS_LIBS ) $(libmesh_optional_LIBS ) $(LIBS )
435+
436+ -include $(kokkos_unit_test_depfiles )
437+ endif
404438
405439CLEANFILES = cube_mesh.xda \
406440 slit_mesh.xda \
@@ -483,7 +517,8 @@ CLEANFILES = cube_mesh.xda \
483517 write_exodus_TRI6.e \
484518 write_exodus_TRI7.e \
485519 write_exodus_TRISHELL3.e \
486- smoother.out
520+ smoother.out \
521+ $(kokkos_unit_test_cleanfiles )
487522
488523# need to link any data files for VPATH builds
489524if LIBMESH_VPATH_BUILD
0 commit comments