# Hikvision ISUP client - Raspberry Pi 5 (aarch64) + x86_64 compatible build UNAME_M := $(shell uname -m) ARCH ?= $(UNAME_M) CC ?= gcc SRCDIR := src INCDIR := include BUILD := build OBJDIR := $(BUILD)/obj-$(ARCH) TARGET := $(BUILD)/hikvision-isup-client-$(ARCH) CFLAGS := -std=gnu11 -O2 -Wall -Wextra -Wno-unused-parameter -pthread \ -I$(INCDIR) -D_FILE_OFFSET_BITS=64 -D_GNU_SOURCE LDFLAGS := -pthread -ldl -lrt -lm CORE_SRCS := $(SRCDIR)/portable.c $(SRCDIR)/config.c $(SRCDIR)/platform.c \ $(SRCDIR)/stream.c $(SRCDIR)/playback.c $(SRCDIR)/alarm.c $(SRCDIR)/main.c STUB := $(SRCDIR)/isup_stub.c CORE_OBJS := $(patsubst $(SRCDIR)/%.c,$(OBJDIR)/%.o,$(CORE_SRCS)) .PHONY: all simulate test run clean dirs all: dirs $(TARGET)-real simulate: dirs $(TARGET)-sim # core objects (shared). -DISUP_SIM only affects the stub via #ifdef, so one # set of object files works for both builds because non-stub files never # reference stub-only internals; but to be strict we build sim into separate objs. $(OBJDIR)/%.o: $(SRCDIR)/%.c $(CC) $(CFLAGS) -c $< -o $@ $(TARGET)-real: $(CORE_OBJS) $(CC) $(CFLAGS) -o $@ $^ $(LDFLAGS) -L./libs -lHCNetSDK || \ (echo "real build needs vendor libHCNetSDK in ./libs (Pi5 aarch64)."; echo "use: make simulate"; exit 2) @echo "REAL build: $@" $(TARGET)-sim: $(CORE_OBJS) $(OBJDIR)/isup_stub.o $(CC) $(CFLAGS) -o $@ $^ $(LDFLAGS) @echo "SIM build: $@" $(OBJDIR)/isup_stub.o: $(STUB) $(CC) $(CFLAGS) -DISUP_SIM -c $< -o $@ dirs: @mkdir -p $(OBJDIR) $(BUILD) test: simulate @$(TARGET)-sim -t run: simulate @$(TARGET)-sim -c config.ini -s clean: @rm -rf build; echo cleaned