From 834826c9d7ed4f9abda04d94bf25d4d53760f367 Mon Sep 17 00:00:00 2001 From: Antoine Soulier Date: Thu, 4 Jan 2024 12:11:58 -0800 Subject: [PATCH] make: switch to shared object library --- Makefile | 13 ++++++------- README.md | 14 ++++++++------ fuzz/makefile.mk | 12 ++++++------ tools/makefile.mk | 10 ++++------ 4 files changed, 24 insertions(+), 25 deletions(-) diff --git a/Makefile b/Makefile index 2aada0c..8dd3c1d 100644 --- a/Makefile +++ b/Makefile @@ -48,7 +48,7 @@ lib_list := bin_list := define add-lib - $(eval $(1)_bin ?= $(1).a) + $(eval $(1)_bin ?= $(1).so) $(eval $(1)_bin := $(addprefix $(BIN_DIR)/,$($(1)_bin))) lib_list += $(1) @@ -72,7 +72,6 @@ define set-target $(patsubst %.s,%.o,$(filter %.s,$($(1)_src))) \ $(patsubst %.cc,%.o,$(filter %.cc,$($(1)_src)))) $(eval $(1)_obj := $(addprefix $(BUILD_DIR)/,$($(1)_obj))) - $(eval $(1)_lib := $(foreach lib, $($(1)_lib), $($(lib)_bin))) $($(1)_obj): INCLUDE += $($(1)_include) $($(1)_obj): DEFINE += $($(1)_define) @@ -81,7 +80,6 @@ define set-target -include $($(1)_obj:.o=.d) - $($(1)_bin): $($(1)_lib) $($(1)_bin): $($(1)_obj) $($(1)_bin): $($(1)_dependencies) @@ -138,16 +136,17 @@ $(BUILD_DIR)/%.o: %.cc $(MAKEFILE_DEPS) $(addprefix -I,$(INCLUDE)) \ $(addprefix -D,$(DEFINE)) -MMD -MF $(@:.o=.d) -o $@ +$(LIB): CFLAGS += -fPIC $(LIB): $(MAKEFILE_DEPS) - @echo " AR $(notdir $@)" + @echo " LD $(notdir $@)" $(V)mkdir -p $(dir $@) - $(V)$(AR) rcs $@ $(filter %.o,$^) + $(V)$(LD) $(filter %.o,$^) -shared -o $@ $(BIN): $(MAKEFILE_DEPS) @echo " LD $(notdir $@)" $(V)mkdir -p $(dir $@) - $(V)$(LD) $(filter %.o,$^) $(filter %.a,$^) $(LDFLAGS) \ - $(addprefix -l,$(LDLIBS)) -o $@ + $(V)$(LD) $(filter %.o,$^) \ + $(LDFLAGS) -L $(BIN_DIR) $(addprefix -l,$(LDLIBS)) -o $@ clean: $(V)rm -rf $(BUILD_DIR) diff --git a/README.md b/README.md index 0916572..d183393 100644 --- a/README.md +++ b/README.md @@ -30,7 +30,7 @@ The default toolchain used is GCC. Invoke `make` to build the library. $ make -j ``` -Compiled library `liblc3.a` will be found in `bin` directory. +Compiled library `liblc3.so` will be found in `bin` directory. LC3 Plus features can be selectively disabled : - `LC3_PLUS=0` disable the support of 2.5ms and 5ms frame durations. @@ -81,13 +81,17 @@ file are omitted. In such way you can easly test encoding / decoding loop with : ```sh -$ ./elc3 -b | ./dlc3 > +$ alias elc3="LD_LIBRARY_PATH=`pwd`/bin `pwd`/bin/elc3" +$ alias dlc3="LD_LIBRARY_PATH=`pwd`/bin `pwd`/bin/dlc3" +$ elc3 -b | dlc3 > ``` Adding Linux `aplay` tools, you will be able to instant hear the result : ```sh -$ ./elc3 -b | ./dlc3 | aplay +$ alias elc3="LD_LIBRARY_PATH=`pwd`/bin `pwd`/bin/elc3" +$ alias dlc3="LD_LIBRARY_PATH=`pwd`/bin `pwd`/bin/dlc3" +$ elc3 -b | dlc3 | aplay -D pipewire ``` ## Test @@ -141,8 +145,6 @@ environment. ```sh $ meson build -$ cd build -$ ninja -$ sudo ninja install +$ cd build && meson install ``` diff --git a/fuzz/makefile.mk b/fuzz/makefile.mk index 4c83de2..a8f5311 100644 --- a/fuzz/makefile.mk +++ b/fuzz/makefile.mk @@ -17,8 +17,8 @@ efuzz_src += \ $(FUZZ_DIR)/efuzz.cc -efuzz_lib += liblc3 -efuzz_ldlibs += m +efuzz_ldlibs += lc3 m +efuzz_dependencies += liblc3 $(eval $(call add-bin,efuzz)) @@ -26,8 +26,8 @@ $(eval $(call add-bin,efuzz)) dfuzz_src += \ $(FUZZ_DIR)/dfuzz.cc -dfuzz_lib += liblc3 -dfuzz_ldlibs += m +dfuzz_ldlibs += lc3 m +dfuzz_dependencies += liblc3 $(eval $(call add-bin,dfuzz)) @@ -44,9 +44,9 @@ efuzz dfuzz: CXXFLAGS += $(FUZZER_SANITIZE) efuzz dfuzz: LDFLAGS += $(FUZZER_SANITIZE) dfuzz: - $(V)$(dfuzz_bin) -runs=1000000 + $(V)LD_LIBRARY_PATH=$(BIN_DIR) $(dfuzz_bin) -runs=1000000 efuzz: - $(V)$(efuzz_bin) -runs=1000000 + $(V)LD_LIBRARY_PATH=$(BIN_DIR) $(efuzz_bin) -runs=1000000 fuzz: efuzz dfuzz diff --git a/tools/makefile.mk b/tools/makefile.mk index cc19c29..61d1f97 100644 --- a/tools/makefile.mk +++ b/tools/makefile.mk @@ -19,9 +19,8 @@ elc3_src += \ $(TOOLS_DIR)/lc3bin.c \ $(TOOLS_DIR)/wave.c -elc3_lib += liblc3 -elc3_ldlibs += m -elc3_ldflags += -flto +elc3_ldlibs += lc3 m +elc3_dependencies += liblc3 $(eval $(call add-bin,elc3)) @@ -31,9 +30,8 @@ dlc3_src += \ $(TOOLS_DIR)/lc3bin.c \ $(TOOLS_DIR)/wave.c -dlc3_lib += liblc3 -dlc3_ldlibs += m -elc3_ldflags += -flto +dlc3_ldlibs += lc3 m +dlc3_dependencies += liblc3 $(eval $(call add-bin,dlc3))