ysyx-workbench/npc/CMakeLists.txt

84 lines
2.6 KiB
CMake
Raw Normal View History

2024-03-29 02:35:49 +00:00
cmake_minimum_required(VERSION 3.26)
2024-01-05 15:50:26 +00:00
2024-03-13 06:53:31 +00:00
project(flow)
2024-04-02 05:35:29 +00:00
set (CMAKE_CXX_STANDARD 17)
2024-01-05 15:50:26 +00:00
cmake_policy(SET CMP0144 NEW)
2024-03-29 02:35:49 +00:00
include(CMakeDependentOption)
include(CTest)
2024-03-29 02:35:49 +00:00
enable_testing()
list(APPEND CMAKE_MODULE_PATH ${PROJECT_SOURCE_DIR}/cmake)
2024-03-29 02:35:49 +00:00
# -- Build options
option(BUILD_USE_BLOOP "Whether to use bloop to speed up elaborate" ON)
2024-03-29 02:35:49 +00:00
option(BUILD_SIM_TARGET "Whether to build verilator simulation binary" ON)
cmake_dependent_option(BUILD_SIM_NVBOARD_TARGET "Whether to build nvboard target" OFF "BUILD_SIM_TARGET" OFF)
option(ENABLE_YSYX_GIT_TRACKER "Ysyx tracker support" OFF)
set(TOPMODULE "Flow" CACHE STRING "Topmodule name in chisel")
2024-04-05 03:30:52 +00:00
set(DIFFTEST_LIB "" CACHE STRING "Dynamic library file used as difftest reference")
2024-03-29 02:35:49 +00:00
# -- Ysyx tracker, configure
if(ENABLE_YSYX_GIT_TRACKER)
execute_process(
COMMAND ${CMAKE_SOURCE_DIR}/../git_commit.sh "configure(npc)"
WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}/..
)
endif()
2024-01-05 15:50:26 +00:00
2024-03-29 02:35:49 +00:00
# -- Check dependencies
if(BUILD_SIM_TARGET)
find_package(verilator REQUIRED)
endif()
if(BUILD_SIM_NVBOARD_TARGET)
find_package(SDL2 REQUIRED)
find_package(SDL2_image REQUIRED)
endif()
find_package(CLI11 CONFIG REQUIRED)
2024-04-09 09:03:21 +00:00
# TODO: Not required
find_package(LLVM CONFIG REQUIRED)
option(ENABLE_SDB "Enable simple debugger" ON)
2024-01-05 15:50:26 +00:00
find_library(NVBOARD_LIBRARY NAMES nvboard)
find_path(NVBOARD_INCLUDE_DIR NAMES nvboard.h)
# FIXME: all scala source file are tracked here, cause all files to rebuild
# after a source update.
2024-03-29 02:35:49 +00:00
set(SCALA_CORE "${CMAKE_CURRENT_SOURCE_DIR}/core")
set(CHISEL_MODULE_CLASS "${CMAKE_PROJECT_NAME}.${TOPMODULE}")
# Verilog files are generted in CHISEL_OUTPUT_TMP_DIR and copy to
2024-03-29 02:35:49 +00:00
# CHISEL_OUTPUT_DIR if content changes
set(CHISEL_OUTPUT_DIR ${CMAKE_CURRENT_BINARY_DIR}/${TOPMODULE}/vsrc)
set(CHISEL_OUTPUT_TMP_DIR ${CMAKE_CURRENT_BINARY_DIR}/${TOPMODULE}/vsrc_tmp)
2024-03-29 02:35:49 +00:00
set(CHISEL_OUTPUT_VERILATOR_CONF ${CHISEL_OUTPUT_DIR}/conf.vlt)
set(CHISEL_OUTPUT_TOPMODULE ${CHISEL_OUTPUT_DIR}/${TOPMODULE}.sv)
set(CHISEL_EMIT_ARGS "--target-dir ${CHISEL_OUTPUT_TMP_DIR}")
# -- Build NVBoard executable
if(BUILD_SIM_NVBOARD_TARGET)
add_subdirectory(csrc_nvboard)
2024-03-29 02:35:49 +00:00
endif()
# -- Build Verilator executable and add to test
2024-04-04 16:16:58 +00:00
include_directories(include)
2024-04-09 09:03:21 +00:00
add_subdirectory(utils)
2024-04-04 16:16:58 +00:00
add_subdirectory(csrc)
2024-01-10 12:20:45 +00:00
2024-03-29 02:35:49 +00:00
# -- Add build tracking
if(ENABLE_YSYX_GIT_TRACKER)
2024-01-10 12:20:45 +00:00
add_custom_command(
TARGET V${TOPMODULE}_nvboard PRE_BUILD
COMMAND ${CMAKE_SOURCE_DIR}/../git_commit.sh "build_${CMAKE_PROJECT_NAME}_V${TOPMODULE}_nvboard"
WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}/..
)
add_custom_command(
TARGET V${TOPMODULE} PRE_BUILD
COMMAND ${CMAKE_SOURCE_DIR}/../git_commit.sh "build_${CMAKE_PROJECT_NAME}_V${TOPMODULE}"
WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}/..
)
2024-03-29 02:35:49 +00:00
endif()