Files
Hanzo AI fe8023d73a docs: precompile Makefile — describe pkg-config fallback accurately
The default `go build ./...` does NOT consult pkg-config; accel's
`ops/code/code_cpu.go` hardcodes the standard install prefixes via
`#cgo` directives. pkg-config is only used when the build tag
`lux_gpu_pkgconfig` is set explicitly, and in that mode the build
hard-fails if pkg-config can't resolve `lux-gpu`.
2026-05-21 18:12:18 -07:00

69 lines
2.3 KiB
Makefile

# Lux precompile build wiring.
#
# accel v1.1.3+ auto-discovers the lux-gpu substrate (libluxgpu_hqc.a
# + lux/gpu/hqc.h headers). The default build does NOT call pkg-config;
# instead, `ops/code/code_cpu.go` hardcodes a list of `#cgo CFLAGS: -I`
# and `#cgo LDFLAGS: -L` directives covering every standard prefix, and
# the compiler/linker silently skip any -I/-L that doesn't exist on the
# host. The default `go build ./...` invocation works without any env
# var as long as ONE of the following has the install:
#
# 1. /usr/local (cmake default prefix); OR
# 2. /opt/homebrew (Homebrew on Apple Silicon); OR
# 3. /opt/homebrew/opt/lux-gpu (keg-only Homebrew); OR
# 4. /usr/local/opt/lux-gpu (Homebrew on Intel Mac); OR
# 5. /opt/lux (canonical Lux prefix); OR
# 6. The Go workspace has luxfi/mlx as a sibling repo with a
# ready-to-link `mlx/build/libluxgpu_hqc.a`.
#
# To target a non-listed install, set LUX_GPU_PREFIX:
#
# LUX_GPU_PREFIX=/opt/custom make ci
#
# That gets fed into CGO_CFLAGS / CGO_LDFLAGS automatically. Power
# users can still set CGO_CFLAGS / CGO_LDFLAGS directly.
#
# pkg-config is only consulted when the build tag `lux_gpu_pkgconfig`
# is set explicitly (`go build -tags=lux_gpu_pkgconfig ./...`). In
# that mode the build FAILS if `pkg-config lux-gpu` does not resolve;
# there is no hardcoded-prefix fallback. The runtime introspector
# `accel.GPUPaths()` also queries pkg-config, but only as a diagnostic.
# Optional override; empty means "use accel's auto-discovery".
LUX_GPU_PREFIX ?=
ifneq ($(LUX_GPU_PREFIX),)
export CGO_CFLAGS += -I$(LUX_GPU_PREFIX)/include
export CGO_LDFLAGS += -L$(LUX_GPU_PREFIX)/lib
endif
export GOWORK := off
.PHONY: build test test-long vet bench clean ci print-env
build:
go build ./...
test:
go test -count=1 -short -timeout 300s ./...
test-long:
go test -count=1 -timeout 600s ./...
vet:
go vet ./...
bench:
go test -bench=. -benchmem -run=^$$ -timeout 600s ./...
ci: vet build test
# Diagnostic: print the resolved cgo env so a debugging dev can see
# what the build will use. With LUX_GPU_PREFIX empty, accel falls
# back to its built-in fallback chain (see accel.GPUPaths()).
print-env:
@echo "LUX_GPU_PREFIX = $(LUX_GPU_PREFIX)"
@echo "CGO_CFLAGS = $(CGO_CFLAGS)"
@echo "CGO_LDFLAGS = $(CGO_LDFLAGS)"
@echo "GOWORK = $(GOWORK)"