name: PGO Build
on:
workflow_dispatch:
schedule:
- cron: '0 2 * * 0'
jobs:
pgo-build:
name: Profile-Guided Optimization Build
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v4
- name: Install dependencies
run: |
sudo apt-get update
sudo apt-get install -y gcc make python3
- name: Clean previous builds
run: make clean
- name: Generate profile data
run: make test_benchmark_pgo_gen
- name: Run profiling passes
run: |
./test_benchmark_pgo
./test_benchmark_pgo
./test_benchmark_pgo
- name: Build with PGO
run: |
gcc -Wall -Wextra -std=gnu99 -O3 -march=native -I. -fprofile-use -fprofile-correction \
-o test_benchmark_pgo \
lexer/lexer_tokenizer.c lexer/lexer_keywords.c lexer/lexer_literals.c \
parser/parser.c parser/parser_expressions.c parser/parser_statements.c parser/parser_declarations.c parser/parser_printer.c \
types/types.c \
semantic/symbol_table.c semantic/semantic.c \
ir/ir.c ir/ir_gen.c \
runtime/runtime.c runtime/labeltable.c runtime/methodcache.c runtime/fastframe.c runtime/superinst.c \
tests/test_benchmark.c \
-ldl
- name: Run PGO benchmark
run: ./test_benchmark_pgo
- name: Upload PGO binary
uses: actions/upload-artifact@v4
with:
name: rava-pgo
path: test_benchmark_pgo