1- CXX =clang++
1+ # CXX=clang++
22OBJ_DIR = obj
33TEST_OBJ_DIR =$(OBJ_DIR ) /test
44APP =kanzi
5+ APP_STATIC =$(APP ) _static
6+ APP_DYNAMIC =$(APP ) _dynamic
57OS := $(shell uname -s)
68
79ifeq ($(TCMALLOC_ENABLED ) , 1)
@@ -16,16 +18,17 @@ endif
1618
1719ifeq ($(OS ) ,Windows_NT)
1820 CXXFLAGS=-c -std=c++11 -Wall -Wextra -O3 -fomit-frame-pointer -fPIC -DNDEBUG -pedantic -march=native -fno-rtti $(CONCURRENCY_FLAG)
19- LDFLAGS=-lpthread -static
20- # LDFLAGS=-static-libgcc -static-libstdc++ -Wl,-Bstatic -lstdc++ -lpthread -Wl,-Bdynamic
21+ LDFLAGS=-lpthread
2122else
2223 ARCH ?= $(shell uname -m)
2324
2425 ifeq ($(ARCH), x86_64)
25- CXXFLAGS=-c -std=c++14 -Wall -Wextra -O3 -fomit-frame-pointer -fPIC -DNDEBUG -pedantic -march=native -fno-rtti $(CONCURRENCY_FLAG)
26+ # CXXFLAGS=-c -std=c++17 -D_LIBCPP_HARDENING_MODE=_LIBCPP_HARDENING_MODE_FAST -fstrict-aliasing -Wall -Wextra -O3 -fomit-frame-pointer -fPIC -DNDEBUG -pedantic -march=native -fno-rtti $(CONCURRENCY_FLAG)
27+ CXXFLAGS=-c -std=c++17 -fstrict-aliasing -Wall -Wextra -O3 -fomit-frame-pointer -fPIC -DNDEBUG -pedantic -march=native -fno-rtti $(CONCURRENCY_FLAG)
2628 else
2729 # CXXFLAGS=-c -std=c++17 -fsanitize=signed-integer-overflow -ftrapv -D_FORTIFY_SOURCE=3 -Wall -Wextra -O3 -fPIC -DNDEBUG -pedantic -fno-rtti $(CONCURRENCY_FLAG)
28- CXXFLAGS=-c -std=c++17 -D_LIBCPP_HARDENING_MODE=_LIBCPP_HARDENING_MODE_FAST -fstrict-aliasing -Wall -Wextra -Wpedantic -Wdeprecated -O3 -fPIC -DNDEBUG -pedantic -fno-rtti $(CONCURRENCY_FLAG)
30+ # CXXFLAGS=-c -std=c++17 -D_LIBCPP_HARDENING_MODE=_LIBCPP_HARDENING_MODE_FAST -fstrict-aliasing -Wall -Wextra -Wpedantic -Wdeprecated -O3 -fPIC -DNDEBUG -pedantic -fno-rtti $(CONCURRENCY_FLAG)
31+ CXXFLAGS=-c -std=c++17 -fstrict-aliasing -Wall -Wextra -Wpedantic -Wdeprecated -O3 -fPIC -DNDEBUG -pedantic -fno-rtti $(CONCURRENCY_FLAG)
2932 endif
3033endif
3134
@@ -171,11 +174,27 @@ testCompressedStream: $(LIB_OBJECTS) $(TEST_OBJ_DIR)/TestCompressedStream.o
171174
172175test : testAPI testBWT testTransforms testEntropyCodec testDefaultBitStream testCompressedStream
173176
174- # Target for the main application
177+ # Default executable target
175178kanzi : $(LIB_OBJECTS ) $(APP_OBJECTS )
176179 $(CXX ) $^ -o ../bin/$@ $(LDFLAGS )
177180
178- all : lib test $(APP )
181+ # Statically linked executable
182+ ifeq ($(OS ) ,Darwin)
183+ # macOS does not support -static => disable static target
184+ kanzi_static :
185+ @echo " Static linking is not supported on macOS"
186+ else
187+ kanzi_static : LDFLAGS += -static-libstdc++ -static-libgcc
188+ kanzi_static : $(LIB_OBJECTS ) $(APP_OBJECTS )
189+ $(CXX ) $^ -o ../bin/kanzi_static$(PROG_SUFFIX ) $(LDFLAGS )
190+ endif
191+
192+ # Dynamically linked executable
193+ kanzi_dynamic : LDFLAGS := $(filter-out -static,$(LDFLAGS ) )
194+ kanzi_dynamic : $(LIB_OBJECTS ) $(APP_OBJECTS )
195+ $(CXX ) $^ -o ../bin/kanzi_dynamic$(PROG_SUFFIX ) $(LDFLAGS )
196+
197+ all : lib test $(APP_STATIC ) $(APP_DYNAMIC )
179198
180199# Install / uninstall (may require sudo or admin rights)
181200ifeq ($(OS ) ,Windows_NT)
@@ -223,30 +242,39 @@ uninstall:
223242ifeq ($(OS ) ,Windows_NT)
224243 del /Q $(INSTALL_DIR)\$(APP)$(PROG_SUFFIX)
225244else
226- rm -f -r $(INSTALL_DIR)/include/kanzi
245+ rm -f -r $(INSTALL_DIR)/include/$(APP)
227246 rm -f $(INSTALL_DIR)/lib/$(STATIC_LIB)
228247 rm -f $(INSTALL_DIR)/lib/$(SHARED_LIB)
248+ rm -f $(INSTALL_DIR)/bin/$(APP_STATIC)$(PROG_SUFFIX)
249+ rm -f $(INSTALL_DIR)/bin/$(APP_DYNAMIC)$(PROG_SUFFIX)
229250 rm -f $(INSTALL_DIR)/bin/$(APP)$(PROG_SUFFIX)
230251endif
231252
232253clean :
233254ifeq ($(OS ) ,Windows_NT)
234- del /S $(OBJ_DIR)\*.o ..\bin\$(APP)$(PROG_SUFFIX) ..\bin\test*$(PROG_SUFFIX) \
255+ del /S $(OBJ_DIR)\*.o
256+ ..\bin\$(APP)$(PROG_SUFFIX) \
257+ ..\bin\$(APP_STATIC)$(PROG_SUFFIX) \
258+ ..\bin\$(APP_DYNAMIC)$(PROG_SUFFIX) ..\bin\test*$(PROG_SUFFIX) \
235259 ..\lib\$(STATIC_LIB) ..\lib\$(SHARED_LIB) \
236260 ..\lib\$(STATIC_COMP_LIB) ..\lib\$(STATIC_DECOMP_LIB) \
237261 ..\lib\$(SHARED_COMP_LIB) ..\lib\$(SHARED_DECOMP_LIB)
238262else
239263 rm -f ../bin/test*$(PROG_SUFFIX) $(OBJECTS) $(RPTS) \
240- ../bin/$(APP)$(PROG_SUFFIX) ../lib/$(STATIC_LIB) ../lib/$(SHARED_LIB) \
264+ ..\bin\$(APP)$(PROG_SUFFIX) \
265+ ..\bin\$(APP_STATIC)$(PROG_SUFFIX) \
266+ ..\bin\$(APP_STATIC)$(PROG_SUFFIX) \
267+ ..\bin\$(APP_DYNAMIC)$(PROG_SUFFIX) \
268+ ../lib/$(STATIC_LIB) ../lib/$(SHARED_LIB) \
241269 ../lib/$(STATIC_COMP_LIB) ../lib/$(STATIC_DECOMP_LIB) \
242270 ../lib/$(SHARED_COMP_LIB) ../lib/$(SHARED_DECOMP_LIB)
243271 rm -rf $(OBJ_DIR)
244272endif
245273
246274ifeq ($(OS ) ,Windows_NT)
247- MKDIR = if not exist $(subst /,\,$(dir $@ ) ) mkdir $(subst /,\,$(dir $@ ) )
275+ MKDIR = if not exist $(subst /,\,$(dir $@ ) ) mkdir $(subst /,\,$(dir $@ ) )
248276else
249- MKDIR = mkdir -p $(dir $@ )
277+ MKDIR = mkdir -p $(dir $@ )
250278endif
251279
252280$(OBJ_DIR ) /% .o : % .cpp
0 commit comments