| 1 |
2 |
jamieiles |
include_directories(${VERILATOR_INCLUDE_DIRS})
|
| 2 |
|
|
|
| 3 |
|
|
set(VERILATED_HEADERS)
|
| 4 |
|
|
|
| 5 |
|
|
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Os -ggdb3 -std=c++14")
|
| 6 |
|
|
|
| 7 |
|
|
if(CMAKE_BUILD_TYPE STREQUAL "Coverage")
|
| 8 |
|
|
set(VERILATOR_COVERAGE_FLAGS --coverage-line -Wno-style)
|
| 9 |
|
|
set(CMAKE_CXX_FLAGS_COVERAGE "${CMAKE_CXX_FLAGS_COVERAGE} -DVM_COVERAGE=1")
|
| 10 |
|
|
endif()
|
| 11 |
|
|
|
| 12 |
|
|
if(CMAKE_BUILD_TYPE STREQUAL "Debug")
|
| 13 |
|
|
set(VERILATOR_TRACE_FLAGS --trace --trace-underscore)
|
| 14 |
|
|
endif()
|
| 15 |
|
|
|
| 16 |
|
|
function(verilate)
|
| 17 |
|
|
set(options "")
|
| 18 |
|
|
set(oneValueArgs TOPLEVEL)
|
| 19 |
|
|
set(multiValueArgs VERILOG_SOURCES GENERATED_SOURCES DEPENDS)
|
| 20 |
|
|
cmake_parse_arguments(verilate "${options}" "${oneValueArgs}" "${multiValueArgs}" ${ARGN})
|
| 21 |
|
|
set(generated
|
| 22 |
|
|
${CMAKE_CURRENT_BINARY_DIR}/V${verilate_TOPLEVEL}.cpp
|
| 23 |
|
|
${CMAKE_CURRENT_BINARY_DIR}/V${verilate_TOPLEVEL}.h
|
| 24 |
|
|
${CMAKE_CURRENT_BINARY_DIR}/V${verilate_TOPLEVEL}__Syms.cpp
|
| 25 |
|
|
${CMAKE_CURRENT_BINARY_DIR}/V${verilate_TOPLEVEL}__Syms.h)
|
| 26 |
|
|
list(APPEND generated ${verilate_GENERATED_SOURCES})
|
| 27 |
|
|
if(CMAKE_BUILD_TYPE STREQUAL "Debug")
|
| 28 |
|
|
list(APPEND generated
|
| 29 |
|
|
${CMAKE_CURRENT_BINARY_DIR}/V${verilate_TOPLEVEL}__Trace.cpp
|
| 30 |
|
|
${CMAKE_CURRENT_BINARY_DIR}/V${verilate_TOPLEVEL}__Trace__Slow.cpp)
|
| 31 |
|
|
endif()
|
| 32 |
|
|
foreach(source ${verilate_VERILOG_SOURCES})
|
| 33 |
|
|
get_source_file_property(res ${source} COMPILE_FLAGS)
|
| 34 |
|
|
if(NOT res STREQUAL "NOTFOUND")
|
| 35 |
|
|
list(APPEND extra_compile_flags ${res})
|
| 36 |
|
|
endif()
|
| 37 |
|
|
endforeach(source)
|
| 38 |
|
|
set(VERILATED_HEADERS "${VERILATED_HEADERS} ${CMAKE_CURRENT_BINARY_DIR}/V${verilate_TOPLEVEL}.h" )
|
| 39 |
|
|
set(VERILATOR_INCLUDE_ARGS "")
|
| 40 |
|
|
get_property(incdirs DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} PROPERTY INCLUDE_DIRECTORIES)
|
| 41 |
|
|
foreach(incdir ${incdirs})
|
| 42 |
|
|
set(VERILATOR_INCLUDE_ARGS "${VERILATOR_INCLUDE_ARGS} -I${incdir}")
|
| 43 |
|
|
endforeach(incdir)
|
| 44 |
|
|
separate_arguments(VERILATOR_INCLUDE_ARGS)
|
| 45 |
|
|
set_source_files_properties(${generated} PROPERTIES COMPILE_FLAGS -Wno-unused-parameter)
|
| 46 |
|
|
add_custom_command(OUTPUT ${generated}
|
| 47 |
|
|
COMMAND rm -f ${generated}
|
| 48 |
|
|
COMMAND verilator -sv -O3 ${verilate_VERILOG_SOURCES}
|
| 49 |
|
|
-Wall -Wwarn-lint -Wwarn-style --assert
|
| 50 |
|
|
-I${CMAKE_CURRENT_SOURCE_DIR}
|
| 51 |
|
|
-I${CMAKE_CURRENT_BINARY_DIR}
|
| 52 |
|
|
${VERILATOR_TRACE_FLAGS} ${VERILATOR_COVERAGE_FLAGS}
|
| 53 |
|
|
${extra_compile_flags} --cc --top-module ${verilate_TOPLEVEL}
|
| 54 |
|
|
--Mdir ${CMAKE_CURRENT_BINARY_DIR}
|
| 55 |
|
|
${VERILATOR_INCLUDE_ARGS}
|
| 56 |
|
|
WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}
|
| 57 |
|
|
DEPENDS ${verilate_VERILOG_SOURCES} ${verilate_DEPENDS})
|
| 58 |
|
|
add_library(V${verilate_TOPLEVEL} SHARED ${generated})
|
| 59 |
|
|
include_directories(${CMAKE_CURRENT_BINARY_DIR})
|
| 60 |
|
|
include_directories(${CMAKE_CURRENT_SOURCE_DIR})
|
| 61 |
|
|
endfunction()
|