diff --git a/dtool/Package.cmake b/dtool/Package.cmake index 42758c2702..2990f448cc 100644 --- a/dtool/Package.cmake +++ b/dtool/Package.cmake @@ -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")