diff options
Diffstat (limited to 'build2/cli/target')
-rw-r--r-- | build2/cli/target | 62 |
1 files changed, 62 insertions, 0 deletions
diff --git a/build2/cli/target b/build2/cli/target new file mode 100644 index 0000000..dde20be --- /dev/null +++ b/build2/cli/target @@ -0,0 +1,62 @@ +// file : build2/cli/target -*- C++ -*- +// copyright : Copyright (c) 2014-2015 Code Synthesis Ltd +// license : MIT; see accompanying LICENSE file + +#ifndef BUILD2_CLI_TARGET +#define BUILD2_CLI_TARGET + +#include <build2/target> + +#include <build2/cxx/target> + +namespace build2 +{ + namespace cli + { + class cli: public file + { + public: + using file::file; + + public: + static const target_type static_type; + virtual const target_type& dynamic_type () const {return static_type;} + }; + + class cli_cxx: public mtime_target + { + public: + using mtime_target::mtime_target; + + union + { + // It is theoretically possible that the compiler will add + // padding between the members of this struct. This would + // mean that the optimal alignment for a pointer is greater + // than its size (and that an array of pointers is sub- + // optimally aligned). We will deal with such a beast of + // an architecture when we see it. + // + struct + { + cxx::hxx* h; + cxx::cxx* c; + cxx::ixx* i; + }; + target* m[3] = {nullptr, nullptr, nullptr}; + }; + + virtual group_view + group_members (action_type) const; + + virtual timestamp + load_mtime () const; + + public: + static const target_type static_type; + virtual const target_type& dynamic_type () const {return static_type;} + }; + } +} + +#endif // BUILD2_CLI_TARGET |