CMake: change how thirdparty directory is detected

This commit is contained in:
rdb
2024-11-06 11:31:59 +01:00
parent 5caace1cdd
commit 4da5158b05

View File

@@ -1,9 +1,54 @@
set(_thirdparty_dir_default "${PROJECT_SOURCE_DIR}/thirdparty")
if(NOT IS_DIRECTORY "${_thirdparty_dir_default}")
set(_thirdparty_dir_default "")
set(_thirdparty_platform)
if(APPLE)
set(_thirdparty_platform "darwin-libs-a")
elseif(WIN32)
if(CMAKE_SIZEOF_VOID_P EQUAL 8)
set(_thirdparty_platform "win-libs-vc14-x64")
else()
set(_thirdparty_platform "win-libs-vc14")
endif()
elseif(CMAKE_SYSTEM_NAME STREQUAL "Linux")
if(CMAKE_SYSTEM_PROCESSOR STREQUAL "aarch64")
set(_thirdparty_platform "linux-libs-arm64")
elseif(CMAKE_SIZEOF_VOID_P EQUAL 8)
set(_thirdparty_platform "linux-libs-x64")
else()
set(_thirdparty_platform "linux-libs-a")
endif()
elseif(CMAKE_SYSTEM_NAME STREQUAL "FreeBSD")
if(CMAKE_SYSTEM_PROCESSOR STREQUAL "aarch64")
set(_thirdparty_platform "freebsd-libs-arm64")
elseif(CMAKE_SIZEOF_VOID_P EQUAL 8)
set(_thirdparty_platform "freebsd-libs-x64")
else()
set(_thirdparty_platform "freebsd-libs-a")
endif()
elseif(CMAKE_SYSTEM_NAME STREQUAL "Android")
set(_thirdparty_platform "android-libs-${CMAKE_ANDROID_ARCH}")
elseif(CMAKE_SYSTEM_NAME STREQUAL "Emscripten")
set(_thirdparty_platform "emscripten-libs")
elseif(CMAKE_SYSTEM_NAME STREQUAL "WASI")
set(_thirdparty_platform "wasi-libs-${CMAKE_SYSTEM_PROCESSOR}")
endif()
if(CMAKE_SYSTEM_NAME STREQUAL "WASI")
set(_thirdparty_dir_default "")
set(_thirdparty_dir_default "")
if(_thirdparty_platform)
if(IS_DIRECTORY "${PROJECT_SOURCE_DIR}/thirdparty/${_thirdparty_platform}")
set(_thirdparty_dir_default "${PROJECT_SOURCE_DIR}/thirdparty")
else()
message(WARNING
"Ignoring thirdparty directory without ${_thirdparty_platform} subdirectory.")
endif()
endif()
set(THIRDPARTY_DIRECTORY "${_thirdparty_dir_default}" CACHE PATH
@@ -14,6 +59,11 @@ set(THIRDPARTY_DIRECTORY "${_thirdparty_dir_default}" CACHE PATH
set(THIRDPARTY_DLLS)
if(THIRDPARTY_DIRECTORY)
if(NOT _thirdparty_platform)
message(FATAL_ERROR
"You can't use THIRDPARTY_DIRECTORY on this platform. Unset it to continue.")
endif()
# This policy is necessary for PackageName_ROOT variables to be respected
if(POLICY CMP0074)
cmake_policy(GET CMP0074 _policy_cmp0074)
@@ -24,21 +74,14 @@ if(THIRDPARTY_DIRECTORY)
"Your version of CMake is too old; please upgrade or unset THIRDPARTY_DIRECTORY to continue.")
endif()
# Dig up the actual "libs" directory
if(APPLE)
set(_package_dir "${THIRDPARTY_DIRECTORY}/darwin-libs-a")
# Make sure thirdparty has the first shot, not system frameworks
set(CMAKE_FIND_FRAMEWORK LAST)
elseif(WIN32)
if(CMAKE_SIZEOF_VOID_P EQUAL 8)
set(_package_dir "${THIRDPARTY_DIRECTORY}/win-libs-vc14-x64")
file(GLOB _python_dirs "${THIRDPARTY_DIRECTORY}/win-python*-x64")
else()
set(_package_dir "${THIRDPARTY_DIRECTORY}/win-libs-vc14")
file(GLOB _python_dirs "${THIRDPARTY_DIRECTORY}/win-python*")
endif()
@@ -50,37 +93,6 @@ if(THIRDPARTY_DIRECTORY)
set(BISON_ROOT "${THIRDPARTY_DIRECTORY}/win-util")
set(FLEX_ROOT "${THIRDPARTY_DIRECTORY}/win-util")
elseif(CMAKE_SYSTEM_NAME STREQUAL "Linux")
if(CMAKE_SYSTEM_PROCESSOR STREQUAL "aarch64")
set(_package_dir ${THIRDPARTY_DIRECTORY}/linux-libs-arm64)
elseif(CMAKE_SIZEOF_VOID_P EQUAL 8)
set(_package_dir ${THIRDPARTY_DIRECTORY}/linux-libs-x64)
else()
set(_package_dir ${THIRDPARTY_DIRECTORY}/linux-libs-a)
endif()
elseif(CMAKE_SYSTEM_NAME STREQUAL "FreeBSD")
if(CMAKE_SYSTEM_PROCESSOR STREQUAL "aarch64")
set(_package_dir ${THIRDPARTY_DIRECTORY}/freebsd-libs-arm64)
elseif(CMAKE_SIZEOF_VOID_P EQUAL 8)
set(_package_dir ${THIRDPARTY_DIRECTORY}/freebsd-libs-x64)
else()
set(_package_dir ${THIRDPARTY_DIRECTORY}/freebsd-libs-a)
endif()
elseif(CMAKE_SYSTEM_NAME STREQUAL "Android")
set(_package_dir ${THIRDPARTY_DIRECTORY}/android-libs-${CMAKE_ANDROID_ARCH})
else()
message(FATAL_ERROR
"You can't use THIRDPARTY_DIRECTORY on this platform. Unset it to continue.")
endif()
if(NOT EXISTS "${_package_dir}")
message(FATAL_ERROR
"Either your THIRDPARTY_DIRECTORY path does not exist, or it is for the wrong platform.")
endif()
foreach(_Package
@@ -133,7 +145,7 @@ if(THIRDPARTY_DIRECTORY)
endif()
# Set search path
set(${_Package}_ROOT "${_package_dir}/${_package}")
set(${_Package}_ROOT "${THIRDPARTY_DIRECTORY}/${_thirdparty_platform}/${_package}")
# Set up copying DLLs, if necessary
file(GLOB _dlls "${${_Package}_ROOT}/bin/*.dll")