// file : build2/cli/target -*- C++ -*- // copyright : Copyright (c) 2014-2017 Code Synthesis Ltd // license : MIT; see accompanying LICENSE file #ifndef BUILD2_CLI_TARGET #define BUILD2_CLI_TARGET #include #include #include #include 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: 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}*/; // @@ GCC 4.8 }; //using mtime_target::mtime_target; // @@ GCC 4.8 cli_cxx (dir_path d, dir_path o, string n) : mtime_target (move (d), move (o), move (n)) { m[0] = m[1] = m[2] = 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