# -- Add an always run target to generate verilog files with sbt/bloop, as we # don't know if the result files will be different from cmake NOTE: Must # reconfigure if we add new files in SCALA_CORE directory file(GLOB_RECURSE SCALA_CORE_SOURCES "${SCALA_CORE}/src/main/scala/*.scala") file(GLOB_RECURSE SCALA_CORE_RESOURCES "${SCALA_CORE}/src/main/resources/*") message(STATUS "Found scala source file: ${SCALA_CORE_SOURCES}") set(CHISEL_DEPENDENCY ${SCALA_CORE_SOURCES} ${SCALA_CORE_RESOURCES} ${SCALA_CORE}/build.sbt) if(BUILD_USE_BLOOP) message(STATUS "Building core using bloop") set(CHISEL_TARGET bloop_${TOPMODULE}) set(CHISEL_TEST_TARGET bloop_${TOPMODULE}_test) # Export sbt build config to bloop if(NOT EXISTS ${SCALA_CORE}/.bloop) execute_process(COMMAND sbt bloopInstall WORKING_DIRECTORY ${SCALA_CORE}) endif() string(REPLACE " " ";" CHISEL_EMIT_ARGS_LIST ${CHISEL_EMIT_ARGS}) list(TRANSFORM CHISEL_EMIT_ARGS_LIST PREPEND "--args;") add_custom_command( OUTPUT ${CHISEL_OUTPUT_TOPMODULE} ${CHISEL_OUTPUT_VERILATOR_CONF} COMMAND bloop run --no-color root ${CHISEL_EMIT_ARGS_LIST} WORKING_DIRECTORY ${SCALA_CORE} DEPENDS ${CHISEL_DEPENDENCY} COMMAND_EXPAND_LISTS COMMENT "Run bloop from CMake") # add_test( NAME bloop_${TOPMODULE}_test COMMAND bloop test WORKING_DIRECTORY # ${SCALA_CORE} ) else() message(STATUS "Building core using sbt") set(CHISEL_TARGET sbt_${TOPMODULE}) set(CHISEL_TEST_TARGET sbt_${TOPMODULE}_test) add_custom_command( OUTPUT ${CHISEL_OUTPUT_TOPMODULE} ${CHISEL_OUTPUT_VERILATOR_CONF} COMMAND sbt "run ${CHISEL_EMIT_ARGS}" WORKING_DIRECTORY ${SCALA_CORE} DEPENDS ${CHISEL_DEPENDENCY} VERBATIM COMMENT "Run sbt from CMake") add_test( NAME sbt_${TOPMODULE}_test COMMAND sbt test WORKING_DIRECTORY ${SCALA_CORE}) endif() if(NOT EXISTS ${CHISEL_OUTPUT_TOPMODULE}) # Probably cold build, generate verilog at configure time to produce top # module file execute_process(COMMAND sbt "run ${CHISEL_EMIT_ARGS}" WORKING_DIRECTORY ${SCALA_CORE}) endif()