| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253 |
- # 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
|