summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--project2/ice/iceCompile.cpp13
-rw-r--r--project2/ice/iceCompile.h7
-rw-r--r--project2/ice/iceDataSource.cpp14
-rw-r--r--project2/ice/iceDataSource.h1
4 files changed, 29 insertions, 6 deletions
diff --git a/project2/ice/iceCompile.cpp b/project2/ice/iceCompile.cpp
index d9287f4..1be126c 100644
--- a/project2/ice/iceCompile.cpp
+++ b/project2/ice/iceCompile.cpp
@@ -44,18 +44,21 @@ IceCompile::IceCompile(const boost::filesystem::path & s, const Deps & d) :
}
void
-IceCompile::Update() const
+IceCompile::Update(int steps) const
{
fs::create_directories(IceCompile::tmpdir);
BOOST_FOREACH(const auto & dep, deps) {
- dep->Update();
+ dep->Update(steps);
}
const fs::path cpp(tmpdir / OutputName(".cpp"));
- update(InputPath(), cpp, &IceCompile::Build);
+ if (steps & UpdateBuild)
+ update(InputPath(), cpp, &IceCompile::Build);
const fs::path o(tmpdir / OutputName(".o"));
- update(cpp, o, &IceCompile::Compile);
+ if (steps & UpdateCompile)
+ update(cpp, o, &IceCompile::Compile);
const fs::path so(tmpdir / OutputName(".so"));
- update(o, so, &IceCompile::Link);
+ if (steps & UpdateLink)
+ update(o, so, &IceCompile::Link);
}
void
diff --git a/project2/ice/iceCompile.h b/project2/ice/iceCompile.h
index d403d9e..762b419 100644
--- a/project2/ice/iceCompile.h
+++ b/project2/ice/iceCompile.h
@@ -23,8 +23,13 @@ class IceCompile {
IceCompile(const boost::filesystem::path & slice);
IceCompile(const boost::filesystem::path & slice, const Deps & deps);
+ enum Steps {
+ UpdateBuild = 0x1,
+ UpdateCompile = 0x2,
+ UpdateLink = 0x4,
+ };
/// Conditionally execute Build, Compile, Link as required
- void Update() const;
+ void Update(int steps = UpdateBuild | UpdateCompile | UpdateLink) const;
/// Source file path (e.g. /some/path/slice.ice)
virtual boost::filesystem::path InputPath() const = 0;
/// File name (no extension) in temporary directory (e.g. clientSlice)
diff --git a/project2/ice/iceDataSource.cpp b/project2/ice/iceDataSource.cpp
index 5cfd5b1..7b77b19 100644
--- a/project2/ice/iceDataSource.cpp
+++ b/project2/ice/iceDataSource.cpp
@@ -11,6 +11,8 @@ IceDataSource::Proxies IceDataSource::proxies;
DECLARE_OPTIONS(IceDataSource, "ICE Data Source")
("ice.client.slice", Options::functions(boost::bind(&IceDataSource::SetSlice, _1), boost::bind(&IceDataSource::ClearSlice)),
"The ICE Slice file(s) to compile")
+("ice.client.sliceclient", Options::functions(boost::bind(&IceDataSource::SetSliceClient, _1), boost::bind(&IceDataSource::ClearSlice)),
+ "The ICE Slice file(s) to compile (client only, assumes comms library referenced)")
END_OPTIONS(IceDataSource);
int dummy = 0;
@@ -33,6 +35,18 @@ IceDataSource::SetSlice(const VariableType & vslice)
}
void
+IceDataSource::SetSliceClient(const VariableType & vslice)
+{
+ auto slice = vslice.as<std::string>();
+ BuildComms bc(slice);
+ bc.Update(IceCompile::UpdateBuild);
+ BuildShared bcs(slice, { });
+ BuildClient bcl(slice, { &bcs });
+ bcl.Update();
+ libs.insert({ slice, bcl.Open() });
+}
+
+void
IceDataSource::ClearSlice()
{
libs.clear();
diff --git a/project2/ice/iceDataSource.h b/project2/ice/iceDataSource.h
index e80a3fc..fe07bc1 100644
--- a/project2/ice/iceDataSource.h
+++ b/project2/ice/iceDataSource.h
@@ -28,6 +28,7 @@ class IceDataSource : public DataSource {
private:
static void SetSlice(const VariableType &);
+ static void SetSliceClient(const VariableType &);
static void ClearSlice();
typedef std::map<std::string, IceCompile::LibHandle> Libs;
static Libs libs;