Skip to content

Commit

Permalink
initial checkin of new_test directory which contains a possible struc…
Browse files Browse the repository at this point in the history
…ture for adding new tests
  • Loading branch information
billmcspadden-riscv committed Nov 5, 2023
1 parent c90cf2e commit 8451528
Show file tree
Hide file tree
Showing 15 changed files with 4,397 additions and 0 deletions.
3 changes: 3 additions & 0 deletions .gitmodules
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
[submodule "new_test/TEST_DIR_ROOT/lib/gmsl.git"]
path = new_test/TEST_DIR_ROOT/lib/gmsl.git
url = git@github.com:jgrahamc/gmsl.git
Empty file added new_test/TEST_DIR_ROOT/Makefile
Empty file.
Empty file.
Empty file.
Empty file.
Original file line number Diff line number Diff line change
@@ -0,0 +1,246 @@
# vim: set tabstop=4 shiftwidth=4 noexpandtab
# ====================================================================================================================
# Filename: Makefile
#
# Description: Makefile for building and running
#
# Author(s): Bill McSpadden (bill@riscv.org)
#
# Revision: See git log
#
# ====================================================================================================================
#
# SHELL is set to /bin/sh as default for make
# On Ubuntu, /bin/sh is a symlink to /bin/dash
# /bin/dash does not behave much like bash.
# I want bash to be the shell we use in this environment,
# not dash.
SHELL := /bin/bash
$(info SHELL: ${SHELL})

# TEST_DIR_PATH_KEYDIR is the directory name under which the
# test directory exists. This directory contains the items
# needed to build and run RISC-V tests. This keyword is needed
# in order that this makefile and all 'included' makefiles can
# find the consistent set of tools for building and running
# tests.
TEST_DIR_PATH_KEYDIR := TEST_DIR_ROOT

# TEST_DIR_PATH is the full directory path to the current test
# directory. This is an important variable for running in this
# particular enviornment.
TEST_DIR_PATH := $(shell \
sandbox_root=$$PWD ; \
if [[ "$$sandbox_root" =~ /${TEST_DIR_PATH_KEYDIR}/ ]] ; \
then \
while [ ! `basename $$sandbox_root` == ${TEST_DIR_PATH_KEYDIR} ] ; \
do \
sandbox_root=`dirname $$sandbox_root`; \
if [[ $sandbox_root == "/" ]] ; \
then \
echo "NULL" ; \
break ; \
fi; \
done ; \
echo "$$sandbox_root" ; \
else \
echo "NULL" ; \
fi; \
)

$(info TEST_DIR_PATH: ${TEST_DIR_PATH})
$(info TEST_DIR_PATH realpath: $(realpath ${TEST_DIR_PATH}))
$(info TEST_DIR_PATH abspath: $(abspath ${TEST_DIR_PATH}))

# Use the GNU Make Standard Library. It provides a Make API
# for useful data structures and functions.
include ${TEST_DIR_PATH}/lib/gmsl.git/gmsl


#=========================================================
# A test definition

ASM_FLAGS :=
RUN_FLAGS := -h
XLEN := RV32
OBJDIR_TMP := $(strip ${XLEN} ${ASM_FLAGS} ${RUN_FLAGS})


# Create a unique objdir name for the variations of the test.
# make does not do a good, general job of string processing with
# spaces, so we'll use sed instead with

UNIQ_TESTNAME := $(shell echo ${OBJDIR_TMP} | sed 's/ /__/g' | sed 's/-/_/g')
$(info UNIQ_TESTNAME: ${UNIQ_TESTNAME})

OBJDIR := $(addsuffix .artifactdir,${UNIQ_TESTNAME})
$(info OBJDIR: ${OBJDIR})

TESTLIST := $(call set_insert,${UNIQ_TESTNAME},${TESTLIST})
$(call set,ASM_FLAGS_AA,${UNIQ_TESTNAME},${ASM_FLAGS})
$(info ASM_FLAGS: $(call get,ASM_FLAGS_AA,${UNIQ_TESTNAME}))
$(call set,RUN_FLAGS_AA,${UNIQ_TESTNAME},${RUN_FLAGS})
$(info RUN_FLAGS: $(call get,RUN_FLAGS_AA,${UNIQ_TESTNAME}))
$(call set,XLEN_AA,${UNIQ_TESTNAME},${XLEN})
$(info XLEN: $(call get,XLEN_AA,${UNIQ_TESTNAME}))
#=========================================================

#=========================================================
# A test definition

C_SRC := $(wildcard *.c)
C_OBJS := $(subst .c,.o,${C_SRC})
CC_FLAGS :=
ASM_SRC := $(wildcard *.S *.s)
ASM_OBJS := $(subst .s,.o,$(subst .S,.o,${ASM_SRC}))
OBJS := ${C_OBJS} ${ASM_OBJS}
ASM_FLAGS :=
LD_FILE :=
LD_FLAGS :=
RUN_FLAGS := -h
XLEN := RV64
OBJDIR_TMP := $(strip ${XLEN} ${ASM_FLAGS} ${CC_FLAGS} ${LD_FILE} ${LD_FLAGS} ${RUN_FLAGS})


# Create a unique objdir name for the variations of the test.
# make does not do a good, general job of string processing with
# spaces, so we'll use sed instead with

UNIQ_TESTNAME := $(shell echo ${OBJDIR_TMP} | sed 's/ /__/g' | sed 's/-/_/g')
$(info UNIQ_TESTNAME: ${UNIQ_TESTNAME})

OBJDIR := $(addsuffix .artifactdir,${UNIQ_TESTNAME})
$(info OBJDIR: ${OBJDIR})

TESTLIST := $(call set_insert,${UNIQ_TESTNAME},${TESTLIST})
$(call set,ASM_FLAGS_AA,${UNIQ_TESTNAME},${ASM_FLAGS})
$(info ASM_FLAGS: $(call get,ASM_FLAGS_AA,${UNIQ_TESTNAME}))
$(call set,RUN_FLAGS_AA,${UNIQ_TESTNAME},${RUN_FLAGS})
$(info RUN_FLAGS: $(call get,RUN_FLAGS_AA,${UNIQ_TESTNAME}))
$(call set,XLEN_AA,${UNIQ_TESTNAME},${XLEN})
$(info XLEN: $(call get,XLEN_AA,${UNIQ_TESTNAME}))
#=========================================================
#=========================================================
# A test definition

ASM_FLAGS :=
RUN_FLAGS := -invalid_switch
XLEN := RV64
OBJDIR_TMP := $(strip ${XLEN} ${ASM_FLAGS} ${RUN_FLAGS})


# Create a unique objdir name for the variations of the test.
# make does not do a good, general job of string processing with
# spaces, so we'll use sed instead with

UNIQ_TESTNAME := $(shell echo ${OBJDIR_TMP} | sed 's/ /__/g' | sed 's/-/_/g')
$(info UNIQ_TESTNAME: ${UNIQ_TESTNAME})

OBJDIR := $(addsuffix .artifactdir,${UNIQ_TESTNAME})
$(info OBJDIR: ${OBJDIR})

TESTLIST := $(call set_insert,${UNIQ_TESTNAME},${TESTLIST})
$(call set,ASM_FLAGS_AA,${UNIQ_TESTNAME},${ASM_FLAGS})
$(info ASM_FLAGS: $(call get,ASM_FLAGS_AA,${UNIQ_TESTNAME}))
$(call set,RUN_FLAGS_AA,${UNIQ_TESTNAME},${RUN_FLAGS})
$(info RUN_FLAGS: $(call get,RUN_FLAGS_AA,${UNIQ_TESTNAME}))
$(call set,XLEN_AA,${UNIQ_TESTNAME},${XLEN})
$(info XLEN: $(call get,XLEN_AA,${UNIQ_TESTNAME}))
#=========================================================

$(info TESTLIST: ${TESTLIST})

TESTDIRS := $(wildcard *.testdir)
ARTIFACTDIRS := $(wildcard *.artifactdir)








all:


build:


install:


# Run in parallel (potentially, based on the -j switch to make)
# TODO: also redirect stderr into test.failed
.PHONY: ${TESTLIST}
run_tests : ${TESTLIST}
${TESTLIST} :
@echo "making \"$@\"" ;
@mkdir -p $@.artifactdir || ( echo "unable to create $@.artifactdir" >> test.failed ; exit $$? ; ) ;
@if [ ! -e ${TEST_DIR_PATH}/../../c_emulator/riscv_sim_$(call get,XLEN_AA,$@) ] ; \
then \
echo "${TEST_DIR_PATH}/../../c_emulator/riscv_sim_$@.$(call get,XLEN_AA,$@) does not exist." >> $@.artifactdir/test.failed ; \
fi ;
@${TEST_DIR_PATH}/../../c_emulator/riscv_sim_$(call get,XLEN_AA,$@) $(call get,arr_sw,$@)> $@.artifactdir/test.run.stdout ; \
if [ $$? -ne 0 ] ; \
then \
echo "riscv_sim_$@.$(call get,XLEN_AA,$@) exited with nonzero exit status" >> $@.artifactdir/test.failed ; \
fi ;
@if [ ! -e $@.artifactdir/test.run.stdout ] ; \
then \
echo "file, \"$@.artifactdir/test.run.stdout\" not found" >> $@.artifactdir/test.failed ; \
fi ;
@if [ ! -e $@.artifactdir/test.failed ] ; \
then \
echo "${PWD} passed" >> $@.artifactdir/test.passed ; \
fi;


# Gather all the test results from this directory on down.
# Do not run this target in parallel, else the output into
# ./test.failed will get intermixed and become unreadable.
check :
@echo "$$PWD: making \"$@\"" ;
@rm -f test.passed test.failed ;
@for testdir in ${TESTDIRS}; \
do \
if [ ! -e $$testdir/Makefile ] ; \
then \
echo "ERROR: no Makefile in $$testdir." >> test.failed; \
fi ; \
make -C $$testdir $@ ; \
if [ $$? -ne 0 ] ; \
then \
echo "'make -C $$testdir $@' exited with nonzero exit status" >> test.failed ; \
fi ; \
done;
@for artifactdir in ${ARTIFACTDIRS}; \
do \
if [ -e $$artifactdir/test.failed ] ; \
then \
echo "$$artifactdir/test.failed exists." >> test.failed; \
cat $$artifactdir/test.failed >> test.failed ; \
fi; \
if [ -e $$artifactdir/test.passed ] ; \
then \
echo "$$PWD/$$artifactdir/test.passed exists." >> test.passed; \
fi; \
if [ ! -e $$artifactdir/test.failed ] ; \
then \
if [ ! -e $$artifactdir/test.passed ] ; \
then \
echo "neither $$PWD/$$artifactdir/test.failed nor test.passed exists." >> test.failed ; \
fi ; \
fi; \
done ;



clean:
rm -f test.failed test.passed
rm -rf *.artifactdir

# Cleans local artifacts and the install location
clean_all:



Original file line number Diff line number Diff line change
@@ -0,0 +1,40 @@
# SPDX-License-Identifier: BSD-2-Clause
# SPDX-FileCopyrightText: Copyright 2019-2021 Siemens. All rights reserved.
#
# Redistribution and use in source and binary forms, with or without
# modification, are permitted provided that the following conditions are met:
#
# 1. Redistributions of source code must retain the above copyright notice,
# this list of conditions and the following disclaimer.
#
# 2. Redistributions in binary form must reproduce the above copyright notice,
# this list of conditions and the following disclaimer in the documentation
# and/or other materials provided with the distribution.
#
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
# ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
# LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
# SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
# INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
# CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
# POSSIBILITY OF SUCH DAMAGE.

cmake_minimum_required(VERSION 3.10 FATAL_ERROR)

find_program(CMAKE_ASM_COMPILER riscv64-unknown-elf-gcc HINTS /opt/riscv/bin)
set(CMAKE_ASM_LINK_EXECUTABLE "<CMAKE_LINKER> <LINK_FLAGS> <OBJECTS> <LINK_LIBRARIES> -o <TARGET>")

project(br_j_asm ASM)

add_executable(br_j_asm.riscv test.S)

set(CONFIG_BASE 0x20010000)
set(CMAKE_ASM_FLAGS -DCONFIG_BASE=${CONFIG_BASE})
# If using cmake > 3.13 you could use
#add_link_options(-T ${CMAKE_SOURCE_DIR}/riscv_test.ld.spike)
# instead of setting LINK_FLAGS
set_property(TARGET br_j_asm.riscv APPEND_STRING PROPERTY LINK_FLAGS " -T ${CMAKE_SOURCE_DIR}/riscv_test.ld.spike")
Loading

0 comments on commit 8451528

Please sign in to comment.