aboutsummaryrefslogtreecommitdiff
path: root/build2/cxx
diff options
context:
space:
mode:
authorBoris Kolpackov <boris@codesynthesis.com>2017-06-22 13:24:59 +0200
committerBoris Kolpackov <boris@codesynthesis.com>2017-06-22 13:24:59 +0200
commit9a00b8ccfef1d13088be2d76fefcb320c269732a (patch)
tree40a7efc0bc0116cbbf035310b9341d83a0793a07 /build2/cxx
parente52f8358ce533742a0357fabebd96fb7f5b2609a (diff)
Add extra support for symbol exporting in modularized projects
Since modules don't see each other's macros, we can use a single, keyword- like macro for dll-exporting that is managed by the build system (so no need for an "export" header). For example: cxx.features.symexport = true export __symexport void f ();
Diffstat (limited to 'build2/cxx')
-rw-r--r--build2/cxx/init.cxx11
1 files changed, 10 insertions, 1 deletions
diff --git a/build2/cxx/init.cxx b/build2/cxx/init.cxx
index 2c59f2c..53ee2d2 100644
--- a/build2/cxx/init.cxx
+++ b/build2/cxx/init.cxx
@@ -55,8 +55,8 @@ namespace build2
return var_pool.rw (rs).insert<bool> (v, variable_visibility::project);
};
- bool modules (false); auto& v_m (enter ("cxx.features.modules"));
//bool concepts (false); auto& v_c (enter ("cxx.features.concepts"));
+ bool modules (false); auto& v_m (enter ("cxx.features.modules"));
// Translate "latest" and "experimental" to the compiler/version-
// appropriate option(s).
@@ -429,8 +429,16 @@ namespace build2
if (!cast_false<bool> (rs["cxx.config.loaded"]))
load_module (rs, rs, "cxx.config", loc, false, hints);
+ auto& vp (var_pool.rw (rs));
+
bool modules (cast<bool> (rs["cxx.features.modules"]));
+ bool symexport (
+ modules &&
+ cast_false<bool> (
+ rs[vp.insert<bool> ("cxx.features.symexport",
+ variable_visibility::project)]));
+
config_module& cm (*rs.modules.lookup<config_module> ("cxx.config"));
cc::data d {
@@ -451,6 +459,7 @@ namespace build2
cm.tstd,
modules,
+ symexport,
cast_null<process_path> (rs["pkgconfig.path"]),
cast<dir_paths> (rs[cm.x_sys_lib_dirs]),