From 1e940323b038f1a708286489a7b2ddd1ed1735dc Mon Sep 17 00:00:00 2001 From: David Shah Date: Tue, 7 Jan 2020 13:34:58 +0000 Subject: nexus: Add main Signed-off-by: David Shah --- nexus/arch.cc | 2 +- nexus/arch.h | 5 +--- nexus/main.cc | 74 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 76 insertions(+), 5 deletions(-) create mode 100644 nexus/main.cc 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 struct RelPtr // reinterpret_cast(this); // } - const T *get() const - { - return reinterpret_cast(reinterpret_cast(this) + int64_t(offset) * 4); - } + const T *get() const { return reinterpret_cast(reinterpret_cast(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 + * + * 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 +#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 createContext(std::unordered_map &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(), "name of chip database binary"); + specific.add_options()("device", po::value(), "device name"); + + return specific; +} + +void NexusCommandHandler::customBitstream(Context *ctx) {} + +std::unique_ptr NexusCommandHandler::createContext(std::unordered_map &values) +{ + ArchArgs chipArgs; + chipArgs.chipdb = vm["chipdb"].as(); + chipArgs.device = vm["device"].as(); + return std::unique_ptr(new Context(chipArgs)); +} + +void NexusCommandHandler::customAfterLoad(Context *ctx) {} + +int main(int argc, char *argv[]) +{ + NexusCommandHandler handler(argc, argv); + return handler.exec(); +} + +#endif -- cgit v1.2.3