Description: Build a shared library in addition to the static one
 Build libgbwt.so with SONAME libgbwt.so.1, so it can be shipped in a
 shared-library package.  debian/rules compiles the objects with -fPIC.
Last-Update: 2026-10-22
Author: Andreas Tille <tille@debian.org>
Assisted-By: opencode/deepseek-v4.1-flash-free

--- a/Makefile
+++ b/Makefile
@@ -58,12 +58,13 @@ CXX_FLAGS=$(MY_CXX_FLAGS) $(PARALLEL_FLA
 HEADERS=$(wildcard include/gbwt/*.h)
 LIBOBJS=$(addprefix $(BUILD_OBJ)/,algorithms.o bwtmerge.o cached_gbwt.o dynamic_gbwt.o fast_locate.o files.o gbwt.o internal.o metadata.o support.o test.o utils.o variants.o)
 LIBRARY=$(BUILD_LIB)/libgbwt.a
+LIBRARY_SHARED=$(BUILD_LIB)/libgbwt.so.1.6
 
 PROGRAMS=$(addprefix $(BUILD_BIN)/,build_gbwt build_ri merge_gbwt benchmark metadata_tool remove_seq)
 OBSOLETE=build_gbwt build_ri merge_gbwt benchmark metadata_tool remove_seq
 
 .PHONY: all clean directories test
-all: directories $(LIBRARY) $(PROGRAMS)
+all: directories $(LIBRARY) $(LIBRARY_SHARED) $(PROGRAMS)
 
 directories: $(BUILD_BIN) $(BUILD_LIB) $(BUILD_OBJ)
 
@@ -82,6 +83,11 @@ $(BUILD_OBJ)/%.o:$(SOURCE_DIR)/%.cpp $(H
 $(LIBRARY):$(LIBOBJS)
 	ar rcs $@ $(LIBOBJS)
 
+$(LIBRARY_SHARED):$(LIBOBJS)
+	$(MY_CXX) -shared -Wl,-soname,libgbwt.so.1 $(LDFLAGS) $(CXXFLAGS) $(CXX_FLAGS) -o $@ $(LIBOBJS) $(LIBS)
+	ln -sf $(notdir $@) $(BUILD_LIB)/libgbwt.so.1
+	ln -sf libgbwt.so.1 $(BUILD_LIB)/libgbwt.so
+
 $(BUILD_BIN)/%:$(BUILD_OBJ)/%.o $(LIBRARY)
 	$(MY_CXX) $(LDFLAGS) $(CPPFLAGS) $(CXXFLAGS) $(CXX_FLAGS) -o $@ $< $(LIBRARY) $(LIBS)
 
