| # This CMake include defines the following functions: | |
| # | |
| # * ADD_SV2V_TARGET - Converts SystemVerilog sources to Verilog using sv2v | |
| function(ADD_SV2V_TARGET) | |
| # ~~~ | |
| # ADD_SV2V_TARGET( | |
| # NAME <name> | |
| # SOURCES <source list> | |
| # FLAGS <flags> | |
| # | |
| # ADD_SV2V_TARGET is used for converting SystemVerilog SOURCES to Verilog. | |
| # FLAGS is a string with the flags that are passed to the sv2v during the conversion. | |
| # | |
| # Targets generated: | |
| # * <name>_sv2v - Output sv2v file in a Verilog format. | |
| # | |
| # Output files: | |
| # | |
| # * <name>_sv2v.v - Output Verilog file | |
| # * <name>_sv2v.v.log - Log file with errors and warnings during the sv2v conversion | |
| # | |
| # Outputs for this target will be located in the ${CMAKE_CURRENT_BINARY_DIR} | |
| # ~~~ | |
| set(oneValueArgs NAME) | |
| set(multiValueArgs SOURCES FLAGS) | |
| cmake_parse_arguments( | |
| ADD_SV2V_TARGET | |
| "${options}" | |
| "${oneValueArgs}" | |
| "${multiValueArgs}" | |
| "${ARGN}" | |
| ) | |
| # Create a dependency list | |
| set(SOURCES_DEPS "") | |
| foreach(SRC ${ADD_SV2V_TARGET_SOURCES}) | |
| append_file_dependency(SOURCES_DEPS ${SRC}) | |
| endforeach() | |
| # sv2v conversion | |
| set(NAME ${ADD_SV2V_TARGET_NAME}) | |
| set(SOURCES ${ADD_SV2V_TARGET_SOURCES}) | |
| set(FLAGS ${ADD_SV2V_TARGET_FLAGS}) | |
| set(OUT_FILE ${CMAKE_CURRENT_BINARY_DIR}/${NAME}_sv2v.v) | |
| add_custom_command( | |
| OUTPUT ${OUT_FILE} | |
| DEPENDS ${SOURCES_DEPS} | |
| COMMAND | |
| ${CMAKE_COMMAND} -E env | |
| zachjs-sv2v ${FLAGS} ${SOURCES} > ${OUT_FILE} 2> ${OUT_FILE}.log | |
| WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR} | |
| VERBATIM | |
| ) | |
| add_custom_target(${NAME}_sv2v DEPENDS ${OUT_FILE}) | |
| add_file_target(FILE ${NAME}_sv2v.v GENERATED) | |
| endfunction() |