Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
13 changes: 13 additions & 0 deletions .gitexternals
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
[external "sail-riscv"]
path = simulators/sail/riscv
url = git@github.com:danceos/sail-riscv.git
branch = master
only = update
vcs = git

[external "sail-cheri-riscv"]
path = simulators/sail/cheri-riscv
url = git@github.com:danceos/sail-cheri-riscv.git
branch = master
only = update
vcs = git
4 changes: 3 additions & 1 deletion .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -54,5 +54,7 @@ debuggers/openocd/src/startup.tcl
debuggers/openocd/src/startup_tcl.c
debuggers/openocd/src/target/xscale_debug.h
debuggers/openocd/stamp-h1
.idea

.idea
simulators/sail/riscv
simulators/sail/cheri-riscv
71 changes: 66 additions & 5 deletions CMakeLists.txt
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
# cmake 2.6 might suffice, but we don't test it (even Debian stable has 2.8.2)
cmake_minimum_required(VERSION 2.8.2)
# cmake 2.6 might suffice, but we don't test it (even Debian stable has 3.12)
cmake_minimum_required(VERSION 3.12)
if("${CMAKE_VERSION}" VERSION_GREATER 2.8.3)
# system cmake modules take precedence over those in CMAKE_MODULE_PATH
# (makes cmake 2.8.4 and newer)
Expand All @@ -15,6 +15,8 @@ else()
set(PROJECT_VERSION "1.0.1" CACHE INTERNAL "FAIL* version number" FORCE)
endif()

cmake_policy(SET CMP0074 NEW)

ENABLE_TESTING()

#### Put all resulting library files in <your_build_dir>/lib ####
Expand Down Expand Up @@ -43,13 +45,18 @@ include(doxygen)

#### Backend selection ####
OPTION( BUILD_BOCHS "Build Bochs Variant?" ON)
OPTION( BUILD_SAIL "Build Sail Variant" OFF)
OPTION( BUILD_GEM5 "Build gem5 Variant?" OFF)
OPTION( BUILD_QEMU "Build QEMU Variant?" OFF)
OPTION( BUILD_T32 "Build Lauterbach Trace32 Variant?" OFF)
OPTION( BUILD_PANDA "Build Pandaboard ES + Flyswatter2 Variant?" OFF)

OPTION( BUILD_X86 "Build for x86 guests?" ON)
OPTION( BUILD_ARM "Build for ARM guests?" OFF)
OPTION( BUILD_X86 "Build for x86 guests?" ON)
OPTION( BUILD_ARM "Build for ARM guests?" OFF)
OPTION( BUILD_RISCV_CHERI "Build for CHERI enabled RISC-V guests?" OFF)
OPTION( BUILD_RISCV "Build for RISC-V guests?" OFF)

OPTION( BUILD_64BIT "Build RISCV or CHERI RISC-V with 64-bit support" OFF)

# FIXME: only add simulators/ to include_directories, and include, e.g.,
# bochs/bochs.h in FAIL*. -> avoids naming conflicts (e.g., /usr/include/elf.h
Expand All @@ -69,8 +76,61 @@ elseif(BUILD_T32)
add_subdirectory(scripts/t32cmm)
elseif(BUILD_PANDA)
include_directories(debuggers/openocd/src debuggers/openocd/jimtcl src/core)
elseif(BUILD_SAIL)
message(STATUS "[${PROJECT_NAME}] Building Sail ...")
SET(VARIANT sail)

if(BUILD_64BIT)
message(STATUS "[${PROJECT_NAME}] Building 64-bit Sail Simulator ...")
set(ARCH_SUFFIX "RV64")
else()
message(STATUS "[${PROJECT_NAME}] Building 32-bit Sail Simulator ...")
set(ARCH_SUFFIX "RV32")
endif()

if (BUILD_RISCV)
message(STATUS "[${PROJECT_NAME}] Building Sail RISC-V Variant ...")
set(SAIL_ARCH riscv)
set(SAIL_SIMULATOR build/riscv_sim_${ARCH_SUFFIX}.a)
set(SAIL_SOFTFLOAT_DIR c_emulator/SoftFloat-3e/build/Linux-RISCV-GCC)
set(SAIL_SOFTFLOAT_BUILD_ARGS SPECIALIZE_TYPE=RISCV)
set(SAIL_BUILD_ARGS ${SAIL_SIMULATOR} ARCH=${ARCH_SUFFIX})
elseif(BUILD_RISCV_CHERI)
message(STATUS "[${PROJECT_NAME}] Building Sail CHERI RISC-V Variant")
set(SAIL_ARCH cheri-riscv)
set(SAIL_SIMULATOR build/cheri_riscv_sim_${ARCH_SUFFIX}.a)
set(SAIL_SOFTFLOAT_DIR sail-riscv/c_emulator/SoftFloat-3e/build/Linux-RISCV-GCC)
set(SAIL_SOFTFLOAT_BUILD_ARGS SPECIALIZE_TYPE=RISCV)
set(SAIL_BUILD_ARGS ${SAIL_SIMULATOR} ARCH=${ARCH_SUFFIX})
else()
message( FATAL_ERROR "No supported architecture selected" )
endif()
# Architecture specific include directory
message("Add include: ${PROJECT_SOURCE_DIR}/src/core/sal/sail/${SAIL_ARCH}")
include_directories("${PROJECT_SOURCE_DIR}/src/core/sal/sail/${SAIL_ARCH}")
endif(BUILD_BOCHS)

if(BUILD_LLVM_DISASSEMBLER)
if (BUILD_RISCV_CHERI)
set(FIND_PACKAGE_VERSION 11.0.0)
set(LLVM_ROOT /opt/llvm-cheri-05.2020 CACHE STRING "Where is LLVM located")
set(LLVM_FIND_PACKAGE_ARGS HINTS ${LLVM_ROOT} NO_DEFAULT_PATH)
else()
set(FIND_PACKAGE_VERSION 11.0.0)
set(LLVM_FIND_PACKAGE_ARGS HINTS)
endif()

find_package(LLVM ${FIND_PACKAGE_VERSION}
REQUIRED
CONFIG
${FIND_PACKAGE_ARGS}
)

message(STATUS "Found LLVM ${LLVM_PACKAGE_VERSION}")
message(STATUS "Using LLVMConfig.cmake in: ${LLVM_DIR}")

endif(BUILD_LLVM_DISASSEMBLER)

## Tell the linker where to find the FAIL* libraries
link_directories("${LIBRARY_OUTPUT_PATH}")

Expand All @@ -84,10 +144,11 @@ add_subdirectory(tools)
add_subdirectory(src)


#### Backend-related build system stuff
#### Backend-related build system stuff [cmake/{name}.cmake]
include(bochs)
include(gem5)
include(qemu)
include(t32)
include(panda)
include(sail)

34 changes: 0 additions & 34 deletions cmake/FindLLVM.cmake

This file was deleted.

82 changes: 82 additions & 0 deletions cmake/sail.cmake
Original file line number Diff line number Diff line change
@@ -0,0 +1,82 @@
if(BUILD_SAIL)
find_package(ZLIB REQUIRED) # -lz
if(ZLIB_FOUND)
set(sail_library_dependencies ${sail_library_dependencies} ${ZLIB_LIBRARIES})
endif(ZLIB_FOUND)

#FIXME: find package GMP dynamically

#find_package(GMP REQUIRED)
#if(GMP_FOUND)
# set(sail_library_dependencies ${sail_library_dependencies} ${GMP_LIBRARIES})
#endif(GMP_FOUND)

set(sail_library_dependencies ${sail_library_dependencies} -lgmp)

set(SAIL_SIMULATOR_DIR ${PROJECT_SOURCE_DIR}/simulators/sail)
set(sail_src_dir ${SAIL_SIMULATOR_DIR}/${SAIL_ARCH})
add_executable(fail-client ${SAIL_SIMULATOR_DIR}/fail_empty_source_file_for_build.cc)

# make sure aspects don't fail to match in entry.cc and the experiment headers are found
include_directories(${PROJECT_SOURCE_DIR}/src/core ${CMAKE_BINARY_DIR}/src/core)

set(sail_build_CC "${CMAKE_C_COMPILER}")
set(sail_build_CFLAGS "-I${PROJECT_SOURCE_DIR}/src/core -I${CMAKE_BINARY_DIR}/src/core")
configure_file(${PROJECT_SOURCE_DIR}/simulators/sail/sail-cc.in
${CMAKE_CURRENT_BINARY_DIR}/sail-cc)

include(ExternalProject)
ExternalProject_Add(
libsail-emu_external
SOURCE_DIR ${sail_src_dir}
## Put configure command here, to prevent cmake calling make configure
CONFIGURE_COMMAND ${CMAKE_COMMAND} -E echo "[${PROJECT_NAME}] No configure for libsail-emu"
BUILD_COMMAND
${CMAKE_COMMAND} -E env CC=${CMAKE_CURRENT_BINARY_DIR}/sail-cc $(MAKE) -C ${sail_src_dir} ${SAIL_BUILD_ARGS}
BUILD_IN_SOURCE 1
BUILD_ALWAYS true
## Put install command here, to prevent cmake calling make install
INSTALL_COMMAND ${CMAKE_COMMAND} -E echo "[${PROJECT_NAME}] No install for libsail-emu"

)

add_library(libsail-emu STATIC IMPORTED GLOBAL)
add_dependencies(libsail-emu libsail-emu_external)
set_property(TARGET libsail-emu PROPERTY IMPORTED_LOCATION ${sail_src_dir}/${SAIL_SIMULATOR})

set(SAIL_SOFTFLOAT_LIB ${SAIL_SOFTFLOAT_DIR}/softfloat.a)
ExternalProject_Add(
libsail-softfloat_external
SOURCE_DIR ${sail_src_dir}
CONFIGURE_COMMAND ${CMAKE_COMMAND} -E echo "[${PROJECT_NAME}] no configure for libsail-softfloat"
BUILD_COMMAND
${CMAKE_COMMAND} -E env CC=${CMAKE_CURRENT_BINARY_DIR}/sail-cc $(MAKE) -C ${SAIL_SOFTFLOAT_DIR} ${SAIL_SOFTFLOAT_BUILD_ARGS}
INSTALL_COMMAND ${CMAKE_COMMAND} -E echo "[${PROJECT_NAME}] no install for libsail-softfloat"
BUILD_IN_SOURCE 1
)
add_library(libsail-softfloat STATIC IMPORTED GLOBAL)
set_property(TARGET libsail-softfloat PROPERTY IMPORTED_LOCATION ${sail_src_dir}/${SAIL_SOFTFLOAT_LIB})
add_dependencies(libsail-softfloat libsail-softfloat_external)
#set(sail_library_dependencies ${sail_library_dependencies}
#libsail-softfloat)

# add all libraries which need to be linked with libsail-emu to the target INTERFACE_LINK_LIBRARIES
# this way they get linked too when libsail-emu gets linked to a target.
set_property(TARGET libsail-emu PROPERTY INTERFACE_LINK_LIBRARIES ${sail_library_dependencies})

add_dependencies(fail-client libsail-emu libsail-softfloat)
target_link_libraries(fail-client fail libsail-emu libsail-softfloat fail-sal fail-sail fail-fsp fail-sal)
install(TARGETS fail-client RUNTIME DESTINATION bin)

# Get stamp directory to touch files for forcing rebuilds.
ExternalProject_Get_Property(libsail-emu_external stamp_dir)

add_custom_target(libsailclean
COMMAND +make -C ${sail_src_dir} clean
COMMAND +make -C ${sail_src_dir}/${SAIL_SOFTFLOAT_DIR} clean
# touch stamp file to force rebuild, without calling configure again.
COMMAND ${CMAKE_COMMAND} -E touch_nocreate ${stamp_dir}/libsail-emu_external-configure || true
COMMAND ${CMAKE_COMMAND} -E touch_nocreate ${stamp_dir}/libsail-softfloat_external-configure || true
COMMENT "[${PROJECT_NAME}] Cleaning all up (clean in sail)"
)
endif(BUILD_SAIL)
72 changes: 72 additions & 0 deletions configurations/sail.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,72 @@
#!/bin/bash
FAILPATH=$(dirname $0)/..
ARCH=$1; shift
DEBUG=$1; shift

USE_64=OFF
RISCV=OFF
RISCV_CHERI=OFF

case $ARCH in
riscv32)
RISCV=ON
;;
riscv64)
USE_64=ON
RISCV=ON
;;
cheri32)
RISCV_CHERI=ON
;;
cheri64)
USE_64=ON
RISCV_CHERI=ON
;;
*)
echo "Unknown ARCH argument"
exit 1
;;
esac

case $DEBUG in
ON)
TYPE=Debug
;;

OFF|"")
TYPE=Release
;;

*)
echo "Unknown DEBUG Arg"
exit 1
esac


cmake \
-DCMAKE_AGPP_FLAGS:STRING="--c_compiler clang++" \
-DBUILD_64BIT:BOOL="${USE_64}"\
-DVERBOSE_MAKE:BOOL="${DEBUG}" \
-DCMAKE_BUILD_TYPE="${TYPE}" \
-DBUILD_SAIL:BOOL=ON \
-DBUILD_RISCV_CHERI:BOOL=${RISCV_CHERI} \
-DBUILD_RISCV:BOOL=${RISCV} \
-DBUILD_BOCHS:BOOL=OFF \
-DBUILD_GEM5:BOOL=OFF \
-DBUILD_X86:BOOL=OFF \
-DBUILD_ARM:BOOL=OFF \
-DCONFIG_EVENT_BREAKPOINTS:BOOL=ON \
-DCONFIG_EVENT_IOPORT:BOOL=ON \
-DCONFIG_EVENT_MEMREAD:BOOL=ON \
-DCONFIG_EVENT_MEMWRITE:BOOL=ON \
-DCONFIG_EVENT_TRAP:BOOL=ON \
-DCONFIG_SR_RESTORE:BOOL=ON \
-DCONFIG_SR_SAVE:BOOL=ON \
-DEXPERIMENTS_ACTIVATED:STRING="generic-tracing;generic-experiment" \
-DPLUGINS_ACTIVATED:STRING="tracing;serialoutput" \
-DBUILD_DUMP_TRACE:BOOL=ON \
-DBUILD_IMPORT_TRACE:BOOL=ON \
-DBUILD_PRUNE_TRACE:BOOL=ON \
-DBUILD_LLVM_DISASSEMBLER=ON \
-DCLIENT_RETRY_COUNT=1 \
-H${FAILPATH}
Loading