Makefile 1.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657
  1. LIB = periphery.a
  2. SRCS = src/gpio.c src/led.c src/pwm.c src/spi.c src/i2c.c src/mmio.c src/serial.c src/version.c
  3. SRCDIR = src
  4. OBJDIR = obj
  5. TEST_PROGRAMS = $(basename $(wildcard tests/*.c))
  6. ###########################################################################
  7. OBJECTS = $(patsubst $(SRCDIR)/%.c,$(OBJDIR)/%.o,$(SRCS))
  8. GPIO_CDEV_SUPPORT := $(shell ! echo "\#include <linux/gpio.h>" | $(CC) -E - >/dev/null 2>&1; echo $$?)
  9. COMMIT_ID := $(shell git describe --abbrev --always --tags --dirty 2>/dev/null || echo "")
  10. OPT ?= -O3
  11. CFLAGS += -std=gnu99 -pedantic
  12. CFLAGS += $(OPT)
  13. CFLAGS += -Wall -Wextra -Wno-stringop-truncation $(DEBUG) -fPIC
  14. CFLAGS += -DPERIPHERY_VERSION_COMMIT=\"$(COMMIT_ID)\" -DPERIPHERY_GPIO_CDEV_SUPPORT=$(GPIO_CDEV_SUPPORT)
  15. LDFLAGS +=
  16. ifdef CROSS_COMPILE
  17. CC = $(CROSS_COMPILE)gcc
  18. AR = $(CROSS_COMPILE)ar
  19. endif
  20. ###########################################################################
  21. .PHONY: all
  22. all: $(LIB)
  23. .PHONY: tests
  24. tests: $(TEST_PROGRAMS)
  25. .PHONY: clean
  26. clean:
  27. rm -rf $(LIB) $(OBJDIR) $(TEST_PROGRAMS)
  28. ###########################################################################
  29. tests/%: tests/%.c $(LIB)
  30. $(CC) $(CFLAGS) $(LDFLAGS) $< $(LIB) -o $@ -lpthread
  31. ###########################################################################
  32. $(OBJECTS): | $(OBJDIR)
  33. $(OBJDIR):
  34. mkdir $(OBJDIR)
  35. $(LIB): $(OBJECTS)
  36. $(AR) rcs $(LIB) $(OBJECTS)
  37. $(OBJDIR)/%.o: $(SRCDIR)/%.c
  38. $(CC) $(CFLAGS) $(LDFLAGS) -c $< -o $@