Repository navigation
Expand file tree
/
Copy pathMakefile
More file actions
114 lines (88 loc) · 2.68 KB
/
Copy pathMakefile
File metadata and controls
114 lines (88 loc) · 2.68 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
# This Makefile is used for dataset generation, not for compiling the daemon.
# Instead, to build the indexing daemon, use meson (see meson.build).
# -m 0 reserves 0 blocks, so we use the entire image (necessary for the larger datasets).
# -T news optimises for lots of small files (generated files are always 0-length atm).
MKFS_EXT4_FLAGS = -m 0 -T news
MOUNT_FLAGS = -o loop
DATASETS = small medium large
IMAGES = $(DATASETS:%=%.img)
.PHONY: all images mount umount generate wipe regenerate clean-data clean-images
.PHONY: $(DATASETS)
all: $(DATASETS)
########################################
# Image creation:
########################################
.PRECIOUS: %.img
%.img:
dd if=/dev/zero of=$@ bs=1M count=$(SIZE_MB)
mkfs.ext4 $(MKFS_EXT4_FLAGS) $@
small.img: SIZE_MB=256
medium.img: SIZE_MB=512
large.img: SIZE_MB=12288
# We need more inodes for the large dataset
large.img: MKFS_EXT4_FLAGS+=-N 1500000
images: $(IMAGES)
########################################
# Mounting (using stamp file) and unmounting:
########################################
.NOTPARALLEL: data/%/.mounted
data/%/.mounted: | %.img
@mkdir -pv data/$*
@if ! mountpoint -q data/$*; then \
mount -v $(MOUNT_FLAGS) $| data/$*; \
touch $@; \
fi
mount-small: data/small/.mounted
mount-medium: data/medium/.mounted
mount-large: data/large/.mounted
mount: $(DATASETS:%=mount-%)
.NOTPARALLEL: umount-%
umount-%:
@if mountpoint -q data/$*; then \
umount -v data/$*; \
fi
umount: $(DATASETS:%=umount-%)
########################################
# Dataset generation:
########################################
data/%/.generated: | data/%/.mounted
python3 tools/generator/generate_hierarchy.py \
--config tools/generator/generator_config.$*.yaml
@touch $@
generate-small: data/small/.generated
generate-medium: data/medium/.generated
generate-large: data/large/.generated
generate: $(DATASETS:%=generate-%)
# Toplevel targets
small: generate-small
medium: generate-medium
large: generate-large
########################################
# Wiping and regeneration:
########################################
wipe-%:
rm -r data/$*/*
@rm -v data/$*/.generated
wipe: $(DATASETS:%=wipe-%)
regenerate-small: wipe-small generate-small
regenerate-medium: wipe-medium generate-medium
regenerate-large: wipe-large generate-large
regenerate: $(DATASETS:%=regenerate-%)
########################################
# Cleanup:
########################################
clean-images:
@rm -fv $(wildcard $(IMAGES))
clean-data:
@if [ -d data ]; then \
rm -rv data; \
fi
clean: umount clean-data clean-images
# Clean a specific dataset
clean-%: umount-%
@if [ -d data/$* ]; then \
rmdir data/$*; \
fi
@if [ -f $*.img ]; then \
rm -v $*.img; \
fi