Advertisement
Guest User

Untitled

a guest
Sep 1st, 2015
155
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 4.81 KB | None | 0 0
  1. # - Find PIN SDK.
  2. # This module finds a pin installation and selects a default one.
  3. #
  4. # Author: Manuel Niekamp
  5. # Email: niekma@upb.de
  6. #
  7. # The following variables are set after the configuration is done:
  8. #
  9. # PIN_FOUND - Set to TRUE if pin was found.
  10. # PIN_ROOT_DIR - base directory of pin
  11. # PIN_INCLUDE_DIRS - Include directories.
  12. # PIN_LIBRARY_DIRS - compile time link dirs, useful for
  13. # rpath on UNIX. Typically an empty string
  14. # in WIN32 environment.
  15. # PIN_DEFINITIONS - Contains defines required to compile/link
  16. # against pin
  17. # PIN_COMPILE_FLAGS - Compiler flags for C an C++
  18. # PIN_CXX_FLAGS - Extra C++ compiler flags
  19. # PIN_C_FLAGS - Extra C compiler flags
  20. # PIN_USE_FILE - Convenience include file.
  21. # PIN_CPU_ARCH - ia32, ia64
  22. #
  23. # Known MSVC problems:
  24. #
  25. # * Debug configuration is broken.
  26. # * Compiler flags are set for each file included in a pintool, so additional
  27. # /EHs- /EHa- conflict with default /EHsc with actually no negative effect
  28. # apart from a warning.
  29.  
  30. set(PIN_FOUND false)
  31.  
  32. # Add the convenience use file if available.
  33. set(PIN_USE_FILE "")
  34. get_filename_component(TMP_CURRENT_LIST_DIR ${CMAKE_CURRENT_LIST_FILE} PATH)
  35. # Prefer an existing customized version
  36. if(EXISTS "${TMP_CURRENT_LIST_DIR}/UsePin.cmake")
  37. set(PIN_USE_FILE "${TMP_CURRENT_LIST_DIR}/UsePin.cmake")
  38. else(EXISTS "${TMP_CURRENT_LIST_DIR}/UsePin.cmake")
  39. set(PIN_USE_FILE UsePin.cmake)
  40. endif(EXISTS "${TMP_CURRENT_LIST_DIR}/UsePin.cmake")
  41.  
  42. if(WINDOWS)
  43. set(PIN_CPU_ARCH $ENV{PROCESSOR_ARCHITECTURE})
  44. else()
  45. execute_process(
  46. COMMAND uname -m
  47. OUTPUT_VARIABLE PIN_CPU_ARCH
  48. RESULT_VARIABLE uname_result
  49. OUTPUT_STRIP_TRAILING_WHITESPACE
  50. ERROR_QUIET
  51. )
  52. endif()
  53.  
  54. if("${PIN_CPU_ARCH}" STREQUAL "x86_64")
  55. set(PIN_CPU_ARCH "ia32e")
  56. set(PIN_CPU_ARCH_LONG "intel64")
  57. elseif("${PIN_CPU_ARCH}" STREQUAL "amd64")
  58. set(PIN_CPU_ARCH "ia32e")
  59. set(PIN_CPU_ARCH_LONG "intel64")
  60. elseif("${PIN_CPU_ARCH}" STREQUAL "i686")
  61. set(PIN_CPU_ARCH "ia32")
  62. set(PIN_CPU_ARCH_LONG "ia32")
  63. elseif("${PIN_CPU_ARCH}" STREQUAL "x86")
  64. set(PIN_CPU_ARCH "ia32")
  65. set(PIN_CPU_ARCH_LONG "ia32")
  66. elseif("${PIN_CPU_ARCH}" STREQUAL "i386")
  67. set(PIN_CPU_ARCH "ia32")
  68. set(PIN_CPU_ARCH_LONG "ia32")
  69. elseif("${PIN_CPU_ARCH}" STREQUAL "ia64")
  70. set(PIN_CPU_ARCH "ipf")
  71. set(PIN_CPU_ARCH_LONG "ia62")
  72. endif("${PIN_CPU_ARCH}" STREQUAL "x86_64")
  73.  
  74. message(STATUS "PIN_CPU_ARCH: ${PIN_CPU_ARCH}")
  75.  
  76. # The directory tree has been changed since r504703.
  77. find_path(PIN_ROOT_DIR
  78. NAMES source/include/pin/pin.H
  79. PATHS $ENV{PIN_ROOT_DIR}
  80. DOC "Pin's base directory"
  81. )
  82.  
  83. if(NOT PIN_ROOT_DIR)
  84. message(FATAL_ERROR
  85. "\nPin not found!\n"
  86. "Please set the environment variable PIN_ROOT_DIR to the base directory"
  87. " of the pin library.\n"
  88. )
  89. endif(NOT PIN_ROOT_DIR)
  90.  
  91. message(STATUS "PIN_ROOT_DIR: ${PIN_ROOT_DIR}")
  92.  
  93. set(PIN_INCLUDE_DIRS
  94. ${PIN_ROOT_DIR}/extras/xed2-${PIN_CPU_ARCH_LONG}/include
  95. ${PIN_ROOT_DIR}/extras/components/include
  96. ${PIN_ROOT_DIR}/source/include/pin
  97. ${PIN_ROOT_DIR}/source/include/pin/gen
  98. )
  99.  
  100. set(PIN_LIBRARY_DIRS
  101. ${PIN_ROOT_DIR}/extras/xed2-${PIN_CPU_ARCH_LONG}/lib
  102. ${PIN_ROOT_DIR}/${PIN_CPU_ARCH_LONG}/lib
  103. ${PIN_ROOT_DIR}/${PIN_CPU_ARCH_LONG}/lib-ext
  104. )
  105.  
  106. set(PIN_VERSION_SCRIPT ${PIN_ROOT_DIR}/source/include/pin/pintool.ver)
  107.  
  108. if(MSVC)
  109. set(PIN_COMPILE_FLAGS "/MT /EHs- /EHa- /wd4530")
  110. set(PIN_C_FLAGS "${PIN_COMPILE_FLAGS}")
  111. set(PIN_CXX_FLAGS "${PIN_COMPILE_FLAGS}")
  112.  
  113. if("${PIN_CPU_ARCH}" STREQUAL "ia32")
  114. set(PIN_LINKER_FLAGS "/MACHINE:x86 /DLL /EXPORT:main /NODEFAULTLIB /ENTRY:Ptrace_DllMainCRTStartup@12 /BASE:0x55000000")
  115. elseif("${PIN_CPU_ARCH}" STREQUAL "ia32e")
  116. set(PIN_LINKER_FLAGS "/MACHINE:x64 /DLL /EXPORT:main /NODEFAULTLIB /ENTRY:Ptrace_DllMainCRTStartup /BASE:0xC5000000")
  117. endif()
  118. else()
  119. set(PIN_COMPILE_FLAGS "-Wall -Werror -Wno-unknown-pragmas -O3 -fomit-frame-pointer -fno-strict-aliasing")
  120. set(PIN_C_FLAGS "${PIN_COMPILE_FLAGS}")
  121. set(PIN_CXX_FLAGS "${PIN_COMPILE_FLAGS} -MMD")
  122.  
  123. set(PIN_LINKER_FLAGS "-Wl,--hash-style=sysv -shared -Wl,-Bsymbolic -Wl,--version-script=${PIN_VERSION_SCRIPT}")
  124. endif()
  125.  
  126. set(PIN_DEFINITIONS "")
  127. list(APPEND PIN_DEFINITIONS BIGARRAY_MULTIPLIER=1 USING_XED)
  128.  
  129. if(MSVC)
  130. list(APPEND PIN_DEFINITIONS TARGET_WINDOWS _CRT_SECURE_NO_DEPRECATE _SECURE_SCL=0)
  131. else()
  132. list(APPEND PIN_DEFINITIONS TARGET_LINUX)
  133. endif()
  134.  
  135. if("${PIN_CPU_ARCH}" STREQUAL "ia32e")
  136. list(APPEND PIN_DEFINITIONS TARGET_IA32E HOST_IA32E)
  137. elseif("${PIN_CPU_ARCH}" STREQUAL "ia32")
  138. list(APPEND PIN_DEFINITIONS TARGET_IA32 HOST_IA32)
  139. elseif("${PIN_CPU_ARCH}" STREQUAL "ipf")
  140. list(APPEND PIN_DEFINITIONS TARGET_IPF HOST_IPF)
  141. endif("${PIN_CPU_ARCH}" STREQUAL "ia32e")
  142.  
  143. set(PIN_FOUND true)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement