Initial check-in * Move riscv_iree.cmake from build/. * Move the cmake flag/definition settings from riscv_iree.cmake to the top-level CMakeLists.txt. * Apply https://spacebeaker-review.git.corp.google.com/c/shodan/3p/google/iree/+/8080 to the top-level CMakeLists.txt. Change-Id: Ie855e540374b69041e959e989a23342aa82f0080
diff --git a/CMakeLists.txt b/CMakeLists.txt new file mode 100644 index 0000000..62a54f3 --- /dev/null +++ b/CMakeLists.txt
@@ -0,0 +1,40 @@ +cmake_minimum_required(VERSION 3.13.4) + +#------------------------------------------------------------------------------- +# Project configuration +#------------------------------------------------------------------------------- + +project(iree-riscv32) + +set_property(GLOBAL PROPERTY USE_FOLDERS ON) + +set(BUILD_RV64_LINUX OFF CACHE BOOL "Build RISC-V 64-bit Linux target (default: OFF)") +set(ITCM_LENGTH "256K" CACHE STRING "ITCM (I-mem) Length (default: 256K)") +add_link_options("LINKER:--defsym=__itcm_length__=${ITCM_LENGTH}") +set(STACK_SIZE "10K" CACHE STRING "Stack size (default: 10K)") +add_link_options("LINKER:--defsym=__stack_size__=${STACK_SIZE}") + +#------------------------------------------------------------------------------- +# IREE-specific settings +#------------------------------------------------------------------------------- +set(IREE_BUILD_COMPILER OFF) +set(IREE_ENABLE_MLIR OFF) +set(IREE_BUILD_SAMPLES ON) +set(IREE_ENABLE_THREADING OFF) +set(IREE_BUILD_TESTS OFF) +set(IREE_BUILD_BINDINGS_TFLITE OFF) +set(IREE_HAL_DRIVERS_TO_BUILD "Dylib;VMVX") + +#------------------------------------------------------------------------------- +# IREE-specific definitions +#------------------------------------------------------------------------------- +set(SPRINGBOK_CONFIG_HEADER "${CMAKE_CURRENT_SOURCE_DIR}/springbok_config.h") +add_definitions(-DFLATCC_USE_GENERIC_ALIGNED_ALLOC) +if(NOT ${BUILD_RV64_LINUX}) + add_definitions(-DIREE_PLATFORM_GENERIC) + add_definitions(-DIREE_SYNCHRONIZATION_DISABLE_UNSAFE=1) + add_definitions(-DIREE_FILE_IO_ENABLE=0) + add_definitions(-DIREE_USER_CONFIG_H="${SPRINGBOK_CONFIG_HEADER}") +endif() + +add_subdirectory($ENV{ROOTDIR}/toolchain/iree iree)
diff --git a/cmake/riscv_iree.cmake b/cmake/riscv_iree.cmake new file mode 100644 index 0000000..634ae51 --- /dev/null +++ b/cmake/riscv_iree.cmake
@@ -0,0 +1,65 @@ +cmake_minimum_required (VERSION 3.13) + +# CMake invokes the toolchain file twice during the first build, but only once +# during subsequent rebuilds. This was causing the various flags to be added +# twice on the first build, and on a rebuild ninja would see only one set of the +# flags and rebuild the world. +# https://github.com/android-ndk/ndk/issues/323 +if(RISCV_TOOLCHAIN_INCLUDED) + return() +endif(RISCV_TOOLCHAIN_INCLUDED) +set(RISCV_TOOLCHAIN_INCLUDED true) + +set(CMAKE_SYSTEM_PROCESSOR riscv) +set(CMAKE_CROSSCOMPILING ON CACHE BOOL "") + +if(CMAKE_HOST_SYSTEM_NAME STREQUAL Linux) + set(RISCV_HOST_TAG linux) +elseif(CMAKE_HOST_SYSTEM_NAME STREQUAL Darwin) + set(RISCV_HOST_TAG darwin) +endif() + +set(RISCV_TOOLCHAIN_NAME clang) + +set(RISCV_TOOLCHAIN_ROOT "$ENV{CACHE}/toolchain_iree" CACHE PATH "RISC-V compiler path") +set(CMAKE_FIND_ROOT_PATH ${RISCV_TOOLCHAIN_ROOT}) +list(APPEND CMAKE_PREFIX_PATH "${RISCV_TOOLCHAIN_ROOT}") + +set(CMAKE_C_COMPILER "${RISCV_TOOLCHAIN_ROOT}/bin/clang") +set(CMAKE_CXX_COMPILER "${RISCV_TOOLCHAIN_ROOT}/bin/clang++") +set(CMAKE_AR "${RISCV_TOOLCHAIN_ROOT}/bin/llvm-ar") +set(CMAKE_RANLIB "${RISCV_TOOLCHAIN_ROOT}/bin/llvm-ranlib") +set(CMAKE_STRIP "${RISCV_TOOLCHAIN_ROOT}/bin/llvm-strip") + +set(RISCV_COMPILER_FLAGS "" CACHE STRING "RISC-V compiler flags for C, CXX, and ASM") +set(RISCV_COMPILER_FLAGS_CXX) +set(RISCV_COMPILER_FLAGS_DEBUG) +set(RISCV_COMPILER_FLAGS_RELEASE) +set(RISCV_LINKER_FLAGS) +set(RISCV_LINKER_FLAGS_EXE) + +if(${BUILD_RV64_LINUX}) + set(CMAKE_SYSTEM_NAME Linux) + set(CMAKE_SYSTEM_LIBRARY_PATH "${RISCV_TOOLCHAIN_ROOT}/sysroot/usr/lib") + set(RISCV_COMPILER_FLAGS "${RISCV_COMPILER_FLAGS} -march=rv64gc -mabi=lp64d") + set(RISCV_LINKER_FLAGS "${RISCV_LINKER_FLAGS} -lstdc++ -lpthread -lm -ldl") +else() + set(CMAKE_SYSTEM_NAME Generic) + set(CMAKE_C_STANDARD 11) + set(CMAKE_C_EXTENSIONS OFF) # Force the usage of _ISOC11_SOURCE + set(CMAKE_SYSTEM_LIBRARY_PATH "${RISCV_TOOLCHAIN_ROOT}/riscv32-unknown-elf/lib") + set(RISCV_COMPILER_FLAGS "${RISCV_COMPILER_FLAGS} -menable-experimental-extensions -march=rv32imfv0p10 -mabi=ilp32") +endif() + +set(CMAKE_C_FLAGS "${RISCV_COMPILER_FLAGS} ${CMAKE_C_FLAGS}") +set(CMAKE_CXX_FLAGS "${RISCV_COMPILER_FLAGS} ${RISCV_COMPILER_FLAGS_CXX} ${CMAKE_CXX_FLAGS}") +set(CMAKE_ASM_FLAGS "${RISCV_COMPILER_FLAGS} ${CMAKE_ASM_FLAGS}") +set(CMAKE_C_FLAGS_DEBUG "${RISCV_COMPILER_FLAGS_DEBUG} ${CMAKE_C_FLAGS_DEBUG}") +set(CMAKE_CXX_FLAGS_DEBUG "${RISCV_COMPILER_FLAGS_DEBUG} ${CMAKE_CXX_FLAGS_DEBUG}") +set(CMAKE_ASM_FLAGS_DEBUG "${RISCV_COMPILER_FLAGS_DEBUG} ${CMAKE_ASM_FLAGS_DEBUG}") +set(CMAKE_C_FLAGS_RELEASE "${RISCV_COMPILER_FLAGS_RELEASE} ${CMAKE_C_FLAGS_RELEASE}") +set(CMAKE_CXX_FLAGS_RELEASE "${RISCV_COMPILER_FLAGS_RELEASE} ${CMAKE_CXX_FLAGS_RELEASE}") +set(CMAKE_ASM_FLAGS_RELEASE "${RISCV_COMPILER_FLAGS_RELEASE} ${CMAKE_ASM_FLAGS_RELEASE}") +set(CMAKE_SHARED_LINKER_FLAGS "${RISCV_LINKER_FLAGS} ${CMAKE_SHARED_LINKER_FLAGS}") +set(CMAKE_MODULE_LINKER_FLAGS "${RISCV_LINKER_FLAGS} ${CMAKE_MODULE_LINKER_FLAGS}") +set(CMAKE_EXE_LINKER_FLAGS "${RISCV_LINKER_FLAGS} ${RISCV_LINKER_FLAGS_EXE} ${CMAKE_EXE_LINKER_FLAGS}")
diff --git a/springbok_config.h b/springbok_config.h new file mode 100644 index 0000000..c2a3c8f --- /dev/null +++ b/springbok_config.h
@@ -0,0 +1,13 @@ +// Springbok-specific implementation for some IREE functions. + +#ifndef SPRINGBOK_CONFIG_H +#define SPRINGBOK_CONFIG_H + +// IREE_TIME_NOW_FN is required and used to fetch the current RTC time and to be +// used for wait handling. A thread-less system can just return 0. +#define IREE_TIME_NOW_FN \ + { \ + return 0; \ + } + +#endif // SPRINGBOK_CONFIG_H