diff options
author | Boris Kolpackov <boris@codesynthesis.com> | 2017-06-22 13:24:59 +0200 |
---|---|---|
committer | Boris Kolpackov <boris@codesynthesis.com> | 2017-06-22 13:24:59 +0200 |
commit | 9a00b8ccfef1d13088be2d76fefcb320c269732a (patch) | |
tree | 40a7efc0bc0116cbbf035310b9341d83a0793a07 /build2/cxx | |
parent | e52f8358ce533742a0357fabebd96fb7f5b2609a (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.cxx | 11 |
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]), |