Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 4 additions & 0 deletions decoder/build/unix_common/makefile.common
Original file line number Diff line number Diff line change
Expand Up @@ -42,6 +42,10 @@ export LIB_BASE_NAME
LIB_CAPI_NAME=$(LIB_BASE_NAME)_c_api
export LIB_CAPI_NAME

# Optional: build a single C-API shared object that statically links libopencsd.a.
OCSD_CAPI_SINGLE_SO ?= 0
export OCSD_CAPI_SINGLE_SO

# source root directories
export OCSD_LIB_ROOT=$(OCSD_ROOT)/lib

Expand Down
32 changes: 24 additions & 8 deletions decoder/build/unix_common/rctdl_c_api_lib/makefile
Original file line number Diff line number Diff line change
Expand Up @@ -35,7 +35,13 @@ LINKER := $(MASTER_LINKER)
LIB := $(MASTER_LIB)

LIB_NAME = lib$(LIB_CAPI_NAME)
SO_LIB_DEPS= -L$(LIB_TARGET_DIR) -l$(LIB_BASE_NAME)
ifeq ($(OCSD_CAPI_SINGLE_SO),1)
SO_LIB_DEPS := $(LIB_TARGET_DIR)/lib$(LIB_BASE_NAME).a
BASE_LIB_DEP := $(LIB_TARGET_DIR)/lib$(LIB_BASE_NAME).a
else
SO_LIB_DEPS := -L$(LIB_TARGET_DIR) -l$(LIB_BASE_NAME)
BASE_LIB_DEP :=
endif

BUILD_DIR=./$(PLAT_DIR)

Expand All @@ -53,11 +59,6 @@ INST_INC_DST=$(INSTALL_INCLUDE_DIR)/$(LIB_UAPI_INC_DIR)

all: links

links: $(LIB_TARGET_DIR)/$(LIB_NAME).$(SHARED_LIB_SUFFIX).$(SO_MAJOR_VER) $(LIB_TARGET_DIR)/$(LIB_NAME).$(SHARED_LIB_SUFFIX)
.PHONY: links

LIBS:= $(LIB_TARGET_DIR)/$(LIB_NAME).a $(LIB_TARGET_DIR)/$(LIB_NAME).$(SHARED_LIB_SUFFIX).$(SO_VER)

$(LIB_TARGET_DIR):
mkdir -p $(LIB_TARGET_DIR)

Expand All @@ -67,6 +68,19 @@ $(BUILD_DIR):
$(LIB_TARGET_DIR)/$(LIB_NAME).a: $(OBJECTS) | $(BUILD_DIR) $(LIB_TARGET_DIR)
$(LIB) $(ARFLAGS) $(LIB_TARGET_DIR)/$(LIB_NAME).a $(OBJECTS)

ifeq ($(OCSD_CAPI_SINGLE_SO),1)

links: $(LIB_TARGET_DIR)/$(LIB_NAME).a $(LIB_TARGET_DIR)/$(LIB_NAME).$(SHARED_LIB_SUFFIX)

$(LIB_TARGET_DIR)/$(LIB_NAME).$(SHARED_LIB_SUFFIX): $(OBJECTS) $(BASE_LIB_DEP) | $(BUILD_DIR) $(LIB_TARGET_DIR)
$(LINKER) $(LDFLAGS) -shared -o $(LIB_TARGET_DIR)/$(LIB_NAME).$(SHARED_LIB_SUFFIX) -Wl,$(SONAME_FLAG),$(LIB_NAME).$(SHARED_LIB_SUFFIX) $(OBJECTS) $(SO_LIB_DEPS)

else

links: $(LIB_TARGET_DIR)/$(LIB_NAME).$(SHARED_LIB_SUFFIX).$(SO_MAJOR_VER) $(LIB_TARGET_DIR)/$(LIB_NAME).$(SHARED_LIB_SUFFIX)

LIBS:= $(LIB_TARGET_DIR)/$(LIB_NAME).a $(LIB_TARGET_DIR)/$(LIB_NAME).$(SHARED_LIB_SUFFIX).$(SO_VER)

$(LIB_TARGET_DIR)/$(LIB_NAME).$(SHARED_LIB_SUFFIX).$(SO_VER): $(OBJECTS) | $(BUILD_DIR) $(LIB_TARGET_DIR)
$(LINKER) $(LDFLAGS) -shared -o $(LIB_TARGET_DIR)/$(LIB_NAME).$(SHARED_LIB_SUFFIX).$(SO_VER) -Wl,$(SONAME_FLAG),$(LIB_NAME).$(SHARED_LIB_SUFFIX).$(SO_MAJOR_VER) $(OBJECTS) $(SO_LIB_DEPS)

Expand All @@ -76,6 +90,10 @@ $(LIB_TARGET_DIR)/$(LIB_NAME).$(SHARED_LIB_SUFFIX).$(SO_MAJOR_VER): $(LIBS) | $(
$(LIB_TARGET_DIR)/$(LIB_NAME).$(SHARED_LIB_SUFFIX): $(LIB_TARGET_DIR)/$(LIB_NAME).$(SHARED_LIB_SUFFIX).$(SO_MAJOR_VER) | $(LIB_TARGET_DIR)
( cd $(LIB_TARGET_DIR); ln -sf $(LIB_NAME).$(SHARED_LIB_SUFFIX).$(SO_MAJOR_VER) $(LIB_NAME).$(SHARED_LIB_SUFFIX) )

endif

.PHONY: links


##### build rules

Expand Down Expand Up @@ -119,5 +137,3 @@ install_inc:
$(INSTALL) --mode=0644 $(INST_INC_SRC)/c_api/ocsd_c_api_types.h $(INST_INC_DST)/c_api/
$(INSTALL) --mode=0644 $(INST_INC_SRC)/c_api/opencsd_c_api.h $(INST_INC_DST)/c_api/
$(INSTALL) --mode=0644 $(INST_INC_SRC)/c_api/ocsd_c_api_custom.h $(INST_INC_DST)/c_api/


21 changes: 21 additions & 0 deletions decoder/docs/build_libs.md
Original file line number Diff line number Diff line change
Expand Up @@ -172,6 +172,27 @@ This is the `snapshot_parser_lib.lib` library, delivered to the `./tests/lib/win

### Additional Build Options ###

__Single Linux C-API Shared Library__

By default, Linux builds create versioned `libopencsd_c_api.so` libraries and symbolic links.
The C API library also requires `libopencsd.so` at runtime.

To build a single shared library instead, use:

`make OCSD_CAPI_SINGLE_SO=1`

This creates a single, unversioned `libopencsd_c_api.so` by statically linking `libopencsd.a`.
As a result, no versioned libraries or symbolic links are created, and there is no runtime dependency on `libopencsd.so`.

This option is intended for cases where `libopencsd_c_api.so` is copied directly from the build output into another package.

The standard `make install` target continues to install the versioned shared libraries and symlink chain.

This configuration mirrors the Windows delivery model and removes the runtime dependency on `libopencsd.so`.

This option is available only for Unix Makefile builds.


__Library Virtual Address Size__

The ocsd_if_types.h file includes a #define that controls the size of the virtual addresses
Expand Down