Merge "CTest support for QEMU/Renode."
diff --git a/cmake/riscv_baremetal.cmake b/cmake/riscv_baremetal.cmake
index 9c8b93b..bd67cf9 100644
--- a/cmake/riscv_baremetal.cmake
+++ b/cmake/riscv_baremetal.cmake
@@ -1,55 +1,83 @@
-set(SHODAN_TOOLCHAIN_PATH ${CMAKE_CURRENT_SOURCE_DIR}/../../cache/toolchain_vp/bin CACHE STRING "Shodan toolchain path")
-message (STATUS "Shodan toolchain path is ${SHODAN_TOOLCHAIN_PATH}")
-find_file( RISCV_GCC_COMPILER "riscv32-unknown-elf-gcc" HINTS ${SHODAN_TOOLCHAIN_PATH} PATHS ENV INCLUDE)
+# If set to true, build for IREE using clang. If false, build for gcc.
+set(BUILD_IREE OFF CACHE BOOL "")
 
-# Check compiler found
-if (EXISTS ${RISCV_GCC_COMPILER})
-message(STATUS "RISC-V GCC found. Using ${RISCV_GCC_COMPILER}")
+set(CMAKE_SYSTEM_NAME          Generic)
+set(CMAKE_SYSTEM_ABI           ilp32)
+set(CMAKE_EXECUTABLE_SUFFIX    ".elf")
+
+set(VEC_DEFAULT_COPTS
+     "-Wall"
+     "-O0"
+     "-g3"
+     "-ggdb"
+     "-Werror")
+
+if( ${BUILD_IREE} )
+     set(CMAKE_SYSTEM_PROCESSOR rv32imfv0p10)
+
+     set(RISCV_TOOLCHAIN_ROOT "$ENV{CACHE}/toolchain_iree_rv32imf/bin/" CACHE PATH "RISC-V toolchain root path")
+     message (STATUS "RISC-V toolchain path is ${RISCV_TOOLCHAIN_ROOT}")
+     find_file(RISCV_COMPILER "clang" HINTS ${RISCV_TOOLCHAIN_ROOT} PATHS ENV INCLUDE)
+
+     set(CMAKE_FIND_ROOT_PATH ${RISCV_TOOLCHAIN_ROOT})
+     list(APPEND CMAKE_PREFIX_PATH "${RISCV_TOOLCHAIN_ROOT}")
+
+     set(CMAKE_C_COMPILER "${RISCV_TOOLCHAIN_ROOT}/clang")
+     set(CMAKE_CXX_COMPILER "${RISCV_TOOLCHAIN_ROOT}/clang++")
+     set(CMAKE_AR "${RISCV_TOOLCHAIN_ROOT}/llvm-ar")
+     set(CMAKE_RANLIB "${RISCV_TOOLCHAIN_ROOT}/llvm-ranlib")
+     set(CMAKE_STRIP "${RISCV_TOOLCHAIN_ROOT}/llvm-strip")
+
+     set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -menable-experimental-extensions -march=${CMAKE_SYSTEM_PROCESSOR}  -mabi=${CMAKE_SYSTEM_ABI}")
+     set(VEC_DEFAULT_COPTS "${VEC_DEFAULT_COPTS}"
+          "-Wno-unused-command-line-argument")
 else()
-message(FATAL_ERROR "RISC-V GCC not found. ${RISCV_GCC_COMPILER}")
+     set(CMAKE_SYSTEM_PROCESSOR rv32imv)
+
+     set(RISCV_TOOLCHAIN_ROOT ${CMAKE_CURRENT_SOURCE_DIR}/../../cache/toolchain_vp/bin CACHE STRING "RISC-V toolchain path")
+     message (STATUS "RISC-V toolchain path is ${RISCV_TOOLCHAIN_ROOT}")
+     find_file( RISCV_COMPILER "riscv32-unknown-elf-gcc" HINTS ${RISCV_TOOLCHAIN_ROOT} PATHS ENV INCLUDE)
+
+     get_filename_component(RISCV_TOOLCHAIN_BIN_PATH ${RISCV_COMPILER} DIRECTORY)
+     get_filename_component(RISCV_TOOLCHAIN_BIN_GCC ${RISCV_COMPILER} NAME_WE)
+     get_filename_component(RISCV_TOOLCHAIN_BIN_EXT ${RISCV_COMPILER} EXT)
+
+     message( "RISC-V GCC Path: ${RISCV_TOOLCHAIN_BIN_PATH}" )
+
+     STRING(REGEX REPLACE "\-gcc" "-" CROSS_COMPILE ${RISCV_COMPILER})
+     message( "RISC-V Cross Compile Prefix: ${CROSS_COMPILE}" )
+
+     set(CMAKE_AR ${CROSS_COMPILE}ar)
+     set(CMAKE_ASM_COMPILER ${RISCV_COMPILER})
+     set(CMAKE_C_COMPILER ${RISCV_COMPILER})
+     set(CMAKE_CXX_COMPILER ${CROSS_COMPILE}g++)
+
+     set( CMAKE_OBJCOPY      ${RISCV_TOOLCHAIN_BIN_PATH}/${CROSS_COMPILE}objcopy
+          CACHE FILEPATH "The toolchain objcopy command " FORCE )
+
+     set( CMAKE_OBJDUMP      ${RISCV_TOOLCHAIN_BIN_PATH}/${CROSS_COMPILE}objdump
+          CACHE FILEPATH "The toolchain objdump command " FORCE )
+
+     set( CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -march=${CMAKE_SYSTEM_PROCESSOR}  -mabi=${CMAKE_SYSTEM_ABI}")
+
+     set(VEC_DEFAULT_COPTS "${VEC_DEFAULT_COPTS}"
+          "-ffreestanding"
+          "-ffunction-sections"
+          "-fstack-usage"
+          "-mstrict-align"
+     )
 endif()
 
-get_filename_component(RISCV_TOOLCHAIN_BIN_PATH ${RISCV_GCC_COMPILER} DIRECTORY)
-get_filename_component(RISCV_TOOLCHAIN_BIN_GCC ${RISCV_GCC_COMPILER} NAME_WE)
-get_filename_component(RISCV_TOOLCHAIN_BIN_EXT ${RISCV_GCC_COMPILER} EXT)
-
-message( "RISC-V GCC Path: ${RISCV_TOOLCHAIN_BIN_PATH}" )
-
-STRING(REGEX REPLACE "\-gcc" "-" CROSS_COMPILE ${RISCV_GCC_COMPILER})
-message( "RISC-V Cross Compile Prefix: ${CROSS_COMPILE}" )
-
-set( CMAKE_SYSTEM_NAME          Generic )
-set( CMAKE_SYSTEM_PROCESSOR     rv32imv )
-set( CMAKE_SYSTEM_ABI           ilp32 )
-set( CMAKE_EXECUTABLE_SUFFIX    ".elf")
-
-set(CMAKE_AR ${CROSS_COMPILE}ar)
-set(CMAKE_ASM_COMPILER ${RISCV_GCC_COMPILER})
-set(CMAKE_C_COMPILER ${RISCV_GCC_COMPILER})
-set(CMAKE_CXX_COMPILER ${CROSS_COMPILE}g++)
-
-set( CMAKE_OBJCOPY      ${RISCV_TOOLCHAIN_BIN_PATH}/${CROSS_COMPILE}objcopy
-     CACHE FILEPATH "The toolchain objcopy command " FORCE )
-
-set( CMAKE_OBJDUMP      ${RISCV_TOOLCHAIN_BIN_PATH}/${CROSS_COMPILE}objdump
-     CACHE FILEPATH "The toolchain objdump command " FORCE )
-
-set( CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -march=${CMAKE_SYSTEM_PROCESSOR}  -mabi=${CMAKE_SYSTEM_ABI}")
+# Check compiler found
+if (EXISTS ${RISCV_COMPILER})
+     message(STATUS "RISC-V compiler found. Using ${RISCV_COMPILER}")
+else()
+     message(FATAL_ERROR "RISC-V compiler not found. ${RISCV_OMPILER}")
+endif()
 
 set( CMAKE_C_FLAGS "${CMAKE_C_FLAGS}" CACHE STRING "" )
 set( CMAKE_CXX_FLAGS "${CMAKE_C_FLAGS}" CACHE STRING "" )
 set( CMAKE_ASM_FLAGS "${CMAKE_C_FLAGS}" CACHE STRING "" )
 set( CMAKE_EXE_LINKER_FLAGS   "${CMAKE_EXE_LINKER_FLAGS}  -nostartfiles   " )
-set( VEC_DEFAULT_COPTS
-    "-Wall"
-    "-Werror"
-    "-O0"
-    "-g3"
-    "-ggdb"
-    "-ffreestanding"
-    "-ffunction-sections"
-    "-fstack-usage"
-    "-mstrict-align"
-)
 
-set( VEC_DEFAULT_LINKOPTS -specs=nano.specs -Wl,--gc-sections -Wl,--print-memory-usage -Wl,-Map=${PROJECT_NAME}.map)
\ No newline at end of file
+set( VEC_DEFAULT_LINKOPTS -specs=nano.specs -Wl,--gc-sections -Wl,--print-memory-usage -Wl,-Map=${PROJECT_NAME}.map)
diff --git a/springbok/crt0.s b/springbok/crt0.s
index 8904159..08c7490 100644
--- a/springbok/crt0.s
+++ b/springbok/crt0.s
@@ -44,14 +44,14 @@
         csrw mstatus, a0
 
         # Set lmul=8 and clear the register file
-        vsetvli t0, zero, e8, m8
+        vsetvli t0, zero, e8, m8, ta, ma 
         vmv.v.i v0, 0
         vmv.v.i v8, 0
         vmv.v.i v16, 0
         vmv.v.i v24, 0
 
         # Set lmul=1
-        vsetvli t0, zero, e8, m1
+        vsetvli t0, zero, e8, m1, ta, ma 
 
         # Set vector extension to "clean"
         xori a0, a0, 0x600
@@ -60,7 +60,11 @@
         ###############################################################
         # Reset all other CSRs, and perform any other processor setup #
         ###############################################################
-        # TODO(jonathantate): Fill this out
+        # Enable floating point unit
+        csrr a0, mstatus
+        li a1, 0x2000
+        or a0, a0, a1
+        csrw mstatus, a0
 
         #############################################################
         # Clear BSS, stack and unused DTCM memory, set up sentinels #
diff --git a/springbok/include/springbok.h b/springbok/include/springbok.h
index b15e3c7..ebe4564 100644
--- a/springbok/include/springbok.h
+++ b/springbok/include/springbok.h
@@ -7,11 +7,10 @@
 #define INFO_TAG "INFO"
 #define DEBUG_TAG "DEBUG"
 
-#define ENDLINE "\n"
 #define LOG_FMT "%s |"
 #define LOG_ARGS(LOG_TAG) LOG_TAG
 
-#define LOG_MAX_SZ  128
+#define LOG_MAX_SZ  256
 
 #define SIMLOG(sim_log_level,fmt, ...) \
     do { \
@@ -20,10 +19,10 @@
         springbok_simprint_##sim_log_level(tmp_log_msg, 0); \
     } while (0)
 
-#define LOG_ERROR(msg, args...) SIMLOG(error, LOG_FMT msg ENDLINE, LOG_ARGS(ERROR_TAG), ## args)
-#define LOG_WARN(msg, args...) SIMLOG(warning, LOG_FMT msg ENDLINE, LOG_ARGS(ERROR_TAG), ## args)
-#define LOG_INFO(msg, args...) SIMLOG(info, LOG_FMT msg ENDLINE, LOG_ARGS(INFO_TAG), ## args)
-#define LOG_DEBUG(msg, args...) SIMLOG(debug, LOG_FMT msg ENDLINE, LOG_ARGS(DEBUG_TAG), ## args)
-#define LOG_NOISY(msg, args...) SIMLOG(noisy, LOG_FMT msg ENDLINE, LOG_ARGS(ERROR_TAG), ## args)
+#define LOG_ERROR(msg, args...) SIMLOG(error, LOG_FMT msg, LOG_ARGS(ERROR_TAG), ## args)
+#define LOG_WARN(msg, args...) SIMLOG(warning, LOG_FMT msg, LOG_ARGS(ERROR_TAG), ## args)
+#define LOG_INFO(msg, args...) SIMLOG(info, LOG_FMT msg, LOG_ARGS(INFO_TAG), ## args)
+#define LOG_DEBUG(msg, args...) SIMLOG(debug, LOG_FMT msg, LOG_ARGS(DEBUG_TAG), ## args)
+#define LOG_NOISY(msg, args...) SIMLOG(noisy, LOG_FMT msg, LOG_ARGS(ERROR_TAG), ## args)
 
-#endif
\ No newline at end of file
+#endif
diff --git a/tests/vle_vse_test.cpp b/tests/vle_vse_test.cpp
index 80a4172..d80548c 100644
--- a/tests/vle_vse_test.cpp
+++ b/tests/vle_vse_test.cpp
@@ -45,7 +45,7 @@
       }
     for(int idx = 0; idx < MAXVL_BYTES; idx++)
     {
-      EXPECT_EQ(test_vector_1[idx], test_vector_2[idx]);
+      ASSERT_EQ(test_vector_1[idx], test_vector_2[idx]);
     }
   }
 }