From 89e0cc8078ecbb57ca450cc6c8a40f6b634b8c9c Mon Sep 17 00:00:00 2001 From: whitequark Date: Thu, 25 Jun 2020 15:11:47 +0000 Subject: Simplify and improve chipdb embedding/loading. --- gui/ecp5/mainwindow.cc | 56 ++++++++++++++++++------------------------- gui/ice40/family.cmake | 3 --- gui/ice40/mainwindow.cc | 63 +++++++++++++++---------------------------------- 3 files changed, 42 insertions(+), 80 deletions(-) (limited to 'gui') diff --git a/gui/ecp5/mainwindow.cc b/gui/ecp5/mainwindow.cc index 880af047..5ae1e50f 100644 --- a/gui/ecp5/mainwindow.cc +++ b/gui/ecp5/mainwindow.cc @@ -76,48 +76,38 @@ void MainWindow::createMenu() menuDesign->addAction(actionSaveConfig); } -static const ChipInfoPOD *get_chip_info(const RelPtr *ptr) { return ptr->get(); } - -static QStringList getSupportedPackages(ArchArgs::ArchArgsTypes chip) -{ - QStringList packages; - const ChipInfoPOD *chip_info; - if (chip == ArchArgs::LFE5U_25F || chip == ArchArgs::LFE5UM_25F || chip == ArchArgs::LFE5UM5G_25F) { - chip_info = get_chip_info(reinterpret_cast *>(chipdb_blob_25k)); - } else if (chip == ArchArgs::LFE5U_45F || chip == ArchArgs::LFE5UM_45F || chip == ArchArgs::LFE5UM5G_45F) { - chip_info = get_chip_info(reinterpret_cast *>(chipdb_blob_45k)); - } else if (chip == ArchArgs::LFE5U_85F || chip == ArchArgs::LFE5UM_85F || chip == ArchArgs::LFE5UM5G_85F) { - chip_info = get_chip_info(reinterpret_cast *>(chipdb_blob_85k)); - } else { - log_error("Unsupported ECP5 chip type.\n"); - } - - for (int i = 0; i < chip_info->num_packages; i++) { - packages << chip_info->package_info[i].name.get(); - } - return packages; -} - void MainWindow::new_proj() { QMap arch; - arch.insert("Lattice ECP5 LFE5U-25F", ArchArgs::LFE5U_25F); - arch.insert("Lattice ECP5 LFE5U-45F", ArchArgs::LFE5U_45F); - arch.insert("Lattice ECP5 LFE5U-85F", ArchArgs::LFE5U_85F); - arch.insert("Lattice ECP5 LFE5UM-25F", ArchArgs::LFE5UM_25F); - arch.insert("Lattice ECP5 LFE5UM-45F", ArchArgs::LFE5UM_45F); - arch.insert("Lattice ECP5 LFE5UM-85F", ArchArgs::LFE5UM_85F); - arch.insert("Lattice ECP5 LFE5UM5G-25F", ArchArgs::LFE5UM5G_25F); - arch.insert("Lattice ECP5 LFE5UM5G-45F", ArchArgs::LFE5UM5G_45F); - arch.insert("Lattice ECP5 LFE5UM5G-85F", ArchArgs::LFE5UM5G_85F); + if (Arch::isAvailable(ArchArgs::LFE5U_25F)) + arch.insert("Lattice ECP5 LFE5U-25F", ArchArgs::LFE5U_25F); + if (Arch::isAvailable(ArchArgs::LFE5U_45F)) + arch.insert("Lattice ECP5 LFE5U-45F", ArchArgs::LFE5U_45F); + if (Arch::isAvailable(ArchArgs::LFE5U_85F)) + arch.insert("Lattice ECP5 LFE5U-85F", ArchArgs::LFE5U_85F); + if (Arch::isAvailable(ArchArgs::LFE5UM_25F)) + arch.insert("Lattice ECP5 LFE5UM-25F", ArchArgs::LFE5UM_25F); + if (Arch::isAvailable(ArchArgs::LFE5UM_45F)) + arch.insert("Lattice ECP5 LFE5UM-45F", ArchArgs::LFE5UM_45F); + if (Arch::isAvailable(ArchArgs::LFE5UM_85F)) + arch.insert("Lattice ECP5 LFE5UM-85F", ArchArgs::LFE5UM_85F); + if (Arch::isAvailable(ArchArgs::LFE5UM5G_25F)) + arch.insert("Lattice ECP5 LFE5UM5G-25F", ArchArgs::LFE5UM5G_25F); + if (Arch::isAvailable(ArchArgs::LFE5UM5G_45F)) + arch.insert("Lattice ECP5 LFE5UM5G-45F", ArchArgs::LFE5UM5G_45F); + if (Arch::isAvailable(ArchArgs::LFE5UM5G_85F)) + arch.insert("Lattice ECP5 LFE5UM5G-85F", ArchArgs::LFE5UM5G_85F); + bool ok; QString item = QInputDialog::getItem(this, "Select new context", "Chip:", arch.keys(), 0, false, &ok); if (ok && !item.isEmpty()) { ArchArgs chipArgs; chipArgs.type = (ArchArgs::ArchArgsTypes)arch.value(item); - QString package = QInputDialog::getItem(this, "Select package", "Package:", getSupportedPackages(chipArgs.type), - 0, false, &ok); + QStringList packages; + for (auto package : Arch::getSupportedPackages(chipArgs.type)) + packages.append(QLatin1String(package.data(), package.size())); + QString package = QInputDialog::getItem(this, "Select package", "Package:", packages, 0, false, &ok); if (ok && !item.isEmpty()) { currentProj = ""; diff --git a/gui/ice40/family.cmake b/gui/ice40/family.cmake index ede5b805..e69de29b 100644 --- a/gui/ice40/family.cmake +++ b/gui/ice40/family.cmake @@ -1,3 +0,0 @@ -if(ICE40_HX1K_ONLY) - target_compile_definitions(gui_${family} PRIVATE ICE40_HX1K_ONLY=1) -endif() diff --git a/gui/ice40/mainwindow.cc b/gui/ice40/mainwindow.cc index dc8a3a23..3dcf90ae 100644 --- a/gui/ice40/mainwindow.cc +++ b/gui/ice40/mainwindow.cc @@ -74,59 +74,34 @@ void MainWindow::createMenu() menuDesign->addAction(actionSaveAsc); } -static const ChipInfoPOD *get_chip_info(const RelPtr *ptr) { return ptr->get(); } - -static QStringList getSupportedPackages(ArchArgs::ArchArgsTypes chip) -{ - QStringList packages; - const ChipInfoPOD *chip_info; -#ifdef ICE40_HX1K_ONLY - if (chip == ArchArgs::HX1K) { - chip_info = get_chip_info(reinterpret_cast *>(chipdb_blob_1k)); - } else { - log_error("Unsupported iCE40 chip type.\n"); - } -#else - if (chip == ArchArgs::LP384) { - chip_info = get_chip_info(reinterpret_cast *>(chipdb_blob_384)); - } else if (chip == ArchArgs::LP1K || chip == ArchArgs::HX1K) { - chip_info = get_chip_info(reinterpret_cast *>(chipdb_blob_1k)); - } else if (chip == ArchArgs::UP5K) { - chip_info = get_chip_info(reinterpret_cast *>(chipdb_blob_5k)); - } else if (chip == ArchArgs::LP8K || chip == ArchArgs::HX8K) { - chip_info = get_chip_info(reinterpret_cast *>(chipdb_blob_8k)); - } else { - log_error("Unsupported iCE40 chip type.\n"); - } -#endif - - for (int i = 0; i < chip_info->num_packages; i++) { - packages << chip_info->packages_data[i].name.get(); - } - return packages; -} - void MainWindow::new_proj() { QMap arch; -#ifdef ICE40_HX1K_ONLY - arch.insert("Lattice HX1K", ArchArgs::HX1K); -#else - arch.insert("Lattice LP384", ArchArgs::LP384); - arch.insert("Lattice LP1K", ArchArgs::LP1K); - arch.insert("Lattice HX1K", ArchArgs::HX1K); - arch.insert("Lattice UP5K", ArchArgs::UP5K); - arch.insert("Lattice LP8K", ArchArgs::LP8K); - arch.insert("Lattice HX8K", ArchArgs::HX8K); -#endif + if (Arch::isAvailable(ArchArgs::LP384)) + arch.insert("Lattice LP384", ArchArgs::LP384); + if (Arch::isAvailable(ArchArgs::LP1K)) + arch.insert("Lattice LP1K", ArchArgs::LP1K); + if (Arch::isAvailable(ArchArgs::HX1K)) + arch.insert("Lattice HX1K", ArchArgs::HX1K); + if (Arch::isAvailable(ArchArgs::U4K)) + arch.insert("Lattice U4K", ArchArgs::U4K); + if (Arch::isAvailable(ArchArgs::UP5K)) + arch.insert("Lattice UP5K", ArchArgs::UP5K); + if (Arch::isAvailable(ArchArgs::LP8K)) + arch.insert("Lattice LP8K", ArchArgs::LP8K); + if (Arch::isAvailable(ArchArgs::HX8K)) + arch.insert("Lattice HX8K", ArchArgs::HX8K); + bool ok; QString item = QInputDialog::getItem(this, "Select new context", "Chip:", arch.keys(), 0, false, &ok); if (ok && !item.isEmpty()) { ArchArgs chipArgs; chipArgs.type = (ArchArgs::ArchArgsTypes)arch.value(item); - QString package = QInputDialog::getItem(this, "Select package", "Package:", getSupportedPackages(chipArgs.type), - 0, false, &ok); + QStringList packages; + for (auto package : Arch::getSupportedPackages(chipArgs.type)) + packages.append(QLatin1String(package.data(), package.size())); + QString package = QInputDialog::getItem(this, "Select package", "Package:", packages, 0, false, &ok); if (ok && !item.isEmpty()) { currentProj = ""; -- cgit v1.2.3