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 ${symbiflow-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 ${symbiflow-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 ${symbiflow-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()
