split.cmake 2.4 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071
  1. if (__cmake_split_included)
  2. return ()
  3. endif ()
  4. set ( __cmake_split_included YES )
  5. # split debug symbols into separate file
  6. # windows case. The pdbs are located in bin/config/*.pdb
  7. function ( __split_win_dbg BINARYNAME DOINSTALL )
  8. if (DOINSTALL)
  9. INSTALL ( FILES "$<TARGET_FILE_DIR:${BINARYNAME}>/${BINARYNAME}.pdb" DESTINATION debug COMPONENT dbgsymbols OPTIONAL )
  10. endif ()
  11. endfunction ()
  12. # Mac OS case. We have to explicitly extract dSYM and then strip the binary
  13. function ( __split_apple_dbg BINARYNAME DOINSTALL )
  14. get_filename_component ( DIRHINT ${CMAKE_CXX_COMPILER} DIRECTORY )
  15. find_program ( CMAKE_DSYMUTIL dsymutil HINTS ${DIRHINT} )
  16. if (NOT CMAKE_DSYMUTIL)
  17. message ( SEND_ERROR "Missed dsymutil. Can't split symbols!" )
  18. unset ( SPLIT_SYMBOLS CACHE )
  19. return ()
  20. endif ()
  21. mark_as_advanced ( CMAKE_DSYMUTIL )
  22. ADD_CUSTOM_COMMAND ( TARGET ${BINARYNAME} POST_BUILD
  23. COMMAND ${CMAKE_DSYMUTIL} -f $<TARGET_FILE:${BINARYNAME}> -o $<TARGET_FILE:${BINARYNAME}>.dSYM
  24. )
  25. if (DOINSTALL)
  26. INSTALL ( FILES ${MANTICORE_BINARY_DIR}/src/${BINARYNAME}.dSYM
  27. DESTINATION ${CMAKE_INSTALL_LIBDIR}/debug/usr/bin COMPONENT dbgsymbols )
  28. endif ()
  29. endfunction ()
  30. # non-windows case. For linux - use objcopy to make 'clean' and 'debug' binaries
  31. function ( __split_linux_dbg BINARYNAME DOINSTALL )
  32. find_package ( BinUtils QUIET )
  33. if (NOT DEFINED CMAKE_OBJCOPY)
  34. find_program ( CMAKE_OBJCOPY objcopy )
  35. endif ()
  36. if (NOT DEFINED CMAKE_OBJCOPY)
  37. message ( SEND_ERROR "Missed objcopy prog. Can't split symbols!" )
  38. unset ( SPLIT_SYMBOLS CACHE )
  39. endif (NOT DEFINED CMAKE_OBJCOPY)
  40. mark_as_advanced ( CMAKE_OBJCOPY BinUtils_DIR )
  41. ADD_CUSTOM_COMMAND ( TARGET ${BINARYNAME} POST_BUILD
  42. COMMAND ${CMAKE_OBJCOPY} --only-keep-debug $<TARGET_FILE:${BINARYNAME}> $<TARGET_FILE:${BINARYNAME}>.dbg
  43. COMMAND ${CMAKE_OBJCOPY} --strip-all $<TARGET_FILE:${BINARYNAME}>
  44. COMMAND ${CMAKE_OBJCOPY} --add-gnu-debuglink=$<TARGET_FILE:${BINARYNAME}>.dbg $<TARGET_FILE:${BINARYNAME}>
  45. COMMENT "Splitting symbols from ${BINARYNAME}"
  46. VERBATIM
  47. )
  48. if (DOINSTALL)
  49. INSTALL ( FILES $<TARGET_FILE:${BINARYNAME}>.dbg
  50. DESTINATION ${CMAKE_INSTALL_LIBDIR}/debug/usr/bin
  51. COMPONENT dbgsymbols )
  52. endif ()
  53. endfunction ()
  54. # split debug symbols from target, install them
  55. function ( split_dbg BINARYNAME )
  56. if (WIN32)
  57. __split_win_dbg ( ${BINARYNAME} TRUE )
  58. elseif (APPLE)
  59. __split_apple_dbg ( ${BINARYNAME} TRUE )
  60. else ()
  61. __split_linux_dbg ( ${BINARYNAME} TRUE )
  62. endif ()
  63. endfunction ()