Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
81 changes: 81 additions & 0 deletions .github/workflows/main.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,81 @@
name: Build and Test Workflow

on:
push:
branches: [main]
pull_request:
branches: [main]

jobs:
build-and-test:
runs-on: ubuntu-latest
steps:
# Checkout your own repo
- uses: actions/checkout@v4

# Install dependencies
- name: Install dependencies
run: |
sudo apt update
sudo apt install -y git build-essential cmake ninja-build

# Always clone llvm-project repo (needed even if build is cached)
- name: Clone LLVM Project
run: |
git clone --depth 100 -b merge-functions-pass https://github.com/Casperento/llvm-project.git llvm-project

# Cache the LLVM *build* directory
- name: Cache LLVM 17 build
id: cache-llvm-17-build
uses: actions/cache@v4
with:
path: llvm-project/build
key: llvm-17-build-${{ runner.os }}-${{ hashFiles('llvm-project/llvm/CMakeLists.txt') }}
restore-keys: |
llvm-17-build-${{ runner.os }}-

# Only build LLVM if the cache was not hit
- name: Build LLVM 17
if: steps.cache-llvm-17-build.outputs.cache-hit != 'true'
run: |
mkdir -p llvm-project/build
cmake -G Ninja \
-DLLVM_ENABLE_PROJECTS='clang;compiler-rt;lld' \
-DCMAKE_BUILD_TYPE=Release \
-DLLVM_TARGETS_TO_BUILD=X86 \
-DLLVM_ENABLE_ASSERTIONS=On \
-S llvm-project/llvm \
-B llvm-project/build
cmake --build llvm-project/build

# Force build save
- name: Save LLVM build
if: always()
uses: actions/cache/save@v4
with:
path: llvm-project/build
key: llvm-17-build-${{ runner.os }}-${{ hashFiles('llvm-project/llvm/CMakeLists.txt') }}

# Add LLVM to PATH
- name: Add LLVM to PATH
run: echo "${{ github.workspace }}/llvm-project/build/bin" >> $GITHUB_PATH

# Debug Environment
- name: Debug environment
run: |
uname -a
clang --version
llvm-config --version

# Build your own project (Daedalus)
- name: Build Daedalus
run: |
mkdir -p build
cmake -G Ninja \
-DLLVM_DIR=${{ github.workspace }}/llvm-project/build/lib/cmake/llvm \
-S . -B build
cmake --build build

# Run tests
- name: Run tests with ctest
run: ctest --rerun-failed --output-on-failure --test-dir build
15 changes: 14 additions & 1 deletion tests/test-runner.sh
Original file line number Diff line number Diff line change
Expand Up @@ -46,10 +46,23 @@ remove_old_file "$TRANSFORMATIONLOGFILE"
remove_old_file "$ORIGINAL_EXECUTABLE"
remove_old_file "$FINAL_EXECUTABLE"

echo "clang $EXTRAPARAMS -Os -flto -fuse-ld=lld -Wl,--plugin-opt=-lto-embed-bitcode=post-merge-pre-opt \"$SOURCEFILENAME\" -o \"$ORIGINAL_EXECUTABLE\""
clang $EXTRAPARAMS -Os -flto -fuse-ld=lld -Wl,--plugin-opt=-lto-embed-bitcode=post-merge-pre-opt "$SOURCEFILENAME" -o "$ORIGINAL_EXECUTABLE"

echo "llvm-objcopy --dump-section .llvmbc=\"$SOURCEFILENAMELL\" \"$ORIGINAL_EXECUTABLE\""
llvm-objcopy --dump-section .llvmbc="$SOURCEFILENAMELL" "$ORIGINAL_EXECUTABLE"

echo "opt -S -passes=mem2reg,lcssa,break-crit-edges \"$SOURCEFILENAMELL\" -o \"$SOURCEFILENAMELL\""
opt -S -passes=mem2reg,lcssa,break-crit-edges "$SOURCEFILENAMELL" -o "$SOURCEFILENAMELL"
opt -stats -debug-only=daedalus,ProgramSlice -passes=daedalus -load-pass-plugin="$SHAREDOBJECTFILE" -dump-dot -S "$SOURCEFILENAMELL" -o "$SOURCEFILENAMEDLL" &>> "$TRANSFORMATIONLOGFILE"

echo "opt -stats -debug-only=daedalus,ProgramSlice -passes=daedalus -load-pass-plugin=\"$SHAREDOBJECTFILE\" -dump-dot -S \"$SOURCEFILENAMELL\" -o \"$SOURCEFILENAMEDLL\" &>> \"$TRANSFORMATIONLOGFILE\""
if ! opt -stats -debug-only=daedalus,ProgramSlice -passes=daedalus -load-pass-plugin="$SHAREDOBJECTFILE" -dump-dot -S "$SOURCEFILENAMELL" -o "$SOURCEFILENAMEDLL" &>> "$TRANSFORMATIONLOGFILE"; then
echo "opt exited with error code $?"
echo "Dumping last 50 lines of the transformation log file:"
tail --lines 50 "$TRANSFORMATIONLOGFILE"
fi

echo "clang $EXTRAPARAMS -Os \"$SOURCEFILENAMEDLL\" -o \"$FINAL_EXECUTABLE\""
clang $EXTRAPARAMS -Os "$SOURCEFILENAMEDLL" -o "$FINAL_EXECUTABLE"

if [ -e "$FINAL_EXECUTABLE" ]; then
Expand Down
1 change: 0 additions & 1 deletion tests/test4.cargs

This file was deleted.

26 changes: 0 additions & 26 deletions tests/test4.cpp

This file was deleted.

Loading