freetype2/builds/testing.mk

154 lines
4.9 KiB
Makefile
Raw Normal View History

2023-09-18 08:32:17 +02:00
# Define a few important variables.
2023-06-12 16:44:04 +02:00
FTBENCH_DIR = $(TOP_DIR)/src/tools/ftbench
FTBENCH_SRC = $(FTBENCH_DIR)/ftbench.c
2023-07-14 15:18:00 +02:00
FTBENCH_OBJ = $(OBJ_DIR)/bench.$(SO)
2023-07-24 21:24:33 +02:00
FTBENCH_BIN = $(OBJ_DIR)/bench$E
2023-07-20 13:51:58 +02:00
INCLUDES = $(TOP_DIR)/include
2023-06-12 16:44:04 +02:00
FONTS = $(wildcard $(FTBENCH_DIR)/fonts/*.ttf)
2023-09-18 08:32:17 +02:00
# Define objects.
2023-07-11 23:52:31 +02:00
BASELINE_DIR = $(OBJ_DIR)/baseline/
BENCHMARK_DIR = $(OBJ_DIR)/benchmark/
2023-07-04 15:48:48 +02:00
BASELINE_INFO = $(BASELINE_DIR)info.txt
BENCHMARK_INFO = $(BENCHMARK_DIR)info.txt
HTMLCREATOR_SRC = $(FTBENCH_DIR)/src/tohtml.py
2023-09-12 12:01:57 +02:00
HTMLCREATOR = $(OBJ_DIR)/tohtml.py
2023-07-11 23:52:31 +02:00
HTMLFILE = $(OBJ_DIR)/benchmark.html
2023-06-12 16:44:04 +02:00
2023-09-18 08:32:17 +02:00
# Define flags by default
2023-09-18 13:46:47 +02:00
FTBENCH_FLAG ?= -c 100 -w 10
2023-09-18 08:32:17 +02:00
# Define test fonts all in the fonts folder.
BASELINE = $(addprefix $(BASELINE_DIR), $(notdir $(FONTS:.ttf=.txt)))
BENCHMARK = $(addprefix $(BENCHMARK_DIR), $(notdir $(FONTS:.ttf=.txt)))
2023-07-20 13:51:58 +02:00
FT_INCLUDES := $(OBJ_BUILD) \
2023-09-18 13:46:47 +02:00
$(INCLUDES)
2023-07-20 13:51:58 +02:00
COMPILE = $(CC) $(ANSIFLAGS) \
$(INCLUDES:%=$I%) \
$(CFLAGS)
2023-09-18 08:32:17 +02:00
# Enable C99 for gcc to avoid warnings.
# Note that clang++ aborts with an error if we use `-std=C99',
# so check for `++' in $(CC) also.
2023-07-20 13:51:58 +02:00
ifneq ($(findstring -pedantic,$(COMPILE)),)
ifeq ($(findstring ++,$(CC)),)
COMPILE += -std=c99
endif
endif
FTLIB := $(LIB_DIR)/$(LIBRARY).$A
2023-07-24 09:14:46 +02:00
ifeq ($(PLATFORM),unix)
2023-09-18 08:32:17 +02:00
# `LDFLAGS` comes from the `configure` script (via FreeType's
# `builds/unix/unix-cc.mk`), holding all linker flags necessary to
# link the FreeType library.
2023-07-24 21:24:33 +02:00
LINK_CMD = $(LIBTOOL) --mode=link $(CCraw) \
2023-07-24 09:14:46 +02:00
$(subst /,$(COMPILER_SEP),$(LDFLAGS))
2023-09-18 13:46:47 +02:00
LINK_LIBS = $(subst /,$(COMPILER_SEP),$(FTLIB) $(EFENCE))
2023-07-24 09:14:46 +02:00
else
LINK_CMD = $(CC) $(subst /,$(COMPILER_SEP),$(LDFLAGS))
ifeq ($(PLATFORM),unixdev)
2023-09-18 08:32:17 +02:00
# For the pure `make` call (without using `configure`) we have to add
# all needed libraries manually.
2023-07-24 09:14:46 +02:00
LINK_LIBS := $(subst /,$(COMPILER_SEP),$(FTLIB) $(EFENCE)) \
-lm -lrt -lz -lbz2 -lpthread
LINK_LIBS += $(shell pkg-config --libs libpng)
LINK_LIBS += $(shell pkg-config --libs harfbuzz)
LINK_LIBS += $(shell pkg-config --libs libbrotlidec)
LINK_LIBS += $(shell pkg-config --libs librsvg-2.0)
else
LINK_LIBS = $(subst /,$(COMPILER_SEP),$(FTLIB) $(EFENCE))
endif
endif
2023-09-18 08:32:17 +02:00
# Only on Windows we might fall back on GDI+ for PNG saving
2023-07-24 09:14:46 +02:00
ifeq ($(OS),Windows_NT)
LINK_LIBS += -lgdiplus
endif
2023-09-18 08:32:17 +02:00
####################################################################
#
# POSIX TERMIOS: Do not define if you use OLD U*ix like 4.2BSD.
#
2023-07-24 09:14:46 +02:00
ifeq ($(PLATFORM),unix)
EXTRAFLAGS = $DUNIX $DHAVE_POSIX_TERMIOS
endif
2023-07-20 13:51:58 +02:00
2023-07-24 09:14:46 +02:00
ifeq ($(PLATFORM),unixdev)
EXTRAFLAGS = $DUNIX $DHAVE_POSIX_TERMIOS
endif
2023-07-20 13:51:58 +02:00
INCLUDES := $(subst /,$(COMPILER_SEP),$(FT_INCLUDES))
2023-06-16 22:16:14 +02:00
# Create directories for baseline and benchmark
2023-07-24 09:14:46 +02:00
$(BASELINE_DIR) $(BENCHMARK_DIR):
2023-06-12 16:44:04 +02:00
@mkdir -p $@
2023-09-18 08:32:17 +02:00
# Create ftbench object
2023-09-18 13:46:47 +02:00
$(FTBENCH_OBJ): $(FTBENCH_SRC)
2023-07-24 22:53:12 +02:00
@$(COMPILE) $T$(subst /,$(COMPILER_SEP),$@ $<) $(EXTRAFLAGS)
@echo "Object created."
2023-07-20 13:51:58 +02:00
2023-06-12 16:44:04 +02:00
# Build ftbench
2023-09-18 13:46:47 +02:00
$(FTBENCH_BIN): $(FTBENCH_OBJ)
2023-07-14 15:18:00 +02:00
@echo "Linking ftbench..."
2023-07-24 22:53:12 +02:00
@$(LINK_CMD) $T$(subst /,$(COMPILER_SEP),$@ $<) $(LINK_LIBS)
2023-07-12 00:18:21 +02:00
@echo "Built."
2023-06-12 16:44:04 +02:00
2023-09-18 08:32:17 +02:00
# Copy tohtml.py into objs folder
.PHONY: copy-html-script
copy-html-script:
@cp $(HTMLCREATOR_SRC) $(OBJ_DIR)
@echo "Copied tohtml.py to $(OBJ_DIR)"
2023-06-12 16:44:04 +02:00
# Create a baseline
.PHONY: baseline
2023-06-16 22:16:14 +02:00
baseline: $(FTBENCH_BIN) $(BASELINE_DIR)
2023-07-05 11:59:59 +02:00
@$(RM) -f $(BASELINE)
2023-06-12 16:44:04 +02:00
@echo "Creating baseline..."
2023-07-04 15:48:48 +02:00
@echo "$(FTBENCH_FLAG)" > $(BASELINE_INFO)
@echo "`git -C $(TOP_DIR) rev-parse HEAD`" >> $(BASELINE_INFO)
@echo "`git -C $(TOP_DIR) show -s --format=%ci HEAD`" >> $(BASELINE_INFO)
@echo "`git -C $(TOP_DIR) rev-parse --abbrev-ref HEAD`" >> $(BASELINE_INFO)
2023-07-12 00:18:21 +02:00
@fonts=($(FONTS)); \
total_fonts=$${#fonts[@]}; \
step=0; \
for font in $${fonts[@]}; do \
step=$$((step+1)); \
percent=$$((step * 100 / total_fonts)); \
2023-09-18 13:23:47 +02:00
printf "\nProcessing %d%%..." $$percent; \
2023-07-12 00:18:21 +02:00
$(FTBENCH_BIN) $(FTBENCH_FLAG) "$$font" > $(BASELINE_DIR)$$(basename $$font .ttf).txt; \
done
2023-08-01 16:37:55 +02:00
@echo "Baseline created."
2023-06-12 16:44:04 +02:00
# Benchmark and compare to baseline
.PHONY: benchmark
benchmark: $(FTBENCH_BIN) $(BENCHMARK_DIR) copy-html-script
2023-07-05 11:59:59 +02:00
@$(RM) -f $(BENCHMARK) $(HTMLFILE)
2023-06-12 16:44:04 +02:00
@echo "Creating benchmark..."
2023-07-04 15:48:48 +02:00
@echo "$(FTBENCH_FLAG)" > $(BENCHMARK_INFO)
@echo "`git -C $(TOP_DIR) rev-parse HEAD`" >> $(BENCHMARK_INFO)
@echo "`git -C $(TOP_DIR) show -s --format=%ci HEAD`" >> $(BENCHMARK_INFO)
@echo "`git -C $(TOP_DIR) rev-parse --abbrev-ref HEAD`" >> $(BENCHMARK_INFO)
2023-07-12 00:18:21 +02:00
@fonts=($(FONTS)); \
total_fonts=$${#fonts[@]}; \
step=0; \
for font in $${fonts[@]}; do \
step=$$((step+1)); \
percent=$$((step * 100 / total_fonts)); \
2023-09-18 13:23:47 +02:00
printf "\nProcessing %d%%..." $$percent; \
2023-07-12 00:18:21 +02:00
$(FTBENCH_BIN) $(FTBENCH_FLAG) "$$font" > $(BENCHMARK_DIR)$$(basename $$font .ttf).txt; \
done
2023-07-11 23:52:31 +02:00
@$(PYTHON) $(HTMLCREATOR) $(OBJ_DIR)
2023-08-01 16:37:55 +02:00
@echo "Benchmark results created in file: $(HTMLFILE)"
2023-06-12 16:44:04 +02:00
.PHONY: clean-benchmark
clean-benchmark:
@echo "Cleaning..."
2023-07-14 15:18:00 +02:00
@$(RM) $(FTBENCH_BIN) $(FTBENCH_OBJ)
@$(RM) -rf $(BASELINE_DIR) $(BENCHMARK_DIR) $(HTMLFILE) $(HTMLCREATOR)
2023-07-20 13:51:58 +02:00
@echo "Cleaned"