| 
 | 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.  | 
 | 5 | +add_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 | + | 
 | 13 | +set(RUN_PYTHON_TESTS TRUE)  | 
 | 14 | +set_target_properties(check-clang-python PROPERTIES FOLDER "Clang/Tests")  | 
 | 15 | + | 
 | 16 | +# Tests require libclang.so which is only built with LLVM_ENABLE_PIC=ON  | 
 | 17 | +if(NOT LLVM_ENABLE_PIC)  | 
 | 18 | +  set(RUN_PYTHON_TESTS FALSE)  | 
 | 19 | +endif()  | 
 | 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.  | 
 | 27 | +if(NOT LLVM_USE_SANITIZER STREQUAL "")  | 
 | 28 | +  set(RUN_PYTHON_TESTS FALSE)  | 
 | 29 | +endif()  | 
 | 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.  | 
 | 33 | +if(WIN32)  | 
 | 34 | +  set(RUN_PYTHON_TESTS FALSE)  | 
 | 35 | +endif()  | 
 | 36 | + | 
 | 37 | +# The Python FFI interface is broken on AIX: https://bugs.python.org/issue38628.  | 
 | 38 | +if(${CMAKE_SYSTEM_NAME} MATCHES "AIX")  | 
 | 39 | +  set(RUN_PYTHON_TESTS FALSE)  | 
 | 40 | +endif()  | 
 | 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  | 
 | 46 | +if(${LLVM_NATIVE_ARCH} MATCHES "^(AArch64|Hexagon|Sparc|SystemZ)$")  | 
 | 47 | +  set(RUN_PYTHON_TESTS FALSE)  | 
 | 48 | +endif()  | 
 | 49 | + | 
 | 50 | +# Tests will fail if cross-compiling for a different target, as tests will try  | 
 | 51 | +# to use the host Python3_EXECUTABLE and make FFI calls to functions in target  | 
 | 52 | +# libraries.  | 
 | 53 | +if(CMAKE_CROSSCOMPILING)  | 
 | 54 | +  # FIXME: Consider a solution that allows better control over these tests in  | 
 | 55 | +  # a crosscompiling scenario. e.g. registering them with lit to allow them to  | 
 | 56 | +  # be explicitly skipped via appropriate LIT_ARGS, or adding a mechanism to  | 
 | 57 | +  # allow specifying a python interpreter compiled for the target that could  | 
 | 58 | +  # be executed using qemu-user.  | 
 | 59 | +  message(WARNING "check-clang-python not added to check-all as these tests fail in a cross-build setup")  | 
 | 60 | +  set(RUN_PYTHON_TESTS FALSE)  | 
 | 61 | +endif()  | 
 | 62 | + | 
 | 63 | +if(RUN_PYTHON_TESTS)  | 
 | 64 | +    set_property(GLOBAL APPEND PROPERTY  | 
 | 65 | +                 LLVM_ALL_ADDITIONAL_TEST_TARGETS check-clang-python)  | 
 | 66 | +endif()  | 
0 commit comments