blob: 01c3017e47834021c1227dd4669f79b708746163 [file] [log] [blame]
# https://www.spec.org/cpu2017/Docs/benchmarks/628.pop2_s.html
include(../../SpecCPU2017.cmake)
if (NOT TEST_SUITE_SPEC2017_ROOT)
return ()
endif ()
ninja_required()
speccpu2017_convert_bigendian_required()
speccpu2017_benchmark(SPEED)
macro(pop2_prepare_rundir)
# Re-use the speccpu2017_prepare_rundir but then implement an input
# file fix at the end. input file for pop2 is hard-coded to drv_in,
# but actual filename in SPEC2017 benchmark input directory is
# drv_in.in. The SPEC perl run script renames the file as well.
speccpu2017_prepare_rundir()
foreach (_runtype IN LISTS TEST_SUITE_RUN_TYPE)
llvm_copy(${PROG} "${RUN_${_runtype}_DIR}/drv_in" "${INPUT_${_runtype}_DIR}/drv_in.in")
endforeach ()
endmacro()
speccpu2017_add_include_dirs(
${CMAKE_CURRENT_BINARY_DIR}
${SRC_DIR}
${SRC_DIR}/netcdf/include
)
# pop2 has Fortran sources that need to be processed with specpp and C
# sources that do not require it.
# Compiler definitions affect C and *.f90 files, but not *.F90 files.
add_definitions(
-D_MPISERIAL
-D_NETCDF
-D_USEBOX
-DCCSMCOUPLED=1
-DNO_SHR_VMATH
-DBLCKX=50
-DBLCKY=4
-DMXBLCKS=58
-DNO_GETTIMEOFDAY
-DSPEC_CASE_FLAG
)
## test ########################################################################
speccpu2017_run_test(RUN_TYPE test)
## train #######################################################################
speccpu2017_run_test(RUN_TYPE train)
## ref #########################################################################
speccpu2017_run_test(RUN_TYPE ref)
################################################################################
# SPEC Test has both absolute and relative tolerance with same order
speccpu2017_verify_output(IGNORE_WHITESPACE ABSOLUTE_TOLERANCE 0.03 RELATIVE_TOLERANCE 0.03)
# *.F90 files are preprocessed with specpp and written to the CMake build
# directory. We only list C sources files and Fortran files that don't
# need to be preprocessed below.
speccpu2017_add_executable(
netcdf/attr.c
netcdf/dim.c
netcdf/error.c
netcdf/fort-attio.c
netcdf/fort-control.c
netcdf/fort-dim.c
netcdf/fort-genatt.c
netcdf/fort-geninq.c
netcdf/fort-genvar.c
netcdf/fort-lib.c
netcdf/fort-misc.c
netcdf/fort-v2compat.c
netcdf/fort-var1io.c
netcdf/fort-varaio.c
netcdf/fort-vario.c
netcdf/fort-varmio.c
netcdf/fort-varsio.c
netcdf/libvers.c
netcdf/nc.c
netcdf/ncx.c
netcdf/posixio.c
netcdf/putget.c
netcdf/string.c
netcdf/v1hpg.c
netcdf/v2i.c
netcdf/var.c
netcdf/netcdf.f90
netcdf/typeSizes.f90
mpi.c
send.c
recv.c
collective.c
req.c
list.c
handles.c
comm.c
group.c
time.c
pack.c
get_zeits.c
pnetcdfversion.c
topology.c
f_wrappers.c
GPTLget_memusage.c
GPTLprint_memusage.c
GPTLutil.c
shr_jlcp.c
shr_vmath_fwrap.c
threadutil.c
)
# Preprocess *.F90 with specpp and add sources to target
file(GLOB POP2_F90_SRCS ${SRC_DIR}/*.F90)
list(REMOVE_ITEM POP2_F90_SRCS ${SRC_DIR}/test.F90)
speccpu2017_run_specpp(TARGET ${PROG}
SRCS ${POP2_F90_SRCS} DEFS
-D_MPISERIAL
-D_NETCDF
-D_USEBOX
-DCCSMCOUPLED=1
-DNO_SHR_VMATH
-DBLCKX=50
-DBLCKY=4
-DMXBLCKS=58
-DNO_GETTIMEOFDAY
-I${SRC_DIR}/netcdf/include
)
# Several compiler options below for C and Fortran
set_property(TARGET ${PROG} PROPERTY C_STANDARD 99)
if (SUPPORTS_FALLOW_ARGUMENT_MISMATCH)
target_compile_options(${PROG} PRIVATE $<$<COMPILE_LANGUAGE:Fortran>:-fallow-argument-mismatch>)
endif ()
if (SUPPORTS_FCONVERT_BIG_ENDIAN) # GCC
target_compile_options(${PROG} PRIVATE $<$<COMPILE_LANGUAGE:Fortran>:-fconvert=big-endian>)
elseif (SUPPORTS_CONVERT_BIG_ENDIAN) # Intel
target_compile_options(${PROG} PRIVATE $<$<COMPILE_LANGUAGE:Fortran>:-convert big_endian>)
endif ()
pop2_prepare_rundir()