diff --git a/CMakeLists.txt b/CMakeLists.txt index f8a30451..fb61f6a6 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -1,4 +1,4 @@ -cmake_minimum_required(VERSION 3.17) +cmake_minimum_required(VERSION 3.20) project(QDP-JIT VERSION 0.1 LANGUAGES CXX;C) include(CheckSymbolExists) @@ -284,25 +284,34 @@ message( STATUS "QDP++: Setting alignment size to ${QDP_ALIGNMENT_SIZE}") check_function_exists("gethostname" HAVE_GETHOSTNAME) check_function_exists("strnlen" HAVE_STRNLEN) +# LLVM's LLVMConfigVersion.cmake is not smart enough to deal with +# Ranges and requires that MAJOR and MINOR version match LLVM's internal +# and that the patch version be more recent than the required patch +# version. +find_package(LLVM CONFIG REQUIRED) if( QDP_ENABLE_LLVM20 ) - find_package(LLVM "20...<21" REQUIRED CONFIG) + set(WANT_LLVM_MAJOR 20) elseif( QDP_ENABLE_LLVM19 ) - find_package(LLVM "19...<20" REQUIRED CONFIG) + set(WANT_LLVM_MAJOR 19) elseif( QDP_ENABLE_LLVM18 ) - find_package(LLVM "18...<19" REQUIRED CONFIG) + set(WANT_LLVM_MAJOR 18) elseif( QDP_ENABLE_LLVM17 ) - find_package(LLVM "17...<18" REQUIRED CONFIG) + set(WANT_LLVM_MAJOR 17) elseif( QDP_ENABLE_LLVM16 ) - find_package(LLVM "16...<17" REQUIRED CONFIG) + set(WANT_LLVM_MAJOR 16) elseif( QDP_ENABLE_LLVM15 ) - find_package(LLVM "15...<16" REQUIRED CONFIG) + set(WANT_LLVM_MAJOR 15) elseif( QDP_ENABLE_LLVM14 ) - find_package(LLVM "14...<15" REQUIRED CONFIG) + set(WANT_LLVM_MAJOR 14) else() - find_package(LLVM "13...<14" REQUIRED CONFIG) + set(WANT_LLVM_MAJOR 13) endif() message(STATUS "Found LLVM ${LLVM_PACKAGE_VERSION}") +if (NOT ${LLVM_VERSION_MAJOR} EQUAL ${WANT_LLVM_MAJOR}) + message(FATAL_ERROR "LLVM Major version mismatch") +endif() + message(STATUS "Using LLVMConfig.cmake in ${LLVM_DIR}") diff --git a/QDPXXConfig.cmake.in b/QDPXXConfig.cmake.in index 5b2ecc25..c8c135bd 100644 --- a/QDPXXConfig.cmake.in +++ b/QDPXXConfig.cmake.in @@ -130,25 +130,36 @@ if("@QIO_DIR@" STREQUAL "") list(APPEND CMAKE_PREFIX_PATH ${CMAKE_CURRENT_LIST_DIR}/../QIO) endif() -# Now find the dependencies +# LLVM's LLVMConfigVersion.cmake is not smart enough to deal with +# Ranges and requires that MAJOR and MINOR version match LLVM's internal +# and that the patch version be more recent than the required patch +# version. +find_dependency(LLVM CONFIG REQUIRED) if( QDP_ENABLE_LLVM20 ) - find_package(LLVM "20...<21" REQUIRED CONFIG) + set(WANT_LLVM_MAJOR 20) elseif( QDP_ENABLE_LLVM19 ) - find_package(LLVM "19...<20" REQUIRED CONFIG) + set(WANT_LLVM_MAJOR 19) elseif( QDP_ENABLE_LLVM18 ) - find_package(LLVM "18...<19" REQUIRED CONFIG) + set(WANT_LLVM_MAJOR 18) elseif( QDP_ENABLE_LLVM17 ) - find_package(LLVM "17...<18" REQUIRED CONFIG) + set(WANT_LLVM_MAJOR 17) elseif( QDP_ENABLE_LLVM16 ) - find_package(LLVM "16...<17" REQUIRED CONFIG) + set(WANT_LLVM_MAJOR 16) elseif( QDP_ENABLE_LLVM15 ) - find_package(LLVM "15...<16" REQUIRED CONFIG) + set(WANT_LLVM_MAJOR 15) elseif( QDP_ENABLE_LLVM14 ) - find_package(LLVM "14...<15" REQUIRED CONFIG) + set(WANT_LLVM_MAJOR 14) else() - find_package(LLVM "13...<14" REQUIRED CONFIG) + set(WANT_LLVM_MAJOR 13) endif() +message(STATUS "Found LLVM ${LLVM_PACKAGE_VERSION}") +if (NOT ${LLVM_VERSION_MAJOR} EQUAL ${WANT_LLVM_MAJOR}) + message(FATAL_ERROR "LLVM Major version mismatch") +endif() + +message(STATUS "Using LLVMConfig.cmake in ${LLVM_DIR}") + find_dependency(XPathReader REQUIRED) find_dependency(FileDB REQUIRED)