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
27 changes: 25 additions & 2 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -10,10 +10,11 @@ on:
# TODO test conan build
jobs:
build:
runs-on: ubuntu-20.04
runs-on: ${{ matrix.os }}
strategy:
fail-fast: true
matrix:
os: [ubuntu-20.04, ubuntu-24.04-arm]
compiler: [ [clang++-19, clang-19, "clang-19 libclang-rt-19-dev"] ]
build: [ Debug, Release, DebugLibdeps ]
include:
Expand All @@ -26,6 +27,11 @@ jobs:
- build: DebugLibdeps
cmake_build_type: Debug
flags: -DPHASAR_DEBUG_LIBDEPS=ON -DBUILD_SHARED_LIBS=ON
exclude:
- os: ubuntu-24.04-arm
build: Debug
- os: ubuntu-24.04-arm
build: DebugLibdeps

continue-on-error: false
steps:
Expand All @@ -41,9 +47,11 @@ jobs:
./utils/InstallAptDependencies.sh --noninteractive tzdata ${{ matrix.compiler[2] }}

- uses: swift-actions/setup-swift@v2
if: matrix.os == 'ubuntu-20.04'
with:
swift-version: "5.8.1"
- name: Building Phasar in ${{ matrix.build }} with ${{ matrix.compiler[0] }}
- name: Building Phasar in ${{ matrix.build }} with ${{ matrix.compiler[0] }} including swift
if: matrix.os == 'ubuntu-20.04'
env:
CXX: ${{ matrix.compiler[0] }}
CC: ${{ matrix.compiler[1] }}
Expand All @@ -58,6 +66,21 @@ jobs:
-G Ninja
ninja -C build

- name: Building Phasar in ${{ matrix.build }} with ${{ matrix.compiler[0] }}
if: matrix.os != 'ubuntu-20.04'
env:
CXX: ${{ matrix.compiler[0] }}
CC: ${{ matrix.compiler[1] }}
shell: bash
run: |
cmake -S . -B build \
-DCMAKE_BUILD_TYPE=${{ matrix.cmake_build_type }} \
-DBUILD_PHASAR_CLANG=OFF \
-DPHASAR_USE_Z3=ON \
${{ matrix.flags }} \
-G Ninja
ninja -C build

- name: Run Unittests
shell: bash
run: |
Expand Down
32 changes: 20 additions & 12 deletions CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -320,18 +320,26 @@ add_llvm()
# Z3 Solver
if(PHASAR_IN_TREE)
set (PHASAR_USE_Z3 OFF)
endif()
if(PHASAR_USE_Z3 AND NOT PHASAR_IN_TREE)
# This z3-version is the same version LLVM requires; however, we cannot just use Z3 via the LLVM interface
# as it lacks some functionality (such as z3::expr::simplify()) that we require
find_package(Z3 4.7.1 REQUIRED)

if(NOT TARGET z3)
add_library(z3 IMPORTED SHARED)
set_property(TARGET z3 PROPERTY
IMPORTED_LOCATION ${Z3_LIBRARIES})
set_property(TARGET z3 PROPERTY
INTERFACE_INCLUDE_DIRECTORIES ${Z3_INCLUDE_DIR})
else()
if(PHASAR_USE_Z3)
# This z3-version is the same version LLVM requires; however, we cannot just use Z3 via the LLVM interface
# as it lacks some functionality (such as z3::expr::simplify()) that we require

# FindZ3.cmake by llvm tries to compile a snippet with Z3 which crashes on arm with sanitizers enabled
set(SAFE_CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS}")
set(CMAKE_CXX_FLAGS "")
find_package(Z3 4.7.1 REQUIRED)
set(CMAKE_CXX_FLAGS "${SAFE_CMAKE_CXX_FLAGS}")

if(Z3_FOUND)
if (NOT TARGET z3)
add_library(z3 IMPORTED SHARED)
set_property(TARGET z3 PROPERTY
IMPORTED_LOCATION ${Z3_LIBRARIES})
set_property(TARGET z3 PROPERTY
INTERFACE_INCLUDE_DIRECTORIES ${Z3_INCLUDE_DIR})
endif()
endif()
endif()
endif()

Expand Down
2 changes: 1 addition & 1 deletion Dockerfile
Original file line number Diff line number Diff line change
Expand Up @@ -21,8 +21,8 @@ RUN --mount=type=bind,source=.,target=/usr/src/phasar,rw \
-DPHASAR_ENABLE_SANITIZERS=ON \
-DBUILD_PHASAR_CLANG=ON \
-DPHASAR_USE_Z3=ON \
-DPHASAR_ALLOW_LTO_IN_RELEASE_BUILD=ON \
-DPHASAR_BUILD_UNITTESTS=$RUN_TESTS \
-DPHASAR_BUILD_IR=$RUN_TESTS \
-DPHASAR_BUILD_OPENSSL_TS_UNITTESTS=OFF \
-G Ninja; \
ninja -C cmake-build/Release install; \
Expand Down
11 changes: 6 additions & 5 deletions bootstrap.sh
Original file line number Diff line number Diff line change
Expand Up @@ -146,7 +146,7 @@ else
# install missing packages if necessary
boostlibnames=("libboost-graph")
additional_boost_libs=()
for boost_lib in ${boostlibnames[@]}; do
for boost_lib in "${boostlibnames[@]}"; do
dpkg -s "$boost_lib${DESIRED_BOOST_VERSION}" >/dev/null 2>&1 ||
dpkg -s "$boost_lib${DESIRED_BOOST_VERSION}.0" >/dev/null 2>&1 ||
additional_boost_libs+=("$boost_lib${DESIRED_BOOST_VERSION}") ||
Expand All @@ -163,7 +163,7 @@ fi

# installing LLVM
tmp_dir=$(mktemp -d "llvm-build.XXXXXXXX" --tmpdir)
./utils/install-llvm.sh "${NUM_THREADS}" "${tmp_dir}" ${LLVM_INSTALL_DIR} ${LLVM_RELEASE}
./utils/install-llvm.sh "${NUM_THREADS}" "${tmp_dir}" "${LLVM_INSTALL_DIR}" ${LLVM_RELEASE}
rm -rf "${tmp_dir}"
echo "dependencies successfully installed"

Expand Down Expand Up @@ -193,7 +193,8 @@ if ${DO_UNIT_TEST}; then
NUM_FAILED_TESTS=0

pushd unittests
for x in $(find . -type f -executable -print); do
mapfile -t files < <(find . -type f -executable)
for x in "${files[@]}"; do
pushd "${x%/*}" && ./"${x##*/}" || { echo "Test ${x} failed."; NUM_FAILED_TESTS=$((NUM_FAILED_TESTS+1)); };
popd;
done
Expand All @@ -206,13 +207,13 @@ fi

if ${DO_INSTALL}; then
echo "install phasar..."
sudo cmake -DCMAKE_INSTALL_PREFIX=${PHASAR_INSTALL_DIR} -P cmake_install.cmake
sudo cmake -DCMAKE_INSTALL_PREFIX="${PHASAR_INSTALL_DIR}" -P cmake_install.cmake
sudo ldconfig
safe_cd ..
echo "phasar successfully installed to ${PHASAR_INSTALL_DIR}"

echo "Set environment variables"
./utils/setEnvironmentVariables.sh ${LLVM_INSTALL_DIR} ${PHASAR_INSTALL_DIR}
./utils/setEnvironmentVariables.sh "${LLVM_INSTALL_DIR}" "${PHASAR_INSTALL_DIR}"
fi

echo "done."
24 changes: 23 additions & 1 deletion unittests/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -4,8 +4,30 @@ add_dependencies(PhasarUnitTests LLFileGeneration)

set(PHASAR_UNITTEST_DIR ${CMAKE_CURRENT_BINARY_DIR})

cmake_host_system_information(RESULT cores QUERY NUMBER_OF_LOGICAL_CORES)
set(additional_args -j ${cores})

# ignore flaky tests
if (CMAKE_SYSTEM_NAME STREQUAL "Linux")
execute_process(COMMAND lsb_release -r
OUTPUT_VARIABLE UBUNTU_VERSION
OUTPUT_STRIP_TRAILING_WHITESPACE)
string(REGEX REPLACE "^[^0-9]+([0-9]+)\\.([0-9]+).*" "\\1" UBUNTU_MAJOR_VERSION "${UBUNTU_VERSION}")

if ("${UBUNTU_MAJOR_VERSION}" GREATER 22)
# TODO tests shouldn't be flaky
list(APPEND additional_args -E "\"(LLVMBasedCFGTest|LLVMBasedICFGGlobCtorDtorTest|IDEInstInteractionAnalysisTest|IFDSUninitializedVariablesTest|IDEGeneralizedLCATest|IDEExtendedTaintAnalysisTest)\"")
# LLVMBasedCFGTest.HandlesCppStandardType
# IDEInstInteractionAnalysisTest.HandleBasicTest_04
# IFDSUninitializedVariablesTest.UninitTest_05_SHOULD_NOT_LEAK
# .UninitTest_06_SHOULD_NOT_LEAK
# IDEGeneralizedLCATest.StringTestCpp
# IDEExtendedTaintAnalysisTest.XTaint09
endif()
endif()

add_custom_target(check-phasar-unittests
COMMAND ${CMAKE_CTEST_COMMAND} --progress --output-on-failure -j 8
COMMAND ${CMAKE_CTEST_COMMAND} --progress --output-on-failure ${additional_args}
WORKING_DIRECTORY ${PHASAR_UNITTEST_DIR}
DEPENDS PhasarUnitTests
)
Expand Down
7 changes: 5 additions & 2 deletions utils/InstallAptDependencies.sh
Original file line number Diff line number Diff line change
Expand Up @@ -24,10 +24,10 @@ additional_dependencies=("$@")
packages=("${additional_dependencies[@]}")
packages+=(
git ca-certificates build-essential cmake ninja-build # build
binutils # LTO
"clang-$LLVM_IR_VERSION" # compiler for IR
"libclang-rt-$LLVM_IR_VERSION-dev" # ASAN
libboost-graph-dev libsqlite3-dev libssl-dev zlib1g-dev "libclang-$LLVM_IR_VERSION-dev" "llvm-$LLVM_IR_VERSION-dev" "libclang-common-$LLVM_IR_VERSION-dev" # build deps
libsqlite3-dev libz3-dev libssl-dev "libclang-$LLVM_IR_VERSION-dev" "libclang-common-$LLVM_IR_VERSION-dev" # optional build deps
libboost-graph-dev zlib1g-dev "llvm-$LLVM_IR_VERSION-dev" # build deps
)


Expand Down Expand Up @@ -82,4 +82,7 @@ additional_dependencies=("$@")
"${pkg_mgr[@]}" update
check_if_llvm_apt_is_required
"${pkg_mgr[@]}" install --no-install-recommends -y "${packages[@]}"
if "$noninteractive"; then
"${pkg_mgr[@]}" clean
fi
)