base, sim, dev: Remove SWIG
authorAndreas Sandberg <andreas.sandberg@arm.com>
Mon, 30 Jan 2017 12:00:05 +0000 (12:00 +0000)
committerAndreas Sandberg <andreas.sandberg@arm.com>
Tue, 2 May 2017 12:37:32 +0000 (12:37 +0000)
Remove SWIG guards and SWIG-specific C++ code.

Change-Id: Icaad6720513b6f48153727ef3f70e0dba0df4bee
Signed-off-by: Andreas Sandberg <andreas.sandberg@arm.com>
Reviewed-by: Andreas Hansson <andreas.hansson@arm.com>
Reviewed-by: Curtis Dunham <curtis.dunham@arm.com>
Reviewed-on: https://gem5-review.googlesource.com/2921
Reviewed-by: Jason Lowe-Power <jason@lowepower.com>
Reviewed-by: Tony Gutierrez <anthony.gutierrez@amd.com>
src/base/addr_range.hh
src/base/types.cc
src/base/types.hh
src/dev/net/etherdevice.hh
src/sim/core.cc
src/sim/drain.hh
src/sim/eventq.hh
src/sim/init.cc
src/sim/init.hh
src/sim/simulate.cc
src/sim/stat_register.hh

index ed0259ff7845ce54c9ac1e57aab499cdf8e9d495..1137efa28c7810a90d110be8a1b19a969abd96f4 100644 (file)
@@ -346,11 +346,6 @@ class AddrRange
         return false;
     }
 
-/**
- * Keep the operators away from SWIG.
- */
-#ifndef SWIG
-
     /**
      * Less-than operator used to turn an STL map into a binary search
      * tree of non-overlapping address ranges.
@@ -384,7 +379,6 @@ class AddrRange
     {
         return !(*this == r);
     }
-#endif // SWIG
 };
 
 /**
index 38b6bf2b25c450d625fb15e3218c2adb1fd9fe6a..ee918a4ed34bb778dc87a603f2967bbb0b9cbbc1 100644 (file)
@@ -30,8 +30,6 @@
 
 #include "base/types.hh"
 
-#ifndef SWIG // keep the operators away from SWIG
-
 std::ostream&
 operator<<(std::ostream &out, const Cycles & cycles)
 {
@@ -39,5 +37,3 @@ operator<<(std::ostream &out, const Cycles & cycles)
     return out;
 }
 
-#endif // SWIG not touching operators
-
index 7b115901a3d345dca25bc2f1597f17d26251ce04..05a29f8bdb33515d148199289fa34454e550dd4a 100644 (file)
@@ -73,8 +73,7 @@ const Tick MaxTick = ULL(0xffffffffffffffff);
  * typedef, aiming to avoid unintentional mixing of cycles and ticks
  * in the code base.
  *
- * Operators are defined inside an ifndef block to avoid swig touching
- * them. Note that there is no overloading of the bool operator as the
+ * Note that there is no overloading of the bool operator as the
  * compiler is allowed to turn booleans into integers and this causes
  * a whole range of issues in a handful locations. The solution to
  * this problem would be to use the safe bool idiom, but for now we
@@ -91,18 +90,12 @@ class Cycles
 
   public:
 
-#ifndef SWIG // SWIG gets confused by constexpr
     /** Explicit constructor assigning a value. */
     explicit constexpr Cycles(uint64_t _c) : c(_c) { }
-#else
-    explicit Cycles(uint64_t _c) : c(_c) { }
-#endif
 
     /** Default constructor for parameter classes. */
     Cycles() : c(0) { }
 
-#ifndef SWIG // keep the operators away from SWIG
-
     /** Converting back to the value type. */
     constexpr operator uint64_t() const { return c; }
 
@@ -138,9 +131,6 @@ class Cycles
     { return Cycles(c >> shift); }
 
     friend std::ostream& operator<<(std::ostream &out, const Cycles & cycles);
-
-#endif // SWIG not touching operators
-
 };
 
 /**
@@ -194,11 +184,9 @@ const PortID InvalidPortID = (PortID)-1;
 class FaultBase;
 typedef std::shared_ptr<FaultBase> Fault;
 
-#ifndef SWIG // Swig gets really confused by decltype
 // Rather than creating a shared_ptr instance and assigning it nullptr,
 // we just create an alias.
 constexpr decltype(nullptr) NoFault = nullptr;
-#endif
 
 struct AtomicOpFunctor
 {
index d13a1c3c32afbf190736cdacc89c82d461bffc2f..3ce54958d305beb9d347ab406fbae89a73cb0713 100644 (file)
@@ -128,10 +128,8 @@ class EtherDevice : public PciDevice
  * The Python object hierarchy includes the EtherDevBase class which
  * is used by some ethernet devices as a way to share common
  * configuration information in the generated param structs. Since the
- * Python hierarchy is used to generate a SWIG interface for all C++
- * SimObjects, we need to reflect this in the C++ object hierarchy. If
- * we don't, SWIG might end up doing 'bad things' when it down casts
- * ethernet objects to their base class(es).
+ * Python hierarchy is used to generate a Python interfaces for all C++
+ * SimObjects, we need to reflect this in the C++ object hierarchy.
  */
 class EtherDevBase : public EtherDevice
 {
index 279012f9b6af32d56a65863d46c1b561bffaf020..00df23ed6709a5b99ab12bfa94523e539b62a64a 100644 (file)
@@ -119,7 +119,7 @@ registerExitCallback(Callback *callback)
 }
 
 /**
- * Do C++ simulator exit processing.  Exported to SWIG to be invoked
+ * Do C++ simulator exit processing.  Exported to Python to be invoked
  * when simulator terminates via Python's atexit mechanism.
  */
 void
index 7ff1d6e2a36ff897323deb14cfdb0ad1e88cc9f8..3b01630a90a6586e7412e2a072ef2ed5cde796cb 100644 (file)
@@ -46,7 +46,6 @@
 
 class Drainable;
 
-#ifndef SWIG // SWIG doesn't support strongly typed enums
 /**
  * Object drain/handover states
  *
@@ -75,7 +74,6 @@ enum class DrainState {
     Drained,  /** Buffers drained, ready for serialization/handover */
     Resuming, /** Transient state while the simulator is resuming */
 };
-#endif
 
 /**
  * This class coordinates draining of a System.
@@ -97,9 +95,7 @@ class DrainManager
 {
   private:
     DrainManager();
-#ifndef SWIG
     DrainManager(DrainManager &) = delete;
-#endif
     ~DrainManager();
 
   public:
index 0b76491caae922fc16f182d00f7e47a060a15645..95a36ca7b96e73c7fefc0d5f70a70bf8dcf3015c 100644 (file)
@@ -67,14 +67,11 @@ extern uint32_t numMainEventQueues;
 //! Array for main event queues.
 extern std::vector<EventQueue *> mainEventQueue;
 
-#ifndef SWIG
 //! The current event queue for the running thread. Access to this queue
 //! does not require any locking from the thread.
 
 extern __thread EventQueue *_curEventQueue;
 
-#endif
-
 //! Current mode of execution: parallel / serial
 extern bool inParallelMode;
 
@@ -356,13 +353,10 @@ class Event : public EventBase, public Serializable
     //! NULL.  (Overridden in GlobalEvent::BarrierEvent.)
     virtual BaseGlobalEvent *globalEvent() { return NULL; }
 
-#ifndef SWIG
     void serialize(CheckpointOut &cp) const override;
     void unserialize(CheckpointIn &cp) override;
-#endif
 };
 
-#ifndef SWIG
 inline bool
 operator<(const Event &l, const Event &r)
 {
@@ -401,7 +395,6 @@ operator!=(const Event &l, const Event &r)
 {
     return l.when() != r.when() || l.priority() != r.priority();
 }
-#endif
 
 /**
  * Queue of events sorted in time order
@@ -489,7 +482,6 @@ class EventQueue
     EventQueue(const EventQueue &);
 
   public:
-#ifndef SWIG
     /**
      * Temporarily migrate execution to a different event queue.
      *
@@ -549,7 +541,6 @@ class EventQueue
       private:
         EventQueue &eq;
     };
-#endif
 
     EventQueue(const std::string &n);
 
@@ -665,7 +656,6 @@ class EventQueue
 
 void dumpMainQueue();
 
-#ifndef SWIG
 class EventManager
 {
   protected:
@@ -778,6 +768,5 @@ class EventWrapper : public Event
 
     const char *description() const { return "EventWrapped"; }
 };
-#endif
 
 #endif // __SIM_EVENTQ_HH__
index 33cd4040fce8ddd3186b5d7ec7202aa9d9bb4632..70578197fb324c21b561e3f97dd5357a30d9a19f 100644 (file)
@@ -127,8 +127,7 @@ EmbeddedPython::addModule() const
 }
 
 /*
- * Load and initialize all of the python parts of M5, including Swig
- * and the embedded module importer.
+ * Load and initialize all of the python parts of M5.
  */
 int
 EmbeddedPython::initAll()
@@ -152,40 +151,6 @@ EmbeddedPython::initAll()
     return 0;
 }
 
-EmbeddedSwig::EmbeddedSwig(void (*init_func)(), const string& _context)
-    : initFunc(init_func), context(_context)
-{
-    getList().push_back(this);
-}
-
-list<EmbeddedSwig *> &
-EmbeddedSwig::getList()
-{
-    static list<EmbeddedSwig *> the_list;
-    return the_list;
-}
-
-void
-EmbeddedSwig::initAll()
-{
-    char* old_context = _Py_PackageContext;
-    // initialize SWIG modules. initFunc() is autogenerated and calls
-    // all of the individual swig initialization functions.
-    for (auto i : getList()) {
-        // to ensure that the loaded modules are placed in the right
-        // package we have to be a bit unorthodox and directly
-        // manipulate the package context since swig simply calls
-        // Py_InitModule with nothing but the module name of the
-        // wrapper
-        char* cstr = new char[i->context.size() + 1];
-        strcpy(cstr, i->context.c_str());
-        _Py_PackageContext = cstr;
-        i->initFunc();
-        delete[] cstr;
-    }
-    _Py_PackageContext = old_context;
-}
-
 EmbeddedPyBind::EmbeddedPyBind(const char *_name,
                                void (*init_func)(py::module &),
                                const char *_base)
@@ -265,7 +230,6 @@ EmbeddedPyBind::initAll()
 int
 initM5Python()
 {
-    EmbeddedSwig::initAll();
     EmbeddedPyBind::initAll();
     return EmbeddedPython::initAll();
 }
index ecc4bc347956db8ec67d8c18708b224cff5d18bc..de6b44de4f4debd24ab13ed166559624c42e9f34 100644 (file)
@@ -80,18 +80,6 @@ struct EmbeddedPython
     static int initAll();
 };
 
-struct EmbeddedSwig
-{
-    void (*initFunc)();
-
-    std::string context;
-
-    EmbeddedSwig(void (*init_func)(), const std::string& _context);
-
-    static std::list<EmbeddedSwig *> &getList();
-    static void initAll();
-};
-
 class EmbeddedPyBind
 {
   public:
index c6eb2ddf61f8512f480b31190c1eac084e827bc7..d3c27fa08c5708eeafafd96d190a247176fbc432 100644 (file)
@@ -76,7 +76,7 @@ GlobalSimLoopExitEvent *simulate_limit_event = nullptr;
 
 /** Simulate for num_cycles additional cycles.  If num_cycles is -1
  * (the default), do not limit simulation; some other event must
- * terminate the loop.  Exported to Python via SWIG.
+ * terminate the loop.  Exported to Python.
  * @return The SimLoopExitEvent that caused the loop to exit.
  */
 GlobalSimLoopExitEvent *
index bbe9093214d7363d1fd2eca5c65cac0ec71d705a..36c015757c26a262c80839263ddb2d8ccb9489f5 100644 (file)
@@ -38,7 +38,7 @@
  */
 
 /* Provide a mechanism to register the Python stats reset/dump functions
- * defined in src/swig/python/stats.i with the mechanisms in namespace
+ * defined in src/python/pybind11/stats.cc with the mechanisms in namespace
  * Stats */
 
 #ifndef __SIM_STAT_REGISTER_H__