diff options
author | David Shah <dave@ds0.me> | 2020-05-24 14:23:35 +0100 |
---|---|---|
committer | GitHub <noreply@github.com> | 2020-05-24 14:23:35 +0100 |
commit | f44498a5301f9f516488fb748c684926be514346 (patch) | |
tree | d37948e9ad90850c2d90566cebc5dc6d4ac07fb9 /common/nextpnr.h | |
parent | 2d406f3e275beda8b70b4c7d4d5e43433dd3c43c (diff) | |
parent | e7bb04769d5d7262d3ecfd0de49953078174a880 (diff) | |
download | nextpnr-f44498a5301f9f516488fb748c684926be514346.tar.gz nextpnr-f44498a5301f9f516488fb748c684926be514346.tar.bz2 nextpnr-f44498a5301f9f516488fb748c684926be514346.zip |
Merge pull request #447 from whitequark/wasi
Port nextpnr-{ice40,ecp5} to WASI
Diffstat (limited to 'common/nextpnr.h')
-rw-r--r-- | common/nextpnr.h | 14 |
1 files changed, 14 insertions, 0 deletions
diff --git a/common/nextpnr.h b/common/nextpnr.h index 66bba997..4d481d06 100644 --- a/common/nextpnr.h +++ b/common/nextpnr.h @@ -33,7 +33,9 @@ #include <boost/functional/hash.hpp> #include <boost/lexical_cast.hpp> #include <boost/range/adaptor/reversed.hpp> +#ifndef NPNR_DISABLE_THREADS #include <boost/thread.hpp> +#endif #ifndef NEXTPNR_H #define NEXTPNR_H @@ -647,6 +649,7 @@ struct DeterministicRNG struct BaseCtx { +#ifndef NPNR_DISABLE_THREADS // Lock to perform mutating actions on the Context. std::mutex mutex; boost::thread::id mutex_owner; @@ -655,6 +658,7 @@ struct BaseCtx // method will lock/unlock it when its' released the main mutex to make // sure the UI is not starved. std::mutex ui_mutex; +#endif // ID String database. mutable std::unordered_map<std::string, int> *idstring_str_to_idx; @@ -706,28 +710,36 @@ struct BaseCtx // Must be called before performing any mutating changes on the Ctx/Arch. void lock(void) { +#ifndef NPNR_DISABLE_THREADS mutex.lock(); mutex_owner = boost::this_thread::get_id(); +#endif } void unlock(void) { +#ifndef NPNR_DISABLE_THREADS NPNR_ASSERT(boost::this_thread::get_id() == mutex_owner); mutex.unlock(); +#endif } // Must be called by the UI before rendering data. This lock will be // prioritized when processing code calls yield(). void lock_ui(void) { +#ifndef NPNR_DISABLE_THREADS ui_mutex.lock(); mutex.lock(); +#endif } void unlock_ui(void) { +#ifndef NPNR_DISABLE_THREADS mutex.unlock(); ui_mutex.unlock(); +#endif } // Yield to UI by unlocking the main mutex, flashing the UI mutex and @@ -737,10 +749,12 @@ struct BaseCtx // Must be called with the main lock taken. void yield(void) { +#ifndef NPNR_DISABLE_THREADS unlock(); ui_mutex.lock(); ui_mutex.unlock(); lock(); +#endif } IdString id(const std::string &s) const { return IdString(this, s); } |