Files
isspam/Makefile
T
retoor 903ff442fc
isspam build / build (push) Successful in 2m58s
feat: add profile-guided optimization build step and aggressive compiler flags to Makefile
- Replace basic -O3 with -Ofast and add PGO instrumentation (fprofile-generate) and usage (fprofile-use) stages in the default 'build' target
- Introduce new 'build_quick' target for compilation without PGO
- Add numerous performance-oriented flags: fipa-pta, fipa-cp-clone, fdevirtualize-speculatively, fno-plt, fno-semantic-interposition, fomit-frame-pointer, fmerge-all-constants, fno-stack-protector, DNDEBUG, and floating-point relaxation flags
- Update linker flags to use flto=auto and fuse-linker-plugin
- Include training runs on spam, not_spam, and optional books directories during PGO instrumentation phase
2026-02-03 09:55:16 +00:00

105 lines
3.1 KiB
Makefile

CC = gcc
CFLAGS = -Ofast -march=native -mtune=native -flto=auto -fuse-linker-plugin \
-funroll-all-loops -finline-functions -finline-limit=10000 \
-fprefetch-loop-arrays -ftracer -fmodulo-sched \
-fmodulo-sched-allow-regmoves -fgcse-sm -fgcse-las \
-ftree-loop-distribution -ftree-loop-im -ftree-loop-ivcanon \
-fivopts -fvariable-expansion-in-unroller -fvect-cost-model=unlimited \
-fipa-pta -fipa-cp-clone -fdevirtualize-speculatively \
-fno-plt -fno-semantic-interposition -fomit-frame-pointer \
-fmerge-all-constants -fno-stack-protector -DNDEBUG \
-fno-trapping-math -fno-signed-zeros -freciprocal-math \
-mavx2 -mfma -mbmi2 -mlzcnt -mpopcnt \
-pthread
all: build run valgrind build_risspam run_risspam build_cpp build_borded_cpp build_py build_jest
build:
@echo "Building retoor_c with PGO..."
@rm -rf pgo_data && mkdir -p pgo_data
@$(CC) $(CFLAGS) -fprofile-dir=pgo_data -fprofile-generate retoor_c/isspam.c -o isspam
@./isspam ./spam/*.txt > /dev/null 2>&1 || true
@./isspam ./not_spam/*.txt > /dev/null 2>&1 || true
@[ -d books ] && ./isspam ./books/*.txt > /dev/null 2>&1 || true
@$(CC) $(CFLAGS) -fprofile-dir=pgo_data -fprofile-use -fprofile-correction retoor_c/isspam.c -o isspam
@rm -rf pgo_data
build_quick:
@echo "Compiling retoor_c project (no PGO)."
@$(CC) $(CFLAGS) retoor_c/isspam.c -o isspam
build_py:
@echo "Copying py file"
@cp retoor_c/isspam.py isspam.py
build_cpp:
@echo "Compiling C++ version of isspam."
@g++ -Ofast retoor_c/isspam.cpp -o isspam_cpp
build_borded_cpp:
@echo "Compiling Borded C++ version of isspam."
@g++ -std=c++23 -Ofast borded_cpp/src/main3.cpp -o borded_cpp_exec
build_risspam:
@echo "Compiling 12bitfloat_risspam project."
cd 12bitfloat_rust/risspam && cargo build --release && cp target/release/risspam ../../
build_jest:
@echo "compiling jest_rust project"
cd jest_rust && cargo build --release && cp target/release/jisspam ..
build_swift:
@echo "Compiling Swift version of isspam."
cd swift_isspam && swift build -c release && cp .build/release/sisspam ../
build_all: build build_py build_cpp build_borded_cpp build_risspam build_jest build_swift
run: run_spam wl run_not_spam
run_risspam: run_spam_risspam run_not_spam_risspam
bench_rust: build_risspam benchmark_only
bench_rust_only: build_risspam
cd 12bitfloat_rust/risspam && time ./target/release/risspam ../../books/*.txt
format:
clang-format *.c *.h -i
wl:
@echo ""
run_spam:
@./isspam ./spam/*.txt
run_not_spam:
@./isspam ./not_spam/*.txt
run_spam_risspam:
@./risspam ./spam/*.txt
run_not_spam_risspam:
@./risspam ./not_spam/*.txt
valgrind: build
valgrind ./isspam ./spam/*.txt
publish:
@wget https://retoor.molodetz.nl/api/packages/retoor/generic/env.py/1.0.0/env.py --quiet
@wget https://retoor.molodetz.nl/api/packages/retoor/generic/publish/1.0.0/publish --quiet
@chmod +x publish
@./publish isspam
@./publish risspam
@./publish sisspam
@rm publish
@rm env.py
benchmark:
-@rm -rf books
@echo "Extracting books."
@tar -xzf books.tar.gz books/
@echo "Extracted books."
@python bench.py
# Skip extracting books over and over
benchmark_only:
@python bench.py