+ New

utensil

Public
← utensil / Makefile
CFLAGS ?= -std=c99 -Wall -Wextra -g -O2
LDFLAGS ?= -lm

METAL := $(shell test -d /System/Library/Frameworks/Metal.framework && echo 1 || echo 0)
ifeq ($(METAL),1)
	CFLAGS += -DACCELERATE_NEW_LAPACK
	LDFLAGS += -framework Metal -framework MetalPerformanceShaders -framework MetalPerformanceShadersGraph -framework Foundation -framework Accelerate
endif

test:
	$(CC) $(CFLAGS) test.c -o test $(LDFLAGS)
	./test

MNIST_URL := https://ossci-datasets.s3.amazonaws.com/mnist
MNIST_FILES := train-images-idx3-ubyte train-labels-idx1-ubyte t10k-images-idx3-ubyte t10k-labels-idx1-ubyte

mnist/%-ubyte:
	mkdir -p mnist
	curl -sL $(MNIST_URL)/$*-ubyte.gz -o mnist/$*-ubyte.gz
	gunzip -f mnist/$*-ubyte.gz

mnist-data: $(addprefix mnist/,$(MNIST_FILES))

CIFAR_URL := https://github.com/xbash/cifar-dataset-mirror/raw/refs/heads/main/cifar-10-binary.tar.gz

cifar/data_batch_1.bin:
	mkdir -p cifar
	curl -sL $(CIFAR_URL) -o cifar/cifar-10-binary.tar.gz
	tar xzf cifar/cifar-10-binary.tar.gz -C cifar --strip-components=1
	rm -f cifar/cifar-10-binary.tar.gz

cifar-data: cifar/data_batch_1.bin

SC_URL := http://download.tensorflow.org/data/speech_commands_v0.02.tar.gz

speech_commands/testing_list.txt:
	mkdir -p speech_commands
	curl -sL $(SC_URL) -o speech_commands/speech_commands_v0.02.tar.gz
	tar xzf speech_commands/speech_commands_v0.02.tar.gz -C speech_commands
	rm -f speech_commands/speech_commands_v0.02.tar.gz

speech-commands-data: speech_commands/testing_list.txt

EXAMPLES := $(patsubst %.c,%,$(wildcard examples/*.c))
MNIST_EXAMPLES := examples/mnist_mlp examples/mnist_cnn
CIFAR_EXAMPLES := examples/resnet8_cifar10 examples/mobilenetv1_cifar10
LSTM_EXAMPLES := examples/lstm_kws

examples: $(EXAMPLES)

examples/%: examples/%.c utensil.h
	$(CC) $(CFLAGS) -I. $< -o $@ $(LDFLAGS)

$(MNIST_EXAMPLES): examples/mnist_loader.h mnist-data
$(CIFAR_EXAMPLES): examples/cifar10_loader.h cifar-data
$(LSTM_EXAMPLES): examples/speech_commands_loader.h speech-commands-data

.PHONY: test examples mnist-data cifar-data speech-commands-data