Skip to content

CMake files do not respect the LLVM config files from the custom installation #689

@flipreverse

Description

@flipreverse
  • [X ] I have searched open and closed issues for duplicates
  • [ X] I made sure that I am not using an old project version (DO: pull PhASAR, update git submodules, rebuild the project and check if the bug is still there)

Bug description

CMake does not use the include directory of the self-built LLVM/clang.

Steps to reproduce

  • Use an LLVM version greater than 14 due a bug when building it on Debian 12
  • Build steps
    • Run bootstrap.sh
    • Manually
      • CC=/fs/scratch/al/llvm-14/bin/clang CXX=/fs/scratch/al/llvm-14/bin/clang++ cmake -G Ninja -DCMAKE_BUILD_TYPE=Release -DPHASAR_BUILD_UNITTESTS=true /fs/scratch/al/phasar/src
      • cmake --build . -j 1

Actual result: Due to the newer LLVM, the build process aborts. This in turn shows the wrong include dir: -I/usr/lib/llvm-14/include.

/fs/scratch/al/llvm-14/bin/clang++ -DBOOST_ALL_NO_LIB -DBOOST_GRAPH_DYN_LINK -DBOOST_REGEX_DYN_LINK -DPHASAR_BUILD_DIR=\"/fs/scratch/al/phasar/src/build\" -DPHASAR_SRC_DIR=\"/fs/scratch/al/phasar/src\" -D_GNU_SOURCE -D__STDC_CONSTANT_MACROS -D__STDC_FORMAT_MACROS -D__STDC_LIMIT_MACROS -I/usr/lib/llvm-14/include -I/fs/scratch/al/phasar/src/include -I/fs/scratch/al/phasar/src/build/include -I/fs/scratch/al/phasar/src/external/json/include -I/fs/scratch/al/phasar/src/external/json-schema-validator/src -MP -fstack-protector-strong -ffunction-sections -fdata-sections -pipe -Wall -Wextra -Wno-unused-parameter -O3 -DNDEBUG -march=native -fPIC -fvisibility-inlines-hidden -std=c++17 -MD -MT lib/CMakeFiles/phasar.dir/LibPhasar.cpp.o -MF lib/CMakeFiles/phasar.dir/LibPhasar.cpp.o.d -o lib/CMakeFiles/phasar.dir/LibPhasar.cpp.o -c /fs/scratch/al/phasar/src/lib/LibPhasar.cpp

Expected result: The CMake files should honor the custom LLVM installation. The parameter -I/usr/lib/llvm-14/include should be replaced by -I/fs/scratch/al/llvm-14//include.

(Important /fs/scratch/al/llvm-14/ does contain a built of LLVM 17.0.6. The directory name is misleading.)

Context (Environment)

  • phasar: [b796f7d44681514f58a683a3a71ff17c94edb0c1]
  • googletest: [b07f56a]
  • json: [bc889afb4c5bf1c0d8ee29ef35eaaf4c8bef8a5d]
  • json-schema-validator [491ac44026e08f31790f5cacffa62e168bb35e32]

Operating System:

  • [X ] Linux
  • Windows
  • macOS

Build Type:

  • [ X] cmake
  • [ X] bootstrap.sh
  • custom build

Possible solution

The CMake variable LLVM_INCLUDE_DIRS, used in cmake/phasar_macros.cmake:209 shall point to the aforementioned directory.
That variable is set in /fs/scratch/al/llvm-14/lib/cmake/llvm/LLVMConfig.cmake. I assume CMake must use the CMake files for LLVM from /fs/scratch/al/llvm-14/lib/cmake.

Example files

Files:

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions