aboutsummaryrefslogtreecommitdiff
path: root/build2/cc/link
diff options
context:
space:
mode:
Diffstat (limited to 'build2/cc/link')
-rw-r--r--build2/cc/link78
1 files changed, 78 insertions, 0 deletions
diff --git a/build2/cc/link b/build2/cc/link
new file mode 100644
index 0000000..8be386f
--- /dev/null
+++ b/build2/cc/link
@@ -0,0 +1,78 @@
+// file : build2/cc/link -*- C++ -*-
+// copyright : Copyright (c) 2014-2016 Code Synthesis Ltd
+// license : MIT; see accompanying LICENSE file
+
+#ifndef BUILD2_CC_LINK
+#define BUILD2_CC_LINK
+
+#include <build2/types>
+#include <build2/utility>
+
+#include <build2/rule>
+
+#include <build2/bin/target>
+
+#include <build2/cc/types>
+#include <build2/cc/common>
+
+namespace build2
+{
+ namespace cc
+ {
+ class link: public rule, virtual common
+ {
+ public:
+ link (data&&);
+
+ virtual match_result
+ match (action, target&, const string& hint) const;
+
+ virtual recipe
+ apply (action, target&, const match_result&) const;
+
+ target_state
+ perform_update (action, target&) const;
+
+ target_state
+ perform_clean (action, target&) const;
+
+ private:
+ friend class compile;
+
+ // Extract system library search paths from GCC or compatible (Clang,
+ // Intel) using the -print-search-dirs option.
+ //
+ void
+ gcc_library_search_paths (scope&, dir_paths&) const;
+
+ // Extract system library search paths from VC (msvc.cxx).
+ //
+ void
+ msvc_library_search_paths (scope&, dir_paths&) const;
+
+ dir_paths
+ extract_library_paths (scope&) const;
+
+ // Alternative search logic for VC (msvc.cxx).
+ //
+ bin::liba*
+ msvc_search_static (const path&, const dir_path&, prerequisite&) const;
+
+ bin::libs*
+ msvc_search_shared (const path&, const dir_path&, prerequisite&) const;
+
+ target*
+ search_library (optional<dir_paths>&, prerequisite&) const;
+
+ // Windows-specific (windows-manifest.cxx).
+ //
+ path
+ windows_manifest (file&, bool rpath_assembly) const;
+
+ private:
+ const string rule_id;
+ };
+ }
+}
+
+#endif // BUILD2_CC_LINK