Browse Source

CMake: change how thirdparty directory is detected

rdb 1 year ago
parent
commit
4da5158b05
1 changed files with 56 additions and 44 deletions
  1. 56 44
      dtool/Package.cmake

+ 56 - 44
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")