// file : build/cli/target -*- C++ -*- // copyright : Copyright (c) 2014-2015 Code Synthesis Ltd // license : MIT; see accompanying LICENSE file #ifndef BUILD_CLI_TARGET #define BUILD_CLI_TARGET #include <build/target> #include <build/cxx/target> namespace build { 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 // BUILD_CLI_TARGET