1
0

LinkBinariesBuildPhase.cmake 2.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687
  1. enable_language(C)
  2. set(prototypes [[
  3. #include <stdio.h>
  4. #include <zlib.h>
  5. #include <resolv.h>
  6. int func1();
  7. int func2();
  8. int func3();
  9. int func4();
  10. int func5();
  11. ]])
  12. set(impl [[
  13. {
  14. printf("%p %p\n", compress, res_close);
  15. return func1() + func2() + func3() + func4() + func5();
  16. }
  17. ]])
  18. file(WRITE ${CMAKE_CURRENT_BINARY_DIR}/mainOuter.c
  19. "${prototypes}\nint main(int argc, char** argv) ${impl}"
  20. )
  21. file(WRITE ${CMAKE_CURRENT_BINARY_DIR}/funcOuter.c
  22. "${prototypes}\nint funcOuter() ${impl}"
  23. )
  24. foreach(i RANGE 1 5)
  25. file(WRITE ${CMAKE_CURRENT_BINARY_DIR}/func${i}.c
  26. "int func${i}() { return 32 + ${i}; }\n"
  27. )
  28. endforeach()
  29. add_executable(app1 mainOuter.c)
  30. add_library(static1 STATIC funcOuter.c)
  31. add_library(shared1 SHARED funcOuter.c)
  32. add_library(module1 MODULE funcOuter.c)
  33. add_library(obj1 OBJECT funcOuter.c)
  34. add_library(staticFramework1 STATIC funcOuter.c)
  35. add_library(sharedFramework1 SHARED funcOuter.c)
  36. set_target_properties(staticFramework1 PROPERTIES FRAMEWORK TRUE)
  37. set_target_properties(sharedFramework1 PROPERTIES FRAMEWORK TRUE)
  38. add_library(static2 STATIC func1.c)
  39. add_library(shared2 SHARED func2.c)
  40. add_library(obj2 OBJECT func3.c)
  41. add_library(staticFramework2 STATIC func4.c)
  42. add_library(sharedFramework2 SHARED func5.c)
  43. set_target_properties(staticFramework2 PROPERTIES FRAMEWORK TRUE)
  44. set_target_properties(sharedFramework2 PROPERTIES FRAMEWORK TRUE)
  45. # Pick a couple of libraries that are always present in the Xcode SDK
  46. find_library(libz z REQUIRED)
  47. find_library(libresolv resolv REQUIRED)
  48. add_library(imported2 UNKNOWN IMPORTED)
  49. set_target_properties(imported2 PROPERTIES IMPORTED_LOCATION ${libz})
  50. # Save these for the check script to use
  51. file(WRITE ${CMAKE_CURRENT_BINARY_DIR}/foundLibs.cmake "
  52. set(libz \"${libz}\")
  53. set(libresolv \"${libresolv}\")
  54. ")
  55. set(mainTargets
  56. app1
  57. static1
  58. shared1
  59. module1
  60. obj1
  61. staticFramework1
  62. sharedFramework1
  63. )
  64. set(linkToThings
  65. static2
  66. shared2
  67. obj2
  68. staticFramework2
  69. sharedFramework2
  70. imported2
  71. ${libresolv}
  72. )
  73. foreach(mainTarget IN LISTS mainTargets)
  74. foreach(linkTo IN LISTS linkToThings)
  75. target_link_libraries(${mainTarget} PRIVATE ${linkTo})
  76. endforeach()
  77. endforeach()