xref: /openbsd-src/gnu/llvm/clang/bindings/python/tests/CMakeLists.txt (revision 12c855180aad702bbcca06e0398d774beeafb155)
1# Test target to run Python test suite from main build.
2
3# Avoid configurations including '-include' from interfering with
4# our tests by setting CLANG_NO_DEFAULT_CONFIG.
5add_custom_target(check-clang-python
6    COMMAND ${CMAKE_COMMAND} -E env
7            CLANG_NO_DEFAULT_CONFIG=1
8            CLANG_LIBRARY_PATH=$<TARGET_FILE_DIR:libclang>
9            "${Python3_EXECUTABLE}" -m unittest discover
10    DEPENDS libclang
11    WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/..)
12
13set(RUN_PYTHON_TESTS TRUE)
14set_target_properties(check-clang-python PROPERTIES FOLDER "Clang tests")
15
16# Tests require libclang.so which is only built with LLVM_ENABLE_PIC=ON
17if(NOT LLVM_ENABLE_PIC)
18  set(RUN_PYTHON_TESTS FALSE)
19endif()
20
21# Do not try to run if libclang was built with sanitizers because
22# the sanitizer library will likely be loaded too late to perform
23# interception and will then fail.
24# We could use LD_PRELOAD/DYLD_INSERT_LIBRARIES but this isn't
25# portable so its easier just to not run the tests when building
26# with ASan.
27if(NOT LLVM_USE_SANITIZER STREQUAL "")
28  set(RUN_PYTHON_TESTS FALSE)
29endif()
30
31# Tests fail on Windows, and need someone knowledgeable to fix.
32# It's not clear whether it's a test or a valid binding problem.
33if(WIN32)
34  set(RUN_PYTHON_TESTS FALSE)
35endif()
36
37# The Python FFI interface is broken on AIX: https://bugs.python.org/issue38628.
38if(${CMAKE_SYSTEM_NAME} MATCHES "AIX")
39  set(RUN_PYTHON_TESTS FALSE)
40endif()
41
42# AArch64, Hexagon, and Sparc have known test failures that need to be
43# addressed.
44# SystemZ has broken Python/FFI interface:
45# https://reviews.llvm.org/D52840#1265716
46if(${LLVM_NATIVE_ARCH} MATCHES "^(AArch64|Hexagon|Sparc|SystemZ)$")
47  set(RUN_PYTHON_TESTS FALSE)
48endif()
49
50if(RUN_PYTHON_TESTS)
51    set_property(GLOBAL APPEND PROPERTY
52                 LLVM_ALL_ADDITIONAL_TEST_TARGETS check-clang-python)
53endif()
54