scons,debug: Implement the "All" flag in C++ and not scons.
Create an AllFlagsFlag class which inherits from the CompoundFlag class. This class is a singleton, and the SimpleFlags install themselves in it instead of having SCons collect them. The allFlagsVersion global variable was supposed to be for debugging according to a comment, but was actually an important part of the "All" flags inner workings. It was not exposed in the header, but was redefined/pulled through in src/python/pybind11/debug.cc. The AllFlagsFlag class now tracks that value, and it can be accessed without reaching behind the curtain. This also somewhat decentralizes the debug flag building process in SCons. The debug/flags.cc still includes all flags at once which centralizes them, but at least now the "All" flag won't also. Change-Id: I8430e0fe9022846aade028fb46c80777169a2007 Reviewed-on: https://gem5-review.googlesource.com/c/public/gem5/+/48370 Tested-by: kokoro <noreply+kokoro@google.com> Reviewed-by: Daniel Carvalho <odanrc@yahoo.com.br> Reviewed-by: Nathanael Premillieu <nathanael.premillieu@huawei.com> Reviewed-by: Andreas Sandberg <andreas.sandberg@arm.com> Maintainer: Andreas Sandberg <andreas.sandberg@arm.com>
This commit is contained in:
@@ -100,9 +100,7 @@ class SimpleFlag : public Flag
|
||||
void sync() override { _tracing = _globalEnable && _enabled; }
|
||||
|
||||
public:
|
||||
SimpleFlag(const char *name, const char *desc, bool is_format=false)
|
||||
: Flag(name, desc), _isFormat(is_format)
|
||||
{}
|
||||
SimpleFlag(const char *name, const char *desc, bool is_format=false);
|
||||
|
||||
void enable() override { _enabled = true; sync(); }
|
||||
void disable() override { _enabled = false; sync(); }
|
||||
@@ -136,6 +134,20 @@ class CompoundFlag : public Flag
|
||||
void disable() override;
|
||||
};
|
||||
|
||||
class AllFlagsFlag : public CompoundFlag
|
||||
{
|
||||
protected:
|
||||
static int _version;
|
||||
|
||||
public:
|
||||
AllFlagsFlag();
|
||||
|
||||
void add(SimpleFlag *flag);
|
||||
|
||||
static AllFlagsFlag &instance();
|
||||
static int version() { return _version; }
|
||||
};
|
||||
|
||||
typedef std::map<std::string, Flag *> FlagsMap;
|
||||
FlagsMap &allFlags();
|
||||
|
||||
|
||||
Reference in New Issue
Block a user