From 431f2ab50aff9908892db127187f1dbd8fbdb46d Mon Sep 17 00:00:00 2001 From: Thanos Makatos Date: Wed, 6 Apr 2016 14:15:07 +0300 Subject: [PATCH] allow tmakatos (a binary) emitter to be statically compiled It is trivial to implement static compilation of the rest of the 3rd party emitters. --- Makefile.in | 14 ++++++++++++- thin-provisioning/static_library_emitter.cc | 22 +++++++++++++++++++++ 2 files changed, 35 insertions(+), 1 deletion(-) create mode 100644 thin-provisioning/static_library_emitter.cc diff --git a/Makefile.in b/Makefile.in index 4373086..fed1756 100644 --- a/Makefile.in +++ b/Makefile.in @@ -92,7 +92,6 @@ SOURCE=\ thin-provisioning/restore_emitter.cc \ thin-provisioning/rmap_visitor.cc \ thin-provisioning/superblock.cc \ - thin-provisioning/shared_library_emitter.cc \ thin-provisioning/thin_check.cc \ thin-provisioning/thin_delta.cc \ thin-provisioning/thin_dump.cc \ @@ -119,10 +118,23 @@ ifeq ("@DEVTOOLS@", "yes") SOURCE+=$(DEVTOOLS_SOURCE) endif +ifeq ("@STATIC@", "yes") +SOURCE += thin-provisioning/static_library_emitter.cc +else +SOURCE += thin-provisioning/shared_library_emitter.cc +endif + CC:=@CC@ CXX:=@CXX@ STRIP:=@STRIP@ OBJECTS:=$(subst .cc,.o,$(SOURCE)) + +# FIXME OBJECTS += $(PLUGIN_LIBS) doesn't work, probably because it's empty at +# the time of use? +ifeq ("@STATIC@", "yes") +OBJECTS += contrib/*.a +endif + TOP_DIR:=@top_srcdir@ TOP_BUILDDIR:=@top_builddir@ CFLAGS+=-g -Wall -O3 -fPIC diff --git a/thin-provisioning/static_library_emitter.cc b/thin-provisioning/static_library_emitter.cc new file mode 100644 index 0000000..8caa507 --- /dev/null +++ b/thin-provisioning/static_library_emitter.cc @@ -0,0 +1,22 @@ +#include "thin-provisioning/shared_library_emitter.h" +#include +#include "contrib/tmakatos_emitter.h" + +using namespace std; +using namespace thin_provisioning; + +//---------------------------------------------------------------- + +emitter::ptr +thin_provisioning::create_custom_emitter(string const &shared_lib, ostream &out) +{ + if (shared_lib != "tmakatos_emitter.so") + throw runtime_error(shared_lib + ": no such emitter"); + + cout << "XXX creating tmakatos_emitter" << endl; + cout << flush; + + return emitter::ptr(new tmakatos_emitter::binary_emitter(out)); +} + +//----------------------------------------------------------------