From 9fa5f73d00905568e8979d0c93ec4a8f645c81d5 Mon Sep 17 00:00:00 2001 From: Boris Kolpackov Date: Tue, 9 Aug 2016 11:31:53 +0200 Subject: Implement support for C compilation We now have two new modules: cc (c-common) and c. --- build2/cc/utility | 64 +++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 64 insertions(+) create mode 100644 build2/cc/utility (limited to 'build2/cc/utility') diff --git a/build2/cc/utility b/build2/cc/utility new file mode 100644 index 0000000..ae19d56 --- /dev/null +++ b/build2/cc/utility @@ -0,0 +1,64 @@ +// file : build2/cc/utility -*- C++ -*- +// copyright : Copyright (c) 2014-2016 Code Synthesis Ltd +// license : MIT; see accompanying LICENSE file + +#ifndef BUILD2_CC_UTILITY +#define BUILD2_CC_UTILITY + +#include +#include + +#include +#include + +#include + +namespace build2 +{ + struct variable; + + namespace cc + { + // Compile/link output type. + // + otype + compile_type (target&); + + otype + link_type (target&); + + // Library link order. + // + // The reason we pass scope and not the target is because this function is + // called not only for exe/lib but also for obj as part of the library + // meta-information protocol implementation. Normally the bin.*.lib values + // will be project-wide. With this scheme they can be customized on the + // per-directory basis but not per-target which means all exe/lib in the + // same directory have to have the same link order. + // + lorder + link_order (scope& base, otype); + + // Given the link order return the library member (liba or libs) to link. + // + target& + link_member (bin::lib&, lorder); + + // Append or hash library options from a pair of *.export.* variables + // (first one is cc.export.*) recursively, prerequisite libraries first. + // + void + append_lib_options (cstrings&, target&, lorder, + const variable&, + const variable&); + + void + hash_lib_options (sha256&, target&, lorder, + const variable&, + const variable&); + } +} + +#include + +#endif // BUILD2_CC_UTILITY -- cgit v1.1