--- a/Makefile	2021-04-19 17:10:57.282266311 +0200
+++ b/Makefile	2021-04-19 17:27:25.063629828 +0200
@@ -13,9 +13,9 @@
 # To test with g++ which does stricter type checking:
 #
 ##CC=g++ 
-CFLAGS=-Wall -Winline -DLINUX -DDAVE_LITTLE_ENDIAN
+CFLAGS+=-Wall -Winline
 CTFLAGS=-Wall -Winline -fPID -DLINUX -DDAVE_LITTLE_ENDIAN
-CPPFLAGS=-Wall -Winline -DLINUX -DDAVE_LITTLE_ENDIAN
+CPPFLAGS+=-DLINUX -DDAVE_LITTLE_ENDIAN
 #
 # The following is needed to enable workarounds for statements that do
 # not work on (some?) ARM processors:
@@ -45,7 +45,7 @@
 
 DYNAMIC_PROGRAMS=testMPId testPPId testISO_TCPd
 
-LIBRARIES=libnodave.so 
+LIBRARIES=libnodave.so
 
 
 all: $(PROGRAMS) $(LIBRARIES)
@@ -72,74 +72,74 @@
 testPPI_IBHload.o: nodave.h
 testNLpro.o: benchmark.c nodavesimple.h
 
-testISO_TCP: nodave.o openSocket.o testISO_TCP.o
-	$(CC) $(LDFLAGS) nodave.o openSocket.o testISO_TCP.o -o testISO_TCP
-testISO2: nodave.o openSocket.o testISO2.o
-	$(CC) $(LDFLAGS) nodave.o openSocket.o testISO2.o -o testISO2
-testISO_TCPd: nodave.o openSocket.o testISO_TCP.o
-	$(CC) -lnodave testISO_TCP.o -o testISO_TCPd
-testPPIload: nodave.o setport.o testPPIload.o
-	$(CC) $(LDFLAGS) nodave.o setport.o testPPIload.o -o testPPIload
-testMPI: setport.o testMPI.o nodave.o
-	$(CC) $(LDFLAGS) setport.o nodave.o testMPI.o -o testMPI
-testMPImin: setport.o testMPImin.o nodave.o
-	$(CC) $(LDFLAGS) setport.o nodave.o testMPImin.o -o testMPImin	
-testMPId: setport.o testMPI.o nodave.o
-	$(CC) -lnodave testMPI.o -o testMPId
-testMPIload: nodave.o setport.o testMPIload.o
-	$(CC) $(LDFLAGS) nodave.o setport.o testMPIload.o -o testMPIload
-testMPI_IBHload: nodave.o openSocket.o testMPI_IBHload.o
-	$(CC) $(LDFLAGS) nodave.o openSocket.o testMPI_IBHload.o -o testMPI_IBHload
-testPPI: nodave.o setport.o testPPI.o
-	$(CC) $(LDFLAGS) nodave.o setport.o testPPI.o -o testPPI
-testPPId: nodave.o setport.o testPPI.o
-	$(CC) -lnodave testPPI.o -o testPPId	
-testISO_TCPload: nodave.o openSocket.o testISO_TCPload.o
-	$(CC) $(LDFLAGS) nodave.o openSocket.o testISO_TCPload.o -o testISO_TCPload
-testIBH: openSocket.o testIBH.o nodave.o
-	$(CC) $(LDFLAGS) openSocket.o nodave.o testIBH.o -o testIBH
-testPPI_IBH: openSocket.o testPPI_IBH.o nodave.o
-	$(CC) $(LDFLAGS) openSocket.o nodave.o testPPI_IBH.o -o testPPI_IBH
-testPPI_IBHload: openSocket.o testPPI_IBHload.o nodave.o
-	$(CC) $(LDFLAGS) openSocket.o nodave.o testPPI_IBHload.o -o testPPI_IBHload
-testPPIcpp: nodave.o setport.o testPPIcpp.o
-	$(CC) $(LDFLAGS) nodave.o setport.o testPPIcpp.o -o testPPIcpp
-testMPI2: setport.o testMPI2.o nodave.o nodaveext.o
-	$(CC) $(LDFLAGS) setport.o nodave.o nodaveext.o  testMPI2.o -o testMPI2
-testAS511: setport.o testAS511.o nodave.o
-	$(CC) $(LDFLAGS) setport.o nodave.o testAS511.o -o testAS511
-testUSB: testUSB.o nodave.o usbGlue.o usbGlue.h
-	$(CC) $(LDFLAGS) nodave.o testUSB.o usbGlue.o -lusb -o testUSB
-testNLpro: openSocket.o testNLpro.o nodave.o
-	$(CC) $(LDFLAGS) openSocket.o nodave.o testNLpro.o -o testNLpro
+testISO_TCP: libnodave.so testISO_TCP.o
+	$(CC) $(CFLAGS) $(LDFLAGS) -fPIE testISO_TCP.o -o testISO_TCP -lnodave
+testISO2: libnodave.so testISO2.o
+	$(CC) $(CFLAGS) $(LDFLAGS) -fPIE testISO2.o -o testISO2 -lnodave
+testISO_TCPd: libnodave.so testISO_TCP.o
+	$(CC) $(CFLAGS) $(LDFLAGS) -fPIE -lnodave testISO_TCP.o -o testISO_TCPd -lnodave
+testPPIload: libnodave.so testPPIload.o
+	$(CC) $(CFLAGS) $(LDFLAGS) -fPIE testPPIload.o -o testPPIload -lnodave
+testMPI: testMPI.o libnodave.so
+	$(CC) $(CFLAGS) $(LDFLAGS) -fPIE testMPI.o -o testMPI -lnodave
+testMPImin: testMPImin.o libnodave.so
+	$(CC) $(CFLAGS) $(LDFLAGS) -fPIE testMPImin.o -o testMPImin -lnodave
+testMPId: testMPI.o libnodave.so
+	$(CC) $(CFLAGS) $(LDFLAGS) -fPIE -lnodave testMPI.o -o testMPId -lnodave
+testMPIload: libnodave.so testMPIload.o
+	$(CC) $(CFLAGS) $(LDFLAGS) -fPIE testMPIload.o -o testMPIload -lnodave
+testMPI_IBHload: libnodave.so testMPI_IBHload.o
+	$(CC) $(CFLAGS) $(LDFLAGS) -fPIE testMPI_IBHload.o -o testMPI_IBHload -lnodave
+testPPI: libnodave.so testPPI.o
+	$(CC) $(CFLAGS) $(LDFLAGS) -fPIE testPPI.o -o testPPI -lnodave
+testPPId: libnodave.so testPPI.o
+	$(CC) $(CFLAGS) $(LDFLAGS) -fPIE -lnodave testPPI.o -o testPPId -lnodave
+testISO_TCPload: libnodave.so testISO_TCPload.o
+	$(CC) $(CFLAGS) $(LDFLAGS) -fPIE testISO_TCPload.o -o testISO_TCPload -lnodave
+testIBH: testIBH.o libnodave.so
+	$(CC) $(CFLAGS) $(LDFLAGS) -fPIE testIBH.o -o testIBH -lnodave
+testPPI_IBH: testPPI_IBH.o libnodave.so
+	$(CC) $(CFLAGS) $(LDFLAGS) -fPIE testPPI_IBH.o -o testPPI_IBH -lnodave
+testPPI_IBHload: testPPI_IBHload.o libnodave.so
+	$(CC) $(CFLAGS) $(LDFLAGS) -fPIE testPPI_IBHload.o -o testPPI_IBHload -lnodave
+testPPIcpp: libnodave.so testPPIcpp.o
+	$(CC) $(CFLAGS) $(LDFLAGS) -fPIE testPPIcpp.o -o testPPIcpp -lnodave
+testMPI2: testMPI2.o libnodave.so nodaveext.o
+	$(CC) $(CFLAGS) $(LDFLAGS) -fPIE nodaveext.o testMPI2.o -o testMPI2 -lnodave
+testAS511: testAS511.o libnodave.so
+	$(CC) $(CFLAGS) $(LDFLAGS) -fPIE testAS511.o -o testAS511 -lnodave
+testUSB: testUSB.o libnodave.so usbGlue.o usbGlue.h
+	$(CC) $(CFLAGS) $(LDFLAGS) -fPIE testUSB.o usbGlue.o -lusb -o testUSB -lnodave
+testNLpro: testNLpro.o libnodave.so
+	$(CC) $(CFLAGS) $(LDFLAGS) -fPIE testNLpro.o -o testNLpro -lnodave
 crc: crc.o
-	$(CC) $(LDFLAGS) crc.o -o crc
+	$(CC) $(CFLAGS) $(LDFLAGS) -fPIE crc.o -o crc
 crc3: crc3.o
-	$(CC) $(LDFLAGS) crc3.o -o crc3
-testHTTP: nodave.o openSocket.o testHTTP.o
-	$(CC) $(LDFLAGS) nodave.o openSocket.o testHTTP.o -o testHTTP
+	$(CC) $(CFLAGS) $(LDFLAGS) -fPIE crc3.o -o crc3
+testHTTP: libnodave.so testHTTP.o
+	$(CC) $(CFLAGS) $(LDFLAGS) -fPIE testHTTP.o -o testHTTP -lnodave
 ibhsim9.o: simProperties2.c blocklist.h
-ibhsim9: ibhsim9.o nodave.h nodave.o openSocket.o openSocket.h blocklist.o blocklist2.o setport.o
-	$(CC) -lpthread ibhsim9.o openSocket.o nodave.o blocklist.o blocklist2.o setport.o -o ibhsim9
+ibhsim9: ibhsim9.o nodave.h libnodave.so openSocket.h blocklist.o blocklist2.o
+	$(CC) $(CFLAGS) $(LDFLAGS) -fPIE -lpthread ibhsim9.o blocklist.o blocklist2.o -o ibhsim9 -lnodave
 ibhsim10.o: simProperties2.c blocklist.h
-ibhsim10: ibhsim10.o nodave.h nodave.o openSocket.o openSocket.h blocklist.o blocklist2.o setport.o emulator.o
-	$(CC) -lm -lpthread ibhsim10.o openSocket.o nodave.o blocklist.o blocklist2.o setport.o emulator.o -o ibhsim10
+ibhsim10: ibhsim10.o nodave.h libnodave.so openSocket.h blocklist.o blocklist2.o emulator.o
+	$(CC) $(CFLAGS) $(LDFLAGS) -fPIE -lm -lpthread ibhsim10.o blocklist.o blocklist2.o emulator.o -o ibhsim10 -lnodave
 
 
 
 libnodave.so: nodave.o setport.o openSocket.o
-	$(LD) -shared nodave.o setport.o openSocket.o -o libnodave.so	
+	$(CC) $(CFLAGS) $(LDFLAGS) -fPIC -shared nodave.o setport.o openSocket.o -Wl,-soname,libnodave.so.0 -o libnodave.so.0
 
 #
 # for some reason, -lpthread now has to be at the end of the linker command line...05/17/2013
 #
 ibhsim5.o: simProperties.c
-ibhsim5: ibhsim5.o nodave.h nodave.o openSocket.o openSocket.h
-	$(CC) ibhsim5.o openSocket.o nodave.o -lpthread  -o ibhsim5
-isotest4: isotest4.o openSocket.o nodave.o nodave.h
-	$(CC) $(LDFLAGS) isotest4.o openSocket.o nodave.o $(LIB)  -lpthread  -o isotest4
+ibhsim5: ibhsim5.o nodave.h libnodave.so openSocket.h
+	$(CC) $(CFLAGS) $(LDFLAGS) -fPIE ibhsim5.o -lpthread -o ibhsim5 -lnodave
+isotest4: isotest4.o libnodave.so nodave.h
+	$(CC) $(CFLAGS) $(LDFLAGS) -fPIE isotest4.o $(LIB) -lpthread -o isotest4 -lnodave
 
-clean: 
+clean:
 	rm -f $(DYNAMIC_PROGRAMS)
 	rm -f $(PROGRAMS)
 	rm -f *.o
