aboutsummaryrefslogtreecommitdiff
path: root/build2/bin/target.hxx
diff options
context:
space:
mode:
Diffstat (limited to 'build2/bin/target.hxx')
-rw-r--r--build2/bin/target.hxx353
1 files changed, 0 insertions, 353 deletions
diff --git a/build2/bin/target.hxx b/build2/bin/target.hxx
deleted file mode 100644
index 45229ce..0000000
--- a/build2/bin/target.hxx
+++ /dev/null
@@ -1,353 +0,0 @@
-// file : build2/bin/target.hxx -*- C++ -*-
-// copyright : Copyright (c) 2014-2019 Code Synthesis Ltd
-// license : MIT; see accompanying LICENSE file
-
-#ifndef BUILD2_BIN_TARGET_HXX
-#define BUILD2_BIN_TARGET_HXX
-
-#include <libbuild2/types.hxx>
-#include <libbuild2/utility.hxx>
-
-#include <libbuild2/target.hxx>
-
-namespace build2
-{
- namespace bin
- {
- // The obj{} target group.
- //
- class objx: public file // Common base of all objX{} object files.
- {
- public:
- using file::file;
-
- public:
- static const target_type static_type;
- };
-
- class obje: public objx
- {
- public:
- using objx::objx;
-
- public:
- static const target_type static_type;
- virtual const target_type& dynamic_type () const {return static_type;}
- };
-
- class obja: public objx
- {
- public:
- using objx::objx;
-
- public:
- static const target_type static_type;
- virtual const target_type& dynamic_type () const {return static_type;}
- };
-
- class objs: public objx
- {
- public:
- using objx::objx;
-
- public:
- static const target_type static_type;
- virtual const target_type& dynamic_type () const {return static_type;}
- };
-
- class obj: public target
- {
- public:
- using target::target;
-
- public:
- static const target_type static_type;
- virtual const target_type& dynamic_type () const {return static_type;}
- };
-
- // Binary module interface (BMI).
- //
- // While currently there are only C++ modules, if things pan out, chances
- // are we will have C (or Obj-C) modules. And in that case it is plausible
- // we will also have some binutils to examine BMIs, similar to objdump,
- // etc. So that's why this target type is in bin and not cxx.
- //
- // bmi*{} is similar to obj*{} though the semantics is a bit different:
- // the idea is that we should try hard to re-use a single bmiX{} file for
- // an entire "build" but if that's not possible (because the compilation
- // options are too different), then compile a private version for
- // ourselves (the definition of "too different" is, of course, compiler-
- // specific).
- //
- // When we compile a module interface unit, we end up with bmi*{} and
- // obj*{}. How that obj*{} is produced is compiler-dependent. While it
- // makes sense to decouple the production of the two in order to increase
- // parallelism, doing so will further complicate the already hairy
- // organization. So, at least for now, we produce the two at the same time
- // and make obj*{} an ad hoc member of bmi*{}.
- //
- // There are also header units for which we define a parallel hbmi*{}
- // hierarchy. Note that hbmix{} is-a bmix{} (we think of header BMIs as a
- // more specialized kind of BMI) so where you need to distinguish between
- // header and module BMIs, you should check for headers first. Note also
- // that in case of a header unit there may be no obj*{}.
- //
- class bmix: public file // Common base of all bmiX{} interface files.
- {
- public:
- using file::file;
-
- public:
- static const target_type static_type;
- };
-
- class hbmix: public bmix // Common base of all hbmiX{} interface files.
- {
- public:
- using bmix::bmix;
-
- public:
- static const target_type static_type;
- };
-
- class bmie: public bmix
- {
- public:
- using bmix::bmix;
-
- public:
- static const target_type static_type;
- virtual const target_type& dynamic_type () const {return static_type;}
- };
-
- class hbmie: public hbmix
- {
- public:
- using hbmix::hbmix;
-
- public:
- static const target_type static_type;
- virtual const target_type& dynamic_type () const {return static_type;}
- };
-
- class bmia: public bmix
- {
- public:
- using bmix::bmix;
-
- public:
- static const target_type static_type;
- virtual const target_type& dynamic_type () const {return static_type;}
- };
-
- class hbmia: public hbmix
- {
- public:
- using hbmix::hbmix;
-
- public:
- static const target_type static_type;
- virtual const target_type& dynamic_type () const {return static_type;}
- };
-
- class bmis: public bmix
- {
- public:
- using bmix::bmix;
-
- public:
- static const target_type static_type;
- virtual const target_type& dynamic_type () const {return static_type;}
- };
-
- class hbmis: public hbmix
- {
- public:
- using hbmix::hbmix;
-
- public:
- static const target_type static_type;
- virtual const target_type& dynamic_type () const {return static_type;}
- };
-
- class bmi: public target
- {
- public:
- using target::target;
-
- public:
- static const target_type static_type;
- virtual const target_type& dynamic_type () const {return static_type;}
- };
-
- class hbmi: public target
- {
- public:
- using target::target;
-
- public:
- static const target_type static_type;
- virtual const target_type& dynamic_type () const {return static_type;}
- };
-
-
- // Common base for lib{} and libul{} groups.
- //
- // We use mtime_target as a base for the "trust me it exists" functionality
- // which we use, for example, to have installed lib{} prerequisites that
- // are matched by the fallback file rule.
- //
- class libx: public mtime_target
- {
- public:
- using mtime_target::mtime_target;
-
- public:
- static const target_type static_type;
- };
-
- // The libue{} target, libul{} group and libua{} and libus{} members
- // (utility library).
- //
- // Utility libraries are static libraries that differ based on the kind of
- // object files they contains. Note that the libul{} group is more like
- // obj{} rather than lib{} in that one does not build the group directly
- // rather picking a suitable member.
- //
- // libul{} is a "library utility library" in that the choice of members is
- // libua{} or libus{}, even when linking an executable (normally a unit
- // test).
- //
- // Note that there is no "general utility library" with all three types of
- // members (that would cause member uplink ambiguity). If you need to
- // build both a library from libua{}/libus{} and an executable from
- // libue{} then you will need to arrange this explicitly, for example:
- //
- // exe{foo}: libue{foo}
- // lib{foo}: libul{foo}
- //
- // {libue libul}{foo}: cxx{*}
- //
- class libux: public file // Common base of all libuX{} static libraries.
- {
- public:
- using file::file;
-
- public:
- static const target_type static_type;
- };
-
- class libue: public libux
- {
- public:
- using libux::libux;
-
- public:
- static const target_type static_type;
- virtual const target_type& dynamic_type () const {return static_type;}
- };
-
- class libua: public libux
- {
- public:
- using libux::libux;
-
- public:
- static const target_type static_type;
- virtual const target_type& dynamic_type () const {return static_type;}
- };
-
- class libus: public libux
- {
- public:
- using libux::libux;
-
- public:
- static const target_type static_type;
- virtual const target_type& dynamic_type () const {return static_type;}
- };
-
- class libul: public libx
- {
- public:
- using libx::libx;
-
- public:
- static const target_type static_type;
- virtual const target_type& dynamic_type () const {return static_type;}
- };
-
- // The lib{} target group.
- //
- class liba: public file
- {
- public:
- using file::file;
-
- public:
- static const target_type static_type;
- virtual const target_type& dynamic_type () const {return static_type;}
- };
-
- class libs: public file
- {
- public:
- using file::file;
-
- public:
- static const target_type static_type;
-
- virtual const target_type&
- dynamic_type () const override {return static_type;}
- };
-
- // Standard layout type compatible with group_view's const target*[2].
- //
- struct lib_members
- {
- const liba* a = nullptr;
- const libs* s = nullptr;
- };
-
- class lib: public libx, public lib_members
- {
- public:
- using libx::libx;
-
- virtual group_view
- group_members (action) const override;
-
- public:
- static const target_type static_type;
-
- virtual const target_type&
- dynamic_type () const override {return static_type;}
- };
-
- // Windows import library.
- //
- class libi: public file
- {
- public:
- using file::file;
-
- public:
- static const target_type static_type;
- virtual const target_type& dynamic_type () const {return static_type;}
- };
-
- // Windows module definition (.def).
- //
- class def: public file
- {
- public:
- using file::file;
-
- public:
- static const target_type static_type;
- virtual const target_type& dynamic_type () const {return static_type;}
- };
- }
-}
-
-#endif // BUILD2_BIN_TARGET_HXX