make: switch to shared object library

This commit is contained in:
Antoine Soulier
2024-01-04 12:11:58 -08:00
parent 570ef0b56b
commit 834826c9d7
4 changed files with 24 additions and 25 deletions

View File

@@ -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)

View File

@@ -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 <in.wav> -b <bitrate> | ./dlc3 > <out.wav>
$ alias elc3="LD_LIBRARY_PATH=`pwd`/bin `pwd`/bin/elc3"
$ alias dlc3="LD_LIBRARY_PATH=`pwd`/bin `pwd`/bin/dlc3"
$ elc3 <in.wav> -b <bitrate> | dlc3 > <out.wav>
```
Adding Linux `aplay` tools, you will be able to instant hear the result :
```sh
$ ./elc3 <in.wav> -b <bitrate> | ./dlc3 | aplay
$ alias elc3="LD_LIBRARY_PATH=`pwd`/bin `pwd`/bin/elc3"
$ alias dlc3="LD_LIBRARY_PATH=`pwd`/bin `pwd`/bin/dlc3"
$ elc3 <in.wav> -b <bitrate> | dlc3 | aplay -D pipewire
```
## Test
@@ -141,8 +145,6 @@ environment.
```sh
$ meson build
$ cd build
$ ninja
$ sudo ninja install
$ cd build && meson install
```

View File

@@ -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

View File

@@ -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))