Skip to content

Commit 0f88724

Browse files
committed
Add new targets to build a statically and a dynamically linked executable
1 parent 4d99677 commit 0f88724

File tree

1 file changed

+40
-12
lines changed

1 file changed

+40
-12
lines changed

src/Makefile

Lines changed: 40 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,9 @@
1-
CXX=clang++
1+
#CXX=clang++
22
OBJ_DIR = obj
33
TEST_OBJ_DIR=$(OBJ_DIR)/test
44
APP=kanzi
5+
APP_STATIC=$(APP)_static
6+
APP_DYNAMIC=$(APP)_dynamic
57
OS := $(shell uname -s)
68

79
ifeq ($(TCMALLOC_ENABLED), 1)
@@ -16,16 +18,17 @@ endif
1618

1719
ifeq ($(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
2122
else
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
3033
endif
3134

@@ -171,11 +174,27 @@ testCompressedStream: $(LIB_OBJECTS) $(TEST_OBJ_DIR)/TestCompressedStream.o
171174

172175
test: testAPI testBWT testTransforms testEntropyCodec testDefaultBitStream testCompressedStream
173176

174-
# Target for the main application
177+
# Default executable target
175178
kanzi: $(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)
181200
ifeq ($(OS),Windows_NT)
@@ -223,30 +242,39 @@ uninstall:
223242
ifeq ($(OS),Windows_NT)
224243
del /Q $(INSTALL_DIR)\$(APP)$(PROG_SUFFIX)
225244
else
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)
230251
endif
231252

232253
clean:
233254
ifeq ($(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)
238262
else
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)
244272
endif
245273

246274
ifeq ($(OS),Windows_NT)
247-
MKDIR = if not exist $(subst /,\,$(dir $@)) mkdir $(subst /,\,$(dir $@))
275+
MKDIR = if not exist $(subst /,\,$(dir $@)) mkdir $(subst /,\,$(dir $@))
248276
else
249-
MKDIR = mkdir -p $(dir $@)
277+
MKDIR = mkdir -p $(dir $@)
250278
endif
251279

252280
$(OBJ_DIR)/%.o: %.cpp

0 commit comments

Comments
 (0)