aboutsummaryrefslogtreecommitdiffstats
path: root/nexus
diff options
context:
space:
mode:
authorDavid Shah <dave@ds0.me>2020-01-07 13:34:58 +0000
committerDavid Shah <dave@ds0.me>2020-11-30 08:45:27 +0000
commit1e940323b038f1a708286489a7b2ddd1ed1735dc (patch)
tree25790fe26b492193279c4d526de053d17fbb6502 /nexus
parent259659c83898682cecd5e60db2bcfc1c09a493d4 (diff)
downloadnextpnr-1e940323b038f1a708286489a7b2ddd1ed1735dc.tar.gz
nextpnr-1e940323b038f1a708286489a7b2ddd1ed1735dc.tar.bz2
nextpnr-1e940323b038f1a708286489a7b2ddd1ed1735dc.zip
nexus: Add main
Signed-off-by: David Shah <dave@ds0.me>
Diffstat (limited to 'nexus')
-rw-r--r--nexus/arch.cc2
-rw-r--r--nexus/arch.h5
-rw-r--r--nexus/main.cc74
3 files changed, 76 insertions, 5 deletions
diff --git a/nexus/arch.cc b/nexus/arch.cc
index d9d30dba..4b924a86 100644
--- a/nexus/arch.cc
+++ b/nexus/arch.cc
@@ -90,7 +90,7 @@ Arch::Arch(ArchArgs args) : args(args)
// Check database version and family
if (db->version != bba_version) {
log_error("Provided database version %d is %s than nextpnr version %d, please rebuild database/nextpnr.\n",
- db->version, (db->version > bba_version) ? "newer" : "older", bba_version);
+ int(db->version), (db->version > bba_version) ? "newer" : "older", int(bba_version));
}
if (db->family.get() != family) {
log_error("Database is for family '%s' but provided device is family '%s'.\n", db->family.get(),
diff --git a/nexus/arch.h b/nexus/arch.h
index e65a17b8..48dc137b 100644
--- a/nexus/arch.h
+++ b/nexus/arch.h
@@ -37,10 +37,7 @@ template <typename T> struct RelPtr
// reinterpret_cast<const char*>(this);
// }
- const T *get() const
- {
- return reinterpret_cast<const T *>(reinterpret_cast<const char *>(this) + int64_t(offset) * 4);
- }
+ const T *get() const { return reinterpret_cast<const T *>(reinterpret_cast<const char *>(this) + offset); }
const T &operator[](size_t index) const { return get()[index]; }
diff --git a/nexus/main.cc b/nexus/main.cc
new file mode 100644
index 00000000..77f739a8
--- /dev/null
+++ b/nexus/main.cc
@@ -0,0 +1,74 @@
+/*
+ * nextpnr -- Next Generation Place and Route
+ *
+ * Copyright (C) 2020 David Shah <dave@ds0.me>
+ *
+ * Permission to use, copy, modify, and/or distribute this software for any
+ * purpose with or without fee is hereby granted, provided that the above
+ * copyright notice and this permission notice appear in all copies.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+ * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+ * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+ * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+ * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+ * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
+ * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+ *
+ */
+
+#ifdef MAIN_EXECUTABLE
+
+#include <fstream>
+#include "command.h"
+#include "design_utils.h"
+#include "jsonwrite.h"
+#include "log.h"
+#include "timing.h"
+
+USING_NEXTPNR_NAMESPACE
+
+class NexusCommandHandler : public CommandHandler
+{
+ public:
+ NexusCommandHandler(int argc, char **argv);
+ virtual ~NexusCommandHandler(){};
+ std::unique_ptr<Context> createContext(std::unordered_map<std::string, Property> &values) override;
+ void setupArchContext(Context *ctx) override{};
+ void customBitstream(Context *ctx) override;
+ void customAfterLoad(Context *ctx) override;
+
+ protected:
+ po::options_description getArchOptions() override;
+};
+
+NexusCommandHandler::NexusCommandHandler(int argc, char **argv) : CommandHandler(argc, argv) {}
+
+po::options_description NexusCommandHandler::getArchOptions()
+{
+ po::options_description specific("Architecture specific options");
+ specific.add_options()("chipdb", po::value<std::string>(), "name of chip database binary");
+ specific.add_options()("device", po::value<std::string>(), "device name");
+
+ return specific;
+}
+
+void NexusCommandHandler::customBitstream(Context *ctx) {}
+
+std::unique_ptr<Context> NexusCommandHandler::createContext(std::unordered_map<std::string, Property> &values)
+{
+ ArchArgs chipArgs;
+ chipArgs.chipdb = vm["chipdb"].as<std::string>();
+ chipArgs.device = vm["device"].as<std::string>();
+ return std::unique_ptr<Context>(new Context(chipArgs));
+}
+
+void NexusCommandHandler::customAfterLoad(Context *ctx) {}
+
+int main(int argc, char *argv[])
+{
+ NexusCommandHandler handler(argc, argv);
+ return handler.exec();
+}
+
+#endif