CMakeLists.txt 2.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071
  1. # This file is part of Desktop App Toolkit,
  2. # a set of libraries for developing nice desktop applications.
  3. #
  4. # For license and copyright information please follow this link:
  5. # https://github.com/desktop-app/legal/blob/master/LEGAL
  6. set(dispatch_loc ${third_party_loc}/dispatch)
  7. set(dispatch_prefix ${CMAKE_CURRENT_BINARY_DIR}/dispatch-prefix)
  8. set(dispatch_binary_dir ${dispatch_prefix}/src/dispatch-build)
  9. if (DESKTOP_APP_USE_PACKAGED)
  10. find_library(DESKTOP_APP_DISPATCH_LIBRARIES dispatch)
  11. find_path(DESKTOP_APP_DISPATCH_INCLUDE_DIRS dispatch/dispatch.h)
  12. endif()
  13. if (NOT DESKTOP_APP_DISPATCH_LIBRARIES OR NOT DESKTOP_APP_DISPATCH_INCLUDE_DIRS)
  14. execute_process(
  15. COMMAND ${CMAKE_COMMAND} ${dispatch_loc}
  16. -B ${dispatch_binary_dir}
  17. -GNinja
  18. -DCMAKE_BUILD_TYPE=Release
  19. -DCMAKE_C_COMPILER=clang
  20. -DCMAKE_CXX_COMPILER=clang++
  21. -DCMAKE_C_FLAGS=-g
  22. -DCMAKE_CXX_FLAGS=-g
  23. -DBUILD_SHARED_LIBS=OFF
  24. -DBUILD_TESTING=OFF
  25. )
  26. execute_process(
  27. COMMAND ${CMAKE_COMMAND} --build ${dispatch_binary_dir} --parallel
  28. )
  29. if (NOT EXISTS ${dispatch_binary_dir}/src/libdispatch.a)
  30. if (DESKTOP_APP_SPECIAL_TARGET)
  31. message(FATAL_ERROR "Dispatch build failed")
  32. else()
  33. return()
  34. endif()
  35. endif()
  36. endif()
  37. add_library(external_dispatch INTERFACE IMPORTED GLOBAL)
  38. add_library(desktop-app::external_dispatch ALIAS external_dispatch)
  39. if (DESKTOP_APP_USE_PACKAGED AND DESKTOP_APP_DISPATCH_LIBRARIES AND DESKTOP_APP_DISPATCH_INCLUDE_DIRS)
  40. target_include_directories(external_dispatch SYSTEM INTERFACE ${DESKTOP_APP_DISPATCH_INCLUDE_DIRS})
  41. target_link_libraries(external_dispatch INTERFACE ${DESKTOP_APP_DISPATCH_LIBRARIES})
  42. return()
  43. endif()
  44. add_library(external_dispatch_bundled STATIC IMPORTED)
  45. set_target_properties(external_dispatch_bundled PROPERTIES
  46. IMPORTED_LOCATION "${dispatch_binary_dir}/src/libdispatch.a"
  47. )
  48. target_include_directories(external_dispatch_bundled SYSTEM
  49. INTERFACE
  50. ${dispatch_loc}
  51. )
  52. target_link_libraries(external_dispatch_bundled
  53. INTERFACE
  54. ${dispatch_binary_dir}/src/BlocksRuntime/libBlocksRuntime.a
  55. )
  56. target_link_libraries(external_dispatch
  57. INTERFACE
  58. external_dispatch_bundled
  59. )