function(ADD_QUICKLOGIC_BOARD)

  set(options)
  set(oneValueArgs BOARD DEVICE PACKAGE FABRIC_PACKAGE PINMAP_XML PINMAP BIT_TO_V_EXTRA_ARGS)
  set(multiValueArgs)
  cmake_parse_arguments(
     ADD_QUICKLOGIC_BOARD
     "${options}"
     "${oneValueArgs}"
     "${multiValueArgs}"
     ${ARGN}
    )

  get_target_property_required(PYTHON3 env PYTHON3)

  # Define the board
  define_board(
    BOARD ${ADD_QUICKLOGIC_BOARD_BOARD}
    DEVICE ${ADD_QUICKLOGIC_BOARD_DEVICE}
    PACKAGE ${ADD_QUICKLOGIC_BOARD_PACKAGE}
    PINMAP ${ADD_QUICKLOGIC_BOARD_PINMAP}
    PINMAP_XML ${ADD_QUICKLOGIC_BOARD_PINMAP_XML}
    )

  set(DEVICE ${ADD_QUICKLOGIC_BOARD_DEVICE})
  get_target_property_required(ARCH ${DEVICE} ARCH)
  get_target_property_required(DEVICE_TYPE ${DEVICE} DEVICE_TYPE)
  get_target_property_required(FAMILY ${ARCH} FAMILY)
  set(PACKAGE ${ADD_QUICKLOGIC_BOARD_PACKAGE})
  set(BOARD ${ADD_QUICKLOGIC_BOARD_BOARD})
  set(PINMAP ${ADD_QUICKLOGIC_BOARD_PINMAP})
  set(PINMAP_XML ${ADD_QUICKLOGIC_BOARD_PINMAP_XML})
  set(BIT_TO_V_EXTRA_ARGS ${ADD_QUICKLOGIC_BOARD_BIT_TO_V_EXTRA_ARGS})

  # Get the database location. If given then use the database to generate
  # pinmap and clkmap CSV files
  get_target_property(VPR_DB_FILE ${DEVICE_TYPE} VPR_DB_FILE)
  if(NOT "${VPR_DB_FILE}" STREQUAL "VPR_DB_FILE-NOTFOUND")

    # Get the database location
    get_target_property_required(VPR_DB_FILE ${DEVICE_TYPE} VPR_DB_FILE)
    get_file_location(VPR_DB_FILE_LOC ${VPR_DB_FILE})
    get_file_target(VPR_DB_TARGET ${VPR_DB_FILE})

    # Generate clock pad map CSV file
    set(CREATE_CLKMAP_CSV ${f4pga-arch-defs_SOURCE_DIR}/quicklogic/${FAMILY}/utils/create_clkmap_csv.py)
    set(CLKMAP_CSV ${BOARD}_clkmap.csv)
    set(CLKMAP_CSV_DEPS ${PYTHON3} ${CREATE_CLKMAP_CSV})
    append_file_dependency(CLKMAP_CSV_DEPS ${VPR_DB_FILE})

    add_custom_command(
      OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/${CLKMAP_CSV}
      COMMAND ${PYTHON3} ${CREATE_CLKMAP_CSV}
        -o ${CMAKE_CURRENT_BINARY_DIR}/${CLKMAP_CSV}
        --db ${VPR_DB_FILE_LOC}
      DEPENDS ${CLKMAP_CSV_DEPS}
    )

    add_file_target(FILE ${CLKMAP_CSV} GENERATED)

    # Generate pinmap CSV file
    set(CREATE_PINMAP_CSV ${f4pga-arch-defs_SOURCE_DIR}/quicklogic/${FAMILY}/utils/create_pinmap_csv.py)
    set(PINMAP_CSV ${BOARD}_pinmap.csv)
    set(PINMAP_CSV_DEPS ${PYTHON3} ${CREATE_PINMAP_CSV})
    append_file_dependency(PINMAP_CSV_DEPS ${VPR_DB_FILE})

    # Make the pinmap depend on clkmap. This way it is build without the need for
    # adding the dependency elsewhere.
    append_file_dependency(PINMAP_CSV_DEPS ${CLKMAP_CSV})

    # TODO: Use the PACKAGE in the pinmap CSV generation.
    add_custom_command(
      OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/${PINMAP_CSV}
      COMMAND ${PYTHON3} ${CREATE_PINMAP_CSV}
        -o ${CMAKE_CURRENT_BINARY_DIR}/${PINMAP_CSV}
        --package ${ADD_QUICKLOGIC_BOARD_FABRIC_PACKAGE}
        --db ${VPR_DB_FILE_LOC}
      DEPENDS ${PINMAP_CSV_DEPS}
    )

    add_file_target(FILE ${PINMAP_CSV} GENERATED)

    # Setup extra args for bit to v
    set(BIT_TO_V_EXTRA_ARGS_FOR_BOARD ${BIT_TO_V_EXTRA_ARGS})
    string(REPLACE "ql-" "" DEVICE_FOR_BIT_TO_V "${DEVICE}")
    string(APPEND BIT_TO_V_EXTRA_ARGS_FOR_BOARD " --device-name ${DEVICE_FOR_BIT_TO_V}")
    string(APPEND BIT_TO_V_EXTRA_ARGS_FOR_BOARD " --package-name ${ADD_QUICKLOGIC_BOARD_FABRIC_PACKAGE}")

    # Set the board properties
    set_target_properties(
      ${BOARD}
      PROPERTIES
        PINMAP
        ${CMAKE_CURRENT_SOURCE_DIR}/${PINMAP_CSV}
        CLKMAP
        ${CMAKE_CURRENT_SOURCE_DIR}/${CLKMAP_CSV}
        BIT_TO_V_EXTRA_ARGS
        "${BIT_TO_V_EXTRA_ARGS_FOR_BOARD}"
    )

    set_target_properties(
      dummy_${ARCH}_${DEVICE}_${PACKAGE}
      PROPERTIES
      PINMAP ${CMAKE_CURRENT_SOURCE_DIR}/${PINMAP_CSV}
      CLKMAP ${CMAKE_CURRENT_SOURCE_DIR}/${CLKMAP_CSV}
    )

    define_ql_pinmap_csv_install_target(
      PART ${PART}
      BOARD ${BOARD}
      DEVICE_TYPE ${DEVICE_TYPE}
      DEVICE ${DEVICE}
      PACKAGE ${PACKAGE}
    )

  # For AP3 architecture generate pinmap and clkmap CSV files using the techfile
  # and VPR grid map which is generated along rr graph patching
  elseif("${ARCH}" STREQUAL "ql-ap3")

    # Get techfile location
    get_target_property_required(TECHFILE ${DEVICE_TYPE} TECHFILE)

    # Get the rr graph target and location
    get_target_property_required(RR_GRAPH_FILE ${DEVICE} ${PACKAGE}_OUT_RRBIN_REAL)
    get_file_target(RR_GRAPH_TARGET ${RR_GRAPH_FILE})
    get_file_location(RR_GRAPH_LOCATION ${RR_GRAPH_FILE})

    # Format VPR grid map file name
    get_filename_component(DEVICES_DIR ${RR_GRAPH_LOCATION} DIRECTORY)
    set(VPR_GRID_MAP_LOCATION ${DEVICES_DIR}/vpr_grid_map_${DEVICE}_${PACKAGE}.csv)

    # Generate clock pad map CSV file
    set(CLKMAP_CSV_LOCATION ${DEVICES_DIR}/clkmap_${DEVICE}_${PACKAGE}.csv)
    set(CLKMAP_CSV ${BOARD}_clkmap.csv)
    add_custom_command(
      OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/${CLKMAP_CSV}
      COMMAND
        ${CMAKE_COMMAND} -E copy
            ${CLKMAP_CSV_LOCATION}
            ${CMAKE_CURRENT_BINARY_DIR}/${CLKMAP_CSV}
      DEPENDS ${RR_GRAPH_TARGET}
    )

    add_file_target(FILE ${CLKMAP_CSV} GENERATED)

    # Generate pinmap CSV file
    set(CREATE_PINMAP_CSV ${f4pga-arch-defs_SOURCE_DIR}/quicklogic/${FAMILY}/utils/ap3_create_pinmap_csv.py)
    set(PINMAP_CSV ${BOARD}_pinmap.csv)
    set(PINMAP_CSV_DEPS ${PYTHON3} ${PYTHON3_TARGET} ${CREATE_PINMAP_CSV} ${TECHFILE})
    append_file_dependency(PINMAP_CSV_DEPS ${RR_GRAPH_FILE})

    # Make the pinmap depend on clkmap. This way it is build without the need for
    # adding the dependency elsewhere.
    append_file_dependency(PINMAP_CSV_DEPS ${CLKMAP_CSV})

    # TODO: Use the PACKAGE in the pinmap CSV generation.
    add_custom_command(
      OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/${PINMAP_CSV}
      COMMAND ${PYTHON3} ${CREATE_PINMAP_CSV}
        -o ${CMAKE_CURRENT_BINARY_DIR}/${PINMAP_CSV}
        --package ${ADD_QUICKLOGIC_BOARD_FABRIC_PACKAGE}
        --techfile ${TECHFILE}
        --vpr-grid-map ${VPR_GRID_MAP_LOCATION}
      DEPENDS ${PINMAP_CSV_DEPS}
    )

    add_file_target(FILE ${PINMAP_CSV} GENERATED)

    # Set the board properties
    set_target_properties(
      ${BOARD}
      PROPERTIES
        PINMAP
        ${CMAKE_CURRENT_SOURCE_DIR}/${PINMAP_CSV}
        CLKMAP
        ${CMAKE_CURRENT_SOURCE_DIR}/${CLKMAP_CSV}
    )

    set_target_properties(
      dummy_${ARCH}_${DEVICE}_${PACKAGE}
      PROPERTIES
      PINMAP ${CMAKE_CURRENT_SOURCE_DIR}/${PINMAP_CSV}
      CLKMAP ${CMAKE_CURRENT_SOURCE_DIR}/${CLKMAP_CSV}
    )

    # Install board files
    define_ql_pinmap_csv_install_target(
      PART ${PART}
      BOARD ${BOARD}
      DEVICE_TYPE ${DEVICE_TYPE}
      DEVICE ${DEVICE}
      PACKAGE ${PACKAGE}
    )

  elseif("${ARCH}" STREQUAL "qlf_k4n8")
    set(PINMAP_CSV ${PINMAP})

    # Copy the pinmap XML
    get_file_target(PINMAP_XML_TARGET ${PINMAP_XML})

    if(NOT TARGET ${PINMAP_XML_TARGET})
      add_custom_command(
        OUTPUT
          ${CMAKE_CURRENT_BINARY_DIR}/${PINMAP_XML}
        COMMAND
          ${CMAKE_COMMAND} -E copy
            ${CMAKE_CURRENT_SOURCE_DIR}/devices/umc22/${PINMAP_XML}
            ${CMAKE_CURRENT_BINARY_DIR}/${PINMAP_XML}
      )
      add_file_target(FILE ${PINMAP_XML} GENERATED)
    endif()

    # Make the pinmap CSV depend on pinmap XML. This way the file will be
    # created  without the need for adding the dependency elsewhere.
    set(PINMAP_CSV_DEPS)
    append_file_dependency(PINMAP_CSV_DEPS ${PINMAP_XML})

    get_file_target(PINMAP_CSV_TARGET ${PINMAP_CSV})

    if(NOT TARGET ${PINMAP_CSV_TARGET})
      # Copy the pinmap CSV
      add_custom_command(
        OUTPUT
          ${CMAKE_CURRENT_BINARY_DIR}/${PINMAP_CSV}
        COMMAND
          ${CMAKE_COMMAND} -E copy
            ${CMAKE_CURRENT_SOURCE_DIR}/devices/umc22/${PINMAP_CSV}
            ${CMAKE_CURRENT_BINARY_DIR}/${PINMAP_CSV}
        DEPENDS
          ${PINMAP_CSV_DEPS}
      )
      add_file_target(FILE ${PINMAP_CSV} GENERATED)
    endif()


    # Set the board properties
    set_target_properties(
      ${BOARD}
      PROPERTIES
        PINMAP
          ${CMAKE_CURRENT_SOURCE_DIR}/${PINMAP_CSV}
        PINMAP_XML
          ${CMAKE_CURRENT_SOURCE_DIR}/${PINMAP_XML}
    )

    # Install board files
    define_ql_pinmap_csv_install_target(
      PART ${PART}
      BOARD ${BOARD}
      DEVICE_TYPE ${DEVICE_TYPE}
      DEVICE ${DEVICE}
      PACKAGE ${PACKAGE}
    )
  endif()

endfunction()
