Makefile 2.5 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879
  1. # m2SQLITE — GNU Modula-2 bindings for SQLite
  2. GM2 ?= gm2
  3. # Prefer pkg-config when the dev package exists, else fall back to the
  4. # runtime library path (no header needed: the binding links by symbol).
  5. PKGLIBS := $(shell pkg-config --libs sqlite3 2>/dev/null)
  6. ifeq ($(strip $(PKGLIBS)),)
  7. ifneq ($(wildcard /usr/lib/x86_64-linux-gnu/libsqlite3.so.0),)
  8. SQLITELIBS := /usr/lib/x86_64-linux-gnu/libsqlite3.so.0
  9. else
  10. SQLITELIBS := -lsqlite3
  11. endif
  12. else
  13. SQLITELIBS := $(PKGLIBS)
  14. endif
  15. SQLITECFLAGS := $(shell pkg-config --cflags sqlite3 2>/dev/null)
  16. GM2FLAGS ?=
  17. SRC_DIR := src
  18. LIB_DIR := lib
  19. BLD := build
  20. OBJDIR := $(BLD)/objs
  21. OBJS := $(OBJDIR)/SQLiteUtils.o
  22. INCLUDES := -I$(SRC_DIR) -I$(LIB_DIR)
  23. TESTS := test_version test_open test_exec test_prepare test_func test_blob test_codes
  24. EXAMPLES := version hello_db
  25. SHOWCASES := showcase_all
  26. .PHONY: all tests examples showcases clean check local-sqlite
  27. all: tests examples showcases
  28. $(OBJDIR):
  29. mkdir -p $(OBJDIR)
  30. $(BLD)/tests:
  31. mkdir -p $(BLD)/tests
  32. $(BLD)/examples:
  33. mkdir -p $(BLD)/examples
  34. $(OBJDIR)/SQLiteUtils.o: $(LIB_DIR)/SQLiteUtils.mod $(LIB_DIR)/SQLiteUtils.def $(SRC_DIR)/SQLite.def | $(OBJDIR)
  35. $(GM2) $(INCLUDES) $(GM2FLAGS) -c $< -o $@
  36. tests: $(BLD)/tests $(OBJS) $(addprefix $(BLD)/tests/,$(TESTS))
  37. $(BLD)/tests/%: tests/%.mod $(OBJS) | $(BLD)/tests
  38. $(GM2) $(INCLUDES) $(GM2FLAGS) $(SQLITECFLAGS) $< $(OBJS) -o $@ $(SQLITELIBS)
  39. examples: $(BLD)/examples $(OBJS) $(addprefix $(BLD)/examples/,$(EXAMPLES))
  40. $(BLD)/examples/%: examples/%.mod $(OBJS) | $(BLD)/examples
  41. $(GM2) $(INCLUDES) $(GM2FLAGS) $(SQLITECFLAGS) $< $(OBJS) -o $@ $(SQLITELIBS)
  42. $(BLD)/showcases:
  43. mkdir -p $(BLD)/showcases
  44. showcases: $(BLD)/showcases $(OBJS) $(addprefix $(BLD)/showcases/,$(SHOWCASES))
  45. $(BLD)/showcases/%: showcases/%.mod $(OBJS) | $(BLD)/showcases
  46. $(GM2) $(INCLUDES) $(GM2FLAGS) $(SQLITECFLAGS) $< $(OBJS) -o $@ $(SQLITELIBS)
  47. check: tests
  48. ./tests/run_tests.sh
  49. clean:
  50. rm -rf $(BLD)
  51. # Optional: build a local amalgamation from the (git-ignored)
  52. # sqlite-master/ reference tree into build/. Requires tclsh (present)
  53. # and a C compiler; takes a few minutes. After this, link with:
  54. # gm2 ... build/sqlite3.o -lpthread -ldl -lm
  55. local-sqlite:
  56. mkdir -p $(BLD)/sqlite
  57. cd sqlite-master && ./configure --disable-tcl && make sqlite3.c
  58. cp sqlite-master/sqlite3.c sqlite-master/sqlite3.h $(BLD)/sqlite/
  59. rm -f sqlite-master/sqlite3.c sqlite-master/sqlite3.h
  60. cc -O2 -DSQLITE_THREADSAFE=1 -c $(BLD)/sqlite/sqlite3.c -o $(BLD)/sqlite/sqlite3.o