ida_game_elf_loaders/cmake/FindIDA.cmake
2018-06-10 17:13:46 +02:00

144 lines
No EOL
3.4 KiB
CMake

set(IDA_FOUND FALSE)
set(IDA_SDK_FOUND FALSE)
#
# Find IDA.
#
find_path(IDA_PATH
NAME "idag.exe" "idaq.exe"
HINTS $ENV{IDA_DIR} $ENV{IDADIR}
PATHS "C:/Program Files/IDA" "C:/Program Files (x86)/IDA"
DOC "IDA installation directory.")
if(IDA_PATH)
set(IDA_FOUND TRUE)
message(STATUS "Looking for IDA - found at ${IDA_PATH}")
else()
message(STATUS "Looking for IDA - not found")
endif()
#
# Make up the name of the SDK library subdirectory.
#
# Detect the platform.
set(platform "unknown")
if(WIN32)
set(platform "win")
endif()
if(UNIX)
set(platform "linux")
endif()
if(APPLE)
set(platform "mac")
endif()
# Detect the compiler.
set(compiler "unknown")
if(BORLAND)
set(compiler "bcc")
endif()
if(CMAKE_COMPILER_IS_GNUCXX OR ${CMAKE_CXX_COMPILER_ID} MATCHES "Clang")
set(compiler "gcc")
endif()
if(MSVC)
set(compiler "vc")
endif()
if(CMAKE_COMPILER_IS_GNUCXX OR ${CMAKE_CXX_COMPILER_ID} MATCHES "Clang")
set(compiler "gcc")
endif()
if(MSVC)
set(compiler "vc")
endif()
set(IDA_64_BIT_EA_T OFF CACHE BOOL "Use 64-bit ea_t. Set this to build 64-bit code capable IDA plugins.")
if(IDA_64_BIT_EA_T)
set(suffix "64")
else()
set(suffix "32")
endif()
if(CMAKE_SIZEOF_VOID_P EQUAL 8 AND NOT NC_M32)
set(library_dir "lib/x64_${platform}_${compiler}_${suffix}")
else()
set(library_dir "lib/x86_${platform}_${compiler}_${suffix}")
endif()
#
# Find IDA SDK.
#
find_path(IDA_SDK_PATH
NAME ${library_dir}
HINTS $ENV{IDA_SDK_DIR} $ENV{IDA_SDK}
PATHS "${IDA_PATH}/sdk"
DOC "IDA SDK directory.")
if(IDA_SDK_PATH)
set(IDA_SDK_FOUND TRUE)
set(IDA_INCLUDE_DIR ${IDA_SDK_PATH}/include)
set(IDA_LIBRARY_DIR ${IDA_SDK_PATH}/${library_dir})
if(MSVC)
file(GLOB IDA_LIBRARIES "${IDA_LIBRARY_DIR}/*.lib")
else()
file(GLOB IDA_LIBRARIES "${IDA_LIBRARY_DIR}/*.a")
endif()
set(IDA_DEFINITIONS -D__IDP__)
if(WIN32)
set(IDA_DEFINITIONS ${IDA_DEFINITIONS} -D__NT__)
endif()
if(UNIX)
set(IDA_DEFINITIONS ${IDA_DEFINITIONS} -D__LINUX__)
endif()
if(APPLE)
set(IDA_DEFINITIONS ${IDA_DEFINITIONS} -D__MAC__)
endif()
if(CMAKE_SIZEOF_VOID_P EQUAL 8 AND NOT NC_M32)
set(IDA_DEFINITIONS ${IDA_DEFINITIONS} -D__X64__)
endif()
if(IDA_64_BIT_EA_T)
set(IDA_DEFINITIONS ${IDA_DEFINITIONS} -D__EA64__)
endif()
if(WIN32)
if(IDA_64_BIT_EA_T)
set(IDA_PLUGIN_EXT "64.dll")
else()
set(IDA_PLUGIN_EXT ".dll")
endif()
elseif(APPLE)
if(IDA_64_BIT_EA_T)
set(IDA_PLUGIN_EXT "64.lmc64")
set(IDA_SHARED_LIB_NAME ida64)
else()
set(IDA_PLUGIN_EXT ".lmc")
set(IDA_SHARED_LIB_NAME ida)
endif()
if (IDA_PATH)
file(GLOB_RECURSE IDA_SHARED_LIBRARY "${IDA_PATH}/*/lib${IDA_SHARED_LIB_NAME}.dylib")
else()
file(GLOB_RECURSE IDA_SHARED_LIBRARY "/Applications/IDA*/lib${IDA_SHARED_LIB_NAME}.dylib")
endif()
set(IDA_LIBRARIES ${IDA_LIBRARIES} ${IDA_SHARED_LIBRARY})
elseif(UNIX)
if(IDA_64_BIT_EA_T)
set(IDA_PLUGIN_EXT "64.llx64")
else()
set(IDA_PLUGIN_EXT ".llx")
endif()
endif()
message(STATUS "Looking for IDA SDK - found at ${IDA_SDK_PATH}")
else()
message(STATUS "Looking for IDA SDK - not found")
endif()
unset(platform)
unset(compiler)
unset(suffix)
unset(library_dir)