Makefile 1.6 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253
  1. # Hikvision ISUP client - Raspberry Pi 5 (aarch64) + x86_64 compatible build
  2. UNAME_M := $(shell uname -m)
  3. ARCH ?= $(UNAME_M)
  4. CC ?= gcc
  5. SRCDIR := src
  6. INCDIR := include
  7. BUILD := build
  8. OBJDIR := $(BUILD)/obj-$(ARCH)
  9. TARGET := $(BUILD)/hikvision-isup-client-$(ARCH)
  10. CFLAGS := -std=gnu11 -O2 -Wall -Wextra -Wno-unused-parameter -pthread \
  11. -I$(INCDIR) -D_FILE_OFFSET_BITS=64 -D_GNU_SOURCE
  12. LDFLAGS := -pthread -ldl -lrt -lm
  13. CORE_SRCS := $(SRCDIR)/portable.c $(SRCDIR)/config.c $(SRCDIR)/platform.c \
  14. $(SRCDIR)/stream.c $(SRCDIR)/playback.c $(SRCDIR)/alarm.c $(SRCDIR)/main.c
  15. STUB := $(SRCDIR)/isup_stub.c
  16. CORE_OBJS := $(patsubst $(SRCDIR)/%.c,$(OBJDIR)/%.o,$(CORE_SRCS))
  17. .PHONY: all simulate test run clean dirs
  18. all: dirs $(TARGET)-real
  19. simulate: dirs $(TARGET)-sim
  20. # core objects (shared). -DISUP_SIM only affects the stub via #ifdef, so one
  21. # set of object files works for both builds because non-stub files never
  22. # reference stub-only internals; but to be strict we build sim into separate objs.
  23. $(OBJDIR)/%.o: $(SRCDIR)/%.c
  24. $(CC) $(CFLAGS) -c $< -o $@
  25. $(TARGET)-real: $(CORE_OBJS)
  26. $(CC) $(CFLAGS) -o $@ $^ $(LDFLAGS) -L./libs -lHCNetSDK || \
  27. (echo "real build needs vendor libHCNetSDK in ./libs (Pi5 aarch64)."; echo "use: make simulate"; exit 2)
  28. @echo "REAL build: $@"
  29. $(TARGET)-sim: $(CORE_OBJS) $(OBJDIR)/isup_stub.o
  30. $(CC) $(CFLAGS) -o $@ $^ $(LDFLAGS)
  31. @echo "SIM build: $@"
  32. $(OBJDIR)/isup_stub.o: $(STUB)
  33. $(CC) $(CFLAGS) -DISUP_SIM -c $< -o $@
  34. dirs:
  35. @mkdir -p $(OBJDIR) $(BUILD)
  36. test: simulate
  37. @$(TARGET)-sim -t
  38. run: simulate
  39. @$(TARGET)-sim -c config.ini -s
  40. clean:
  41. @rm -rf build; echo cleaned