deps-windows.cmake 12 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348
  1. # https://cmake.org/cmake/help/latest/variable/MSVC_VERSION.html
  2. if (MSVC_VERSION EQUAL 1800)
  3. # 1800 = VS 12.0 (v120 toolset)
  4. set(DEP_VS_VER "12")
  5. set(DEP_BOOST_TOOLSET "msvc-12.0")
  6. elseif (MSVC_VERSION EQUAL 1900)
  7. # 1900 = VS 14.0 (v140 toolset)
  8. set(DEP_VS_VER "14")
  9. set(DEP_BOOST_TOOLSET "msvc-14.0")
  10. elseif (MSVC_VERSION LESS 1920)
  11. # 1910-1919 = VS 15.0 (v141 toolset)
  12. set(DEP_VS_VER "15")
  13. set(DEP_BOOST_TOOLSET "msvc-14.1")
  14. elseif (MSVC_VERSION LESS 1930)
  15. # 1920-1929 = VS 16.0 (v142 toolset)
  16. set(DEP_VS_VER "16")
  17. set(DEP_BOOST_TOOLSET "msvc-14.2")
  18. else ()
  19. message(FATAL_ERROR "Unsupported MSVC version")
  20. endif ()
  21. if (CMAKE_CXX_COMPILER_ID STREQUAL Clang)
  22. set(DEP_BOOST_TOOLSET "clang-win")
  23. endif ()
  24. if (${DEPS_BITS} EQUAL 32)
  25. set(DEP_MSVC_GEN "Visual Studio ${DEP_VS_VER}")
  26. # set(DEP_PLATFORM "Win32")
  27. else ()
  28. if (DEP_VS_VER LESS 16)
  29. set(DEP_MSVC_GEN "Visual Studio ${DEP_VS_VER} Win64")
  30. else ()
  31. set(DEP_MSVC_GEN "Visual Studio ${DEP_VS_VER}")
  32. set(DEP_PLATFORM "x64")
  33. endif ()
  34. # set(DEP_PLATFORM "x64")
  35. endif ()
  36. if (${DEP_DEBUG})
  37. set(DEP_BOOST_DEBUG "debug")
  38. else ()
  39. set(DEP_BOOST_DEBUG "")
  40. endif ()
  41. ExternalProject_Add(dep_boost
  42. EXCLUDE_FROM_ALL 1
  43. URL "https://dl.bintray.com/boostorg/release/1.70.0/source/boost_1_70_0.tar.gz"
  44. URL_HASH SHA256=882b48708d211a5f48e60b0124cf5863c1534cd544ecd0664bb534a4b5d506e9
  45. BUILD_IN_SOURCE 1
  46. CONFIGURE_COMMAND bootstrap.bat
  47. BUILD_COMMAND b2.exe
  48. -j "${NPROC}"
  49. --with-system
  50. --with-filesystem
  51. --with-thread
  52. --with-log
  53. --with-locale
  54. --with-regex
  55. "--prefix=${DESTDIR}/usr/local"
  56. "address-model=${DEPS_BITS}"
  57. "toolset=${DEP_BOOST_TOOLSET}"
  58. link=static
  59. variant=release
  60. threading=multi
  61. boost.locale.icu=off
  62. "${DEP_BOOST_DEBUG}" release install
  63. INSTALL_COMMAND "" # b2 does that already
  64. )
  65. ExternalProject_Add(dep_tbb
  66. EXCLUDE_FROM_ALL 1
  67. URL "https://github.com/wjakob/tbb/archive/a0dc9bf76d0120f917b641ed095360448cabc85b.tar.gz"
  68. URL_HASH SHA256=0545cb6033bd1873fcae3ea304def720a380a88292726943ae3b9b207f322efe
  69. CMAKE_GENERATOR "${DEP_MSVC_GEN}"
  70. # if (DEP_VS_VER MORE 15)
  71. # CMAKE_GENERATOR_PLATFORM "${DEP_PLATFORM}"
  72. # endif()
  73. CMAKE_ARGS
  74. -DCMAKE_DEBUG_POSTFIX=_debug
  75. -DTBB_BUILD_SHARED=OFF
  76. -DTBB_BUILD_TESTS=OFF
  77. "-DCMAKE_INSTALL_PREFIX:PATH=${DESTDIR}\\usr\\local"
  78. BUILD_COMMAND msbuild /m /P:Configuration=Release INSTALL.vcxproj
  79. INSTALL_COMMAND ""
  80. )
  81. if (${DEP_DEBUG})
  82. ExternalProject_Get_Property(dep_tbb BINARY_DIR)
  83. ExternalProject_Add_Step(dep_tbb build_debug
  84. DEPENDEES build
  85. DEPENDERS install
  86. COMMAND msbuild /m /P:Configuration=Debug INSTALL.vcxproj
  87. WORKING_DIRECTORY "${BINARY_DIR}"
  88. )
  89. endif ()
  90. ExternalProject_Add(dep_gtest
  91. EXCLUDE_FROM_ALL 1
  92. URL "https://github.com/google/googletest/archive/release-1.8.1.tar.gz"
  93. URL_HASH SHA256=9bf1fe5182a604b4135edc1a425ae356c9ad15e9b23f9f12a02e80184c3a249c
  94. CMAKE_GENERATOR "${DEP_MSVC_GEN}"
  95. # if (DEP_VS_VER MORE 15)
  96. # CMAKE_GENERATOR_PLATFORM "${DEP_PLATFORM}"
  97. # endif()
  98. CMAKE_ARGS
  99. -DBUILD_GMOCK=OFF
  100. -Dgtest_force_shared_crt=ON
  101. -DCMAKE_POSITION_INDEPENDENT_CODE=ON
  102. "-DCMAKE_INSTALL_PREFIX:PATH=${DESTDIR}\\usr\\local"
  103. BUILD_COMMAND msbuild /m /P:Configuration=Release INSTALL.vcxproj
  104. INSTALL_COMMAND ""
  105. )
  106. if (${DEP_DEBUG})
  107. ExternalProject_Get_Property(dep_gtest BINARY_DIR)
  108. ExternalProject_Add_Step(dep_gtest build_debug
  109. DEPENDEES build
  110. DEPENDERS install
  111. COMMAND msbuild /m /P:Configuration=Debug INSTALL.vcxproj
  112. WORKING_DIRECTORY "${BINARY_DIR}"
  113. )
  114. endif ()
  115. ExternalProject_Add(dep_cereal
  116. EXCLUDE_FROM_ALL 1
  117. URL "https://github.com/USCiLab/cereal/archive/v1.2.2.tar.gz"
  118. # URL_HASH SHA256=c6dd7a5701fff8ad5ebb45a3dc8e757e61d52658de3918e38bab233e7fd3b4ae
  119. CMAKE_GENERATOR "${DEP_MSVC_GEN}"
  120. CMAKE_GENERATOR_PLATFORM "${DEP_PLATFORM}"
  121. CMAKE_ARGS
  122. -DJUST_INSTALL_CEREAL=on
  123. "-DCMAKE_INSTALL_PREFIX:PATH=${DESTDIR}\\usr\\local"
  124. BUILD_COMMAND msbuild /m /P:Configuration=Release INSTALL.vcxproj
  125. INSTALL_COMMAND ""
  126. )
  127. ExternalProject_Add(dep_nlopt
  128. EXCLUDE_FROM_ALL 1
  129. URL "https://github.com/stevengj/nlopt/archive/v2.5.0.tar.gz"
  130. URL_HASH SHA256=c6dd7a5701fff8ad5ebb45a3dc8e757e61d52658de3918e38bab233e7fd3b4ae
  131. CMAKE_GENERATOR "${DEP_MSVC_GEN}"
  132. # if (DEP_VS_VER MORE 15)
  133. # CMAKE_GENERATOR_PLATFORM "${DEP_PLATFORM}"
  134. # endif()
  135. CMAKE_ARGS
  136. -DBUILD_SHARED_LIBS=OFF
  137. -DNLOPT_PYTHON=OFF
  138. -DNLOPT_OCTAVE=OFF
  139. -DNLOPT_MATLAB=OFF
  140. -DNLOPT_GUILE=OFF
  141. -DCMAKE_POSITION_INDEPENDENT_CODE=ON
  142. -DCMAKE_DEBUG_POSTFIX=d
  143. "-DCMAKE_INSTALL_PREFIX:PATH=${DESTDIR}\\usr\\local"
  144. BUILD_COMMAND msbuild /m /P:Configuration=Release INSTALL.vcxproj
  145. INSTALL_COMMAND ""
  146. )
  147. if (${DEP_DEBUG})
  148. ExternalProject_Get_Property(dep_nlopt BINARY_DIR)
  149. ExternalProject_Add_Step(dep_nlopt build_debug
  150. DEPENDEES build
  151. DEPENDERS install
  152. COMMAND msbuild /m /P:Configuration=Debug INSTALL.vcxproj
  153. WORKING_DIRECTORY "${BINARY_DIR}"
  154. )
  155. endif ()
  156. ExternalProject_Add(dep_zlib
  157. EXCLUDE_FROM_ALL 1
  158. URL "https://zlib.net/zlib-1.2.11.tar.xz"
  159. URL_HASH SHA256=4ff941449631ace0d4d203e3483be9dbc9da454084111f97ea0a2114e19bf066
  160. CMAKE_GENERATOR "${DEP_MSVC_GEN}"
  161. # if (DEP_VS_VER MORE 15)
  162. # CMAKE_GENERATOR_PLATFORM "${DEP_PLATFORM}"
  163. # endif()
  164. CMAKE_ARGS
  165. -DSKIP_INSTALL_FILES=ON # Prevent installation of man pages et al.
  166. "-DINSTALL_BIN_DIR=${CMAKE_CURRENT_BINARY_DIR}\\fallout" # I found no better way of preventing zlib from creating & installing DLLs :-/
  167. -DCMAKE_POSITION_INDEPENDENT_CODE=ON
  168. "-DCMAKE_INSTALL_PREFIX:PATH=${DESTDIR}\\usr\\local"
  169. BUILD_COMMAND msbuild /m /P:Configuration=Release INSTALL.vcxproj
  170. INSTALL_COMMAND ""
  171. )
  172. if (${DEP_DEBUG})
  173. ExternalProject_Get_Property(dep_zlib BINARY_DIR)
  174. ExternalProject_Add_Step(dep_zlib build_debug
  175. DEPENDEES build
  176. DEPENDERS install
  177. COMMAND msbuild /m /P:Configuration=Debug INSTALL.vcxproj
  178. WORKING_DIRECTORY "${BINARY_DIR}"
  179. )
  180. endif ()
  181. # The following steps are unfortunately needed to remove the _static suffix on libraries
  182. ExternalProject_Add_Step(dep_zlib fix_static
  183. DEPENDEES install
  184. COMMAND "${CMAKE_COMMAND}" -E rename zlibstatic.lib zlib.lib
  185. WORKING_DIRECTORY "${DESTDIR}\\usr\\local\\lib\\"
  186. )
  187. if (${DEP_DEBUG})
  188. ExternalProject_Add_Step(dep_zlib fix_static_debug
  189. DEPENDEES install
  190. COMMAND "${CMAKE_COMMAND}" -E rename zlibstaticd.lib zlibd.lib
  191. WORKING_DIRECTORY "${DESTDIR}\\usr\\local\\lib\\"
  192. )
  193. endif ()
  194. if (${DEPS_BITS} EQUAL 32)
  195. set(DEP_LIBCURL_TARGET "x86")
  196. else ()
  197. set(DEP_LIBCURL_TARGET "x64")
  198. endif ()
  199. ExternalProject_Add(dep_libcurl
  200. EXCLUDE_FROM_ALL 1
  201. URL "https://curl.haxx.se/download/curl-7.58.0.tar.gz"
  202. URL_HASH SHA256=cc245bf9a1a42a45df491501d97d5593392a03f7b4f07b952793518d97666115
  203. BUILD_IN_SOURCE 1
  204. CONFIGURE_COMMAND ""
  205. BUILD_COMMAND cd winbuild && nmake /f Makefile.vc mode=static "VC=${DEP_VS_VER}" GEN_PDB=yes DEBUG=no "MACHINE=${DEP_LIBCURL_TARGET}"
  206. INSTALL_COMMAND cd builds\\libcurl-*-release-*-winssl
  207. && "${CMAKE_COMMAND}" -E copy_directory include "${DESTDIR}\\usr\\local\\include"
  208. && "${CMAKE_COMMAND}" -E copy_directory lib "${DESTDIR}\\usr\\local\\lib"
  209. )
  210. if (${DEP_DEBUG})
  211. ExternalProject_Get_Property(dep_libcurl SOURCE_DIR)
  212. ExternalProject_Add_Step(dep_libcurl build_debug
  213. DEPENDEES build
  214. DEPENDERS install
  215. COMMAND cd winbuild && nmake /f Makefile.vc mode=static "VC=${DEP_VS_VER}" GEN_PDB=yes DEBUG=yes "MACHINE=${DEP_LIBCURL_TARGET}"
  216. WORKING_DIRECTORY "${SOURCE_DIR}"
  217. )
  218. ExternalProject_Add_Step(dep_libcurl install_debug
  219. DEPENDEES install
  220. COMMAND cd builds\\libcurl-*-debug-*-winssl
  221. && "${CMAKE_COMMAND}" -E copy_directory include "${DESTDIR}\\usr\\local\\include"
  222. && "${CMAKE_COMMAND}" -E copy_directory lib "${DESTDIR}\\usr\\local\\lib"
  223. WORKING_DIRECTORY "${SOURCE_DIR}"
  224. )
  225. endif ()
  226. find_package(Git REQUIRED)
  227. ExternalProject_Add(dep_qhull
  228. EXCLUDE_FROM_ALL 1
  229. URL "https://github.com/qhull/qhull/archive/v7.2.1.tar.gz"
  230. URL_HASH SHA256=6fc251e0b75467e00943bfb7191e986fce0e1f8f6f0251f9c6ce5a843821ea78
  231. CMAKE_GENERATOR "${DEP_MSVC_GEN}"
  232. CMAKE_ARGS
  233. -DCMAKE_INSTALL_PREFIX=${DESTDIR}/usr/local
  234. -DBUILD_SHARED_LIBS=OFF
  235. -DCMAKE_POSITION_INDEPENDENT_CODE=ON
  236. -DCMAKE_DEBUG_POSTFIX=d
  237. PATCH_COMMAND ${GIT_EXECUTABLE} apply --ignore-space-change --ignore-whitespace ${CMAKE_CURRENT_SOURCE_DIR}/qhull-mods.patch
  238. BUILD_COMMAND msbuild /m /P:Configuration=Release INSTALL.vcxproj
  239. INSTALL_COMMAND ""
  240. )
  241. if (${DEP_DEBUG})
  242. ExternalProject_Get_Property(dep_qhull BINARY_DIR)
  243. ExternalProject_Add_Step(dep_qhull build_debug
  244. DEPENDEES build
  245. DEPENDERS install
  246. COMMAND msbuild /m /P:Configuration=Debug INSTALL.vcxproj
  247. WORKING_DIRECTORY "${BINARY_DIR}"
  248. )
  249. endif ()
  250. if (${DEPS_BITS} EQUAL 32)
  251. set(DEP_WXWIDGETS_TARGET "")
  252. set(DEP_WXWIDGETS_LIBDIR "vc_lib")
  253. else ()
  254. set(DEP_WXWIDGETS_TARGET "TARGET_CPU=X64")
  255. set(DEP_WXWIDGETS_LIBDIR "vc_x64_lib")
  256. endif ()
  257. find_package(Git REQUIRED)
  258. ExternalProject_Add(dep_libigl
  259. EXCLUDE_FROM_ALL 1
  260. URL "https://github.com/libigl/libigl/archive/v2.0.0.tar.gz"
  261. URL_HASH SHA256=42518e6b106c7209c73435fd260ed5d34edeb254852495b4c95dce2d95401328
  262. CMAKE_GENERATOR "${DEP_MSVC_GEN}"
  263. CMAKE_ARGS
  264. -DCMAKE_INSTALL_PREFIX=${DESTDIR}/usr/local
  265. -DLIBIGL_BUILD_PYTHON=OFF
  266. -DLIBIGL_BUILD_TESTS=OFF
  267. -DLIBIGL_BUILD_TUTORIALS=OFF
  268. -DLIBIGL_USE_STATIC_LIBRARY=OFF #${DEP_BUILD_IGL_STATIC}
  269. -DLIBIGL_WITHOUT_COPYLEFT=OFF
  270. -DLIBIGL_WITH_CGAL=OFF
  271. -DLIBIGL_WITH_COMISO=OFF
  272. -DLIBIGL_WITH_CORK=OFF
  273. -DLIBIGL_WITH_EMBREE=OFF
  274. -DLIBIGL_WITH_MATLAB=OFF
  275. -DLIBIGL_WITH_MOSEK=OFF
  276. -DLIBIGL_WITH_OPENGL=OFF
  277. -DLIBIGL_WITH_OPENGL_GLFW=OFF
  278. -DLIBIGL_WITH_OPENGL_GLFW_IMGUI=OFF
  279. -DLIBIGL_WITH_PNG=OFF
  280. -DLIBIGL_WITH_PYTHON=OFF
  281. -DLIBIGL_WITH_TETGEN=OFF
  282. -DLIBIGL_WITH_TRIANGLE=OFF
  283. -DLIBIGL_WITH_XML=OFF
  284. -DCMAKE_POSITION_INDEPENDENT_CODE=ON
  285. -DCMAKE_DEBUG_POSTFIX=d
  286. PATCH_COMMAND ${GIT_EXECUTABLE} apply --ignore-space-change --ignore-whitespace ${CMAKE_CURRENT_SOURCE_DIR}/igl-fixes.patch
  287. BUILD_COMMAND msbuild /m /P:Configuration=Release INSTALL.vcxproj
  288. INSTALL_COMMAND ""
  289. )
  290. if (${DEP_DEBUG})
  291. ExternalProject_Get_Property(dep_libigl BINARY_DIR)
  292. ExternalProject_Add_Step(dep_libigl build_debug
  293. DEPENDEES build
  294. DEPENDERS install
  295. COMMAND msbuild /m /P:Configuration=Debug INSTALL.vcxproj
  296. WORKING_DIRECTORY "${BINARY_DIR}"
  297. )
  298. endif ()
  299. ExternalProject_Add(dep_wxwidgets
  300. EXCLUDE_FROM_ALL 1
  301. GIT_REPOSITORY "https://github.com/prusa3d/wxWidgets"
  302. GIT_TAG v3.1.1-patched
  303. # URL "https://github.com/wxWidgets/wxWidgets/releases/download/v3.1.1/wxWidgets-3.1.1.tar.bz2"
  304. # URL_HASH SHA256=c925dfe17e8f8b09eb7ea9bfdcfcc13696a3e14e92750effd839f5e10726159e
  305. BUILD_IN_SOURCE 1
  306. # PATCH_COMMAND "${CMAKE_COMMAND}" -E copy "${CMAKE_CURRENT_SOURCE_DIR}\\wxwidgets-pngprefix.h" src\\png\\pngprefix.h
  307. CONFIGURE_COMMAND ""
  308. BUILD_COMMAND cd build\\msw && nmake /f makefile.vc BUILD=release SHARED=0 UNICODE=1 USE_GUI=1 "${DEP_WXWIDGETS_TARGET}"
  309. INSTALL_COMMAND "${CMAKE_COMMAND}" -E copy_directory include "${DESTDIR}\\usr\\local\\include"
  310. && "${CMAKE_COMMAND}" -E copy_directory "lib\\${DEP_WXWIDGETS_LIBDIR}" "${DESTDIR}\\usr\\local\\lib\\${DEP_WXWIDGETS_LIBDIR}"
  311. )
  312. if (${DEP_DEBUG})
  313. ExternalProject_Get_Property(dep_wxwidgets SOURCE_DIR)
  314. ExternalProject_Add_Step(dep_wxwidgets build_debug
  315. DEPENDEES build
  316. DEPENDERS install
  317. COMMAND cd build\\msw && nmake /f makefile.vc BUILD=debug SHARED=0 UNICODE=1 USE_GUI=1 "${DEP_WXWIDGETS_TARGET}"
  318. WORKING_DIRECTORY "${SOURCE_DIR}"
  319. )
  320. endif ()