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