Index: CMakeLists.txt =================================================================== --- CMakeLists.txt +++ CMakeLists.txt @@ -158,17 +158,56 @@ INCLUDE_DIRECTORIES( ${CUDALIB_INCLUDE_DIR} ) endif(CUDALIB_FOUND) +option(POLLY_USE_EXTERNAL_ISL "Use a system libisl version" OFF) +if (POLLY_USE_EXTERNAL_ISL) + find_package(PkgConfig REQUIRED) + pkg_search_module(SYSTEM_ISL isl) + if (NOT SYSTEM_ISL_FOUND EQUAL 1) + message(FATAL_ERROR "No libisl found on this system. Consider setting PKG_CONFIG_PATH.") + endif() + message(STATUS "Using external libisl in: ${SYSTEM_ISL_PREFIX}") + + add_library(SystemISL INTERFACE IMPORTED) + foreach (incl IN LISTS SYSTEM_ISL_INCLUDE_DIRS) + set_property(TARGET SystemISL APPEND PROPERTY INTERFACE_INCLUDE_DIRECTORIES ${incl}) + endforeach() + foreach (libname IN LISTS SYSTEM_ISL_LIBRARIES) + if (SYSTEM_ISL_LIBRARY_DIRS) + foreach (dir IN LISTS SYSTEM_ISL_LIBRARY_DIRS) + list(APPEND hints ${dir}) + endforeach() + list(APPEND hints NO_DEFAULT_PATH) + endif() + find_library(lib NAMES ${libname} ${hints}) + set_property(TARGET SystemISL APPEND PROPERTY INTERFACE_LINK_LIBRARIES ${lib}) + endforeach() + foreach (opt IN LISTS SYSTEM_ISL_CFLAGS SYSTEM_CFLAGS_OTHER) + set_property(TARGET SystemISL APPEND PROPERTY INTERFACE_COMPILE_OPTIONS ${opt}) + endforeach() + + set(ISL_TARGET SystemISL) +else() + set(ISL_TARGET PollyISL) +endif() + include_directories( BEFORE ${CMAKE_CURRENT_SOURCE_DIR}/include ${CMAKE_CURRENT_SOURCE_DIR}/lib/JSON/include - ${CMAKE_CURRENT_BINARY_DIR}/lib/External/isl/include - ${CMAKE_CURRENT_SOURCE_DIR}/lib/External/isl/include ${CMAKE_CURRENT_SOURCE_DIR}/lib/External/pet/include ${CMAKE_CURRENT_SOURCE_DIR}/lib/External ${CMAKE_CURRENT_BINARY_DIR}/include ) +if (POLLY_USE_EXTERNAL_ISL) + include_directories(${SYSTEM_ISL_INCLUDE_DIRS}) +else() + include_directories( + ${CMAKE_CURRENT_BINARY_DIR}/lib/External/isl/include + ${CMAKE_CURRENT_SOURCE_DIR}/lib/External/isl/include + ) +endif() + if (NOT LLVM_INSTALL_TOOLCHAIN_ONLY) install(DIRECTORY include/ DESTINATION include Index: lib/CMakeLists.txt =================================================================== --- lib/CMakeLists.txt +++ lib/CMakeLists.txt @@ -65,7 +65,7 @@ target_link_libraries(Polly PollyPPCG) endif (GPU_CODEGEN) -target_link_libraries(Polly PollyISL) +target_link_libraries(Polly ${ISL_TARGET}) if (BUILD_SHARED_LIBS) target_link_libraries(Polly Index: lib/External/CMakeLists.txt =================================================================== --- lib/External/CMakeLists.txt +++ lib/External/CMakeLists.txt @@ -1,4 +1,5 @@ # External: Integer Set Library +if (NOT POLLY_USE_EXTERNAL_ISL) set(ISL_SOURCE_DIR "${CMAKE_CURRENT_SOURCE_DIR}/isl") set(ISL_BINARY_DIR "${CMAKE_CURRENT_BINARY_DIR}/isl") @@ -288,6 +289,7 @@ # ISL requires at least C99 to compile. gcc < 5.0 use -std=gnu89 as default. target_enable_c99(PollyISL) target_enable_c99(polly-isl-test) +endif (NOT POLLY_USE_EXTERNAL_ISL) set(PET_SOURCE_DIR "${CMAKE_CURRENT_SOURCE_DIR}/pet") set(PPCG_SOURCE_DIR "${CMAKE_CURRENT_SOURCE_DIR}/ppcg") @@ -335,7 +337,7 @@ ${PPCG_FILES} ) -target_link_libraries(PollyPPCG PollyISL) +target_link_libraries(PollyPPCG ${ISL_TARGET}) # Disable warnings for upstream projects. if (MSVC) @@ -346,13 +348,16 @@ -wd4201 # nonstandard extension used: nameless struct/union -wd4334 # 'operator': result of 32-bit shift implicitly converted to 64 bits (was 64-bit shift intended?) ) - target_compile_options(PollyISL PRIVATE ${DISABLE_WARNING_FLAGS}) - target_compile_options(polly-isl-test PRIVATE ${DISABLE_WARNING_FLAGS}) + if (NOT POLLY_USE_EXTERNAL_ISL) + target_compile_options(PollyISL PRIVATE ${DISABLE_WARNING_FLAGS}) + target_compile_options(polly-isl-test PRIVATE ${DISABLE_WARNING_FLAGS}) + endif (NOT POLLY_USE_EXTERNAL_ISL) target_compile_options(PollyPPCG PRIVATE ${DISABLE_WARNING_FLAGS}) else () - set_target_properties(PollyISL polly-isl-test PollyPPCG PROPERTIES - COMPILE_FLAGS "-w" - ) + if (NOT POLLY_USE_EXTERNAL_ISL) + set_target_properties(PollyISL polly-isl-test PROPERTIES COMPILE_FLAGS "-w") + endif (NOT POLLY_USE_EXTERNAL_ISL) + set_target_properties(PollyPPCG PROPERTIES COMPILE_FLAGS "-w") endif () if(MSVC) Index: test/CMakeLists.txt =================================================================== --- test/CMakeLists.txt +++ test/CMakeLists.txt @@ -20,7 +20,9 @@ # We are building polly out of tree, adjust the settings. # FIXME: FileCheck is not available in llvm install directory at the moment. set(LLVM_LIT ${LLVM_INSTALL_ROOT}/bin/llvm-lit) - set(POLLY_TEST_DEPS LLVMPolly polly-isl-test) + if (NOT POLLY_USE_EXTERNAL_ISL) + set(POLLY_TEST_DEPS LLVMPolly polly-isl-test) + endif (NOT POLLY_USE_EXTERNAL_ISL) if (POLLY_GTEST_AVAIL) list(APPEND POLLY_TEST_DEPS PollyUnitTests) endif () @@ -101,21 +103,27 @@ ${CMAKE_CURRENT_SOURCE_DIR}/UnitIsl/lit.site.cfg.in ${CMAKE_CURRENT_BINARY_DIR}/UnitIsl/lit.site.cfg) - add_custom_target(check-polly-isl - command ${LLVM_LIT} - --param polly_site_config=${CMAKE_CURRENT_BINARY_DIR}/UnitIsl/lit.site.cfg - --param build_config=${CMAKE_CFG_INTDIR} - -sv ${POLLY_TEST_EXTRA_ARGS} - ${CMAKE_CURRENT_BINARY_DIR} - DEPENDS polly-isl-test - COMMENT "Running isl unit tests") + + if (NOT POLLY_USE_EXTERNAL_ISL) + add_custom_target(check-polly-isl + command ${LLVM_LIT} + --param polly_site_config=${CMAKE_CURRENT_BINARY_DIR}/UnitIsl/lit.site.cfg + --param build_config=${CMAKE_CFG_INTDIR} + -sv ${POLLY_TEST_EXTRA_ARGS} + ${CMAKE_CURRENT_BINARY_DIR} + DEPENDS polly-isl-test + COMMENT "Running isl unit tests") set_target_properties(check-polly-isl PROPERTIES FOLDER "Polly") + endif (NOT POLLY_USE_EXTERNAL_ISL) endif() else (NOT DEFINED LLVM_MAIN_SRC_DIR) set(LLVM_LIT ${LLVM_TOOLS_BINARY_DIR}/llvm-lit) - set(POLLY_TEST_DEPS llvm-config opt LLVMPolly FileCheck not polly-isl-test) + set(POLLY_TEST_DEPS llvm-config opt LLVMPolly FileCheck not) + if (NOT POLLY_USE_EXTERNAL_ISL) + list(APPEND POLLY_TEST_DEPS polly-isl-test) + endif() if (POLLY_GTEST_AVAIL) list(APPEND POLLY_TEST_DEPS PollyUnitTests) endif () @@ -158,12 +166,14 @@ ${CMAKE_CURRENT_SOURCE_DIR}/UnitIsl/lit.site.cfg.in ${CMAKE_CURRENT_BINARY_DIR}/UnitIsl/lit.site.cfg) - add_lit_testsuite(check-polly-isl "Running isl unit tests only" - ${CMAKE_CURRENT_BINARY_DIR}/UnitIsl - PARAMS polly_site_config=${CMAKE_CURRENT_BINARY_DIR}/UnitIsl/lit.site.cfg - DEPENDS polly-isl-test - ) - set_target_properties(check-polly-isl PROPERTIES FOLDER "Polly") + if (NOT POLLY_USE_EXTERNAL_ISL) + add_lit_testsuite(check-polly-isl "Running isl unit tests only" + ${CMAKE_CURRENT_BINARY_DIR}/UnitIsl + PARAMS polly_site_config=${CMAKE_CURRENT_BINARY_DIR}/UnitIsl/lit.site.cfg + DEPENDS polly-isl-test + ) + set_target_properties(check-polly-isl PROPERTIES FOLDER "Polly") + endif (NOT POLLY_USE_EXTERNAL_ISL) # Run polly-check-format as part of polly-check only if we are compiling with # clang, so clang-format is available.