Description: Build a shared library in addition to the static one
 Build libgbwtgraph.so with SONAME libgbwtgraph.so.1, so it can be shipped in
 a shared-library package.  debian/rules compiles the objects with -fPIC.
Author: Andreas Tille <tille@debian.org>
Last-Update: 2026-10-25

diff --git a/Makefile b/Makefile
index 94b48ea..9147e8d 100644
--- a/Makefile
+++ b/Makefile
@@ -58,12 +58,14 @@ CXX_FLAGS=$(MY_CXX_FLAGS) $(PARALLEL_FLAGS) $(MY_CXX_OPT_FLAGS) $(INCLUDES)
 HEADERS=$(wildcard include/gbwtgraph/*.h)
 LIBOBJS=$(addprefix $(BUILD_OBJ)/,algorithms.o cached_gbwtgraph.o gbwtgraph.o gbz.o gfa.o index.o internal.o minimizer.o naive_graph.o path_cover.o subgraph.o utils.o)
 LIBRARY=$(BUILD_LIB)/libgbwtgraph.a
+LIBRARY_SONAME=libgbwtgraph.so.1
+LIBRARY_SHARED=$(BUILD_LIB)/libgbwtgraph.so.1.5
 
 PROGRAMS=$(addprefix $(BUILD_BIN)/,canonical_gfa chunk_gbz gfa2gbwt gbz_extract gbz_find gbz_stats kmer_freq subgraph_query)
 OBSOLETE=gfa2gbwt
 
 .PHONY: all clean directories test
-all: directories $(LIBRARY) $(PROGRAMS)
+all: directories $(LIBRARY) $(LIBRARY_SHARED) $(PROGRAMS)
 
 directories: $(BUILD_BIN) $(BUILD_LIB) $(BUILD_OBJ)
 
@@ -82,6 +84,11 @@ $(BUILD_OBJ)/%.o:$(SOURCE_DIR)/%.cpp $(HEADERS)
 $(LIBRARY):$(LIBOBJS)
 	ar rcs $@ $(LIBOBJS)
 
+$(LIBRARY_SHARED):$(LIBOBJS)
+	$(MY_CXX) -shared -Wl,-soname,$(LIBRARY_SONAME) $(LDFLAGS) $(CPPFLAGS) $(CXXFLAGS) $(CXX_FLAGS) -o $@ $(LIBOBJS) $(LIBS)
+	ln -sf $(notdir $@) $(BUILD_LIB)/$(LIBRARY_SONAME)
+	ln -sf $(LIBRARY_SONAME) $(BUILD_LIB)/libgbwtgraph.so
+
 $(BUILD_BIN)/%:$(BUILD_OBJ)/%.o $(LIBRARY)
 	$(MY_CXX) $(LDFLAGS) $(CPPFLAGS) $(CXXFLAGS) $(CXX_FLAGS) -o $@ $< $(LIBRARY) $(LIBS)
 
