# distribution — build/test gate. # # The sx compiler lives in a separate repo; locate it via SX (overridable): # make build SX=/path/to/sx SX ?= /Users/agra/projects/sx/zig-out/bin/sx BUILD_DIR := build # Programs compiled by `make build`: the smoke program and the `dist` # product entry point. Further entry points under src/ get added here as # they land. SMOKE := tests/smoke.sx DIST := src/dist.sx # Vendored SQLite (vendor/sqlite/README.md): one amalgamation, two build # products in two DIRECTORIES — the macOS linker prefers a dylib over an # archive in the same -L directory, and `sx build` must link the static # copy while `sx run` (the test runner) dlopens the dylib. VENDOR_DIR := $(BUILD_DIR)/vendor SQLITE_SRC := vendor/sqlite/sqlite3.c SQLITE_DEFS := -DSQLITE_DQS=0 -DSQLITE_THREADSAFE=0 -DSQLITE_DEFAULT_MEMSTATUS=0 \ -DSQLITE_OMIT_DEPRECATED -DSQLITE_OMIT_SHARED_CACHE \ -DSQLITE_LIKE_DOESNT_MATCH_BLOBS \ -include vendor/sqlite/rename.h $(VENDOR_DIR)/libsqlite3.a: $(SQLITE_SRC) vendor/sqlite/sqlite3.h vendor/sqlite/rename.h @mkdir -p $(VENDOR_DIR) cc $(SQLITE_DEFS) -O2 -c $(SQLITE_SRC) -o $(VENDOR_DIR)/sqlite3.o ar rcs $@ $(VENDOR_DIR)/sqlite3.o $(VENDOR_DIR)/jit/libsqlite3.dylib: $(SQLITE_SRC) vendor/sqlite/sqlite3.h vendor/sqlite/rename.h @mkdir -p $(VENDOR_DIR)/jit cc $(SQLITE_DEFS) -O2 -dynamiclib $(SQLITE_SRC) -o $@ .PHONY: build test publish-example vendor clean vendor: $(VENDOR_DIR)/libsqlite3.a $(VENDOR_DIR)/jit/libsqlite3.dylib # Compile the product sources (and the smoke program) without running. build: vendor @mkdir -p $(BUILD_DIR) $(SX) build -o $(BUILD_DIR)/smoke $(SMOKE) $(SX) build -o $(BUILD_DIR)/dist $(DIST) -L $(VENDOR_DIR) # Run the test runner over every tests/**/*.sx. Exits non-zero on any # failure. Depends on `build` so the CLI acceptance test (tests/cli_*.sx) # finds a fresh `build/dist` to drive. test: build @SX="$(SX)" ./tests/run.sh # End-to-end local publish of examples/dist.json into a fresh .sx-tmp/ # store, emitting the machine-readable JSON result on stdout. Depends on # `build` so build/dist exists; the store is reset first so re-runs don't # collide on the release id. publish-example: build @rm -rf .sx-tmp/publish-example ./$(BUILD_DIR)/dist ci publish --manifest examples/dist.json --local-store .sx-tmp/publish-example --json clean: @rm -rf $(BUILD_DIR)