LIEF/api/python/CMakeLists.txt

173 lines
5.1 KiB
CMake
Raw Normal View History

2017-03-30 16:56:49 +02:00
cmake_minimum_required(VERSION 3.1)
include(ExternalProject)
include(CheckCXXCompilerFlag)
include(CheckCCompilerFlag)
2017-03-30 16:56:49 +02:00
macro(ADD_FLAG_IF_SUPPORTED flag name)
CHECK_C_COMPILER_FLAG("${flag}" "C_SUPPORTS_${name}")
CHECK_CXX_COMPILER_FLAG("${flag}" "CXX_SUPPORTS_${name}")
2017-03-30 16:56:49 +02:00
if (C_SUPPORTS_${name})
target_compile_options(pyLIEF PRIVATE ${flag})
endif()
if (CXX_SUPPORTS_${name})
target_compile_options(pyLIEF PRIVATE ${flag})
endif()
endmacro()
unset(PYTHON_VERSION)
2017-03-30 16:56:49 +02:00
find_package(PythonLibsNew EXACT ${PYTHON_VERSION} MODULE REQUIRED)
2017-03-30 16:56:49 +02:00
message(STATUS "Python version: ${PYTHON_VERSION}")
2017-03-30 16:56:49 +02:00
message(STATUS "Python lib: ${PYTHON_LIBRARY}")
message(STATUS "Python include: ${PYTHON_INCLUDE_DIR}")
message(STATUS "Python interpreter: ${PYTHON_EXECUTABLE}")
2017-03-30 16:56:49 +02:00
set(PYBIND11_VERSION 2.2.1)
set(PYBIND11_SHA256 SHA256=53c373d7d0b0711fea96beba666a9985269dc9e43e6088ea73faaa89b07b972e)
set(PYBIND11_URL "${THIRD_PARTY_DIRECTORY}/pybind11-${PYBIND11_VERSION}.zip" CACHE STRING "URL to the Pybind11 repo")
ExternalProject_Add(lief_pybind11
2017-09-24 14:00:35 +02:00
URL ${PYBIND11_URL}
URL_HASH ${PYBIND11_SHA256}
2017-03-30 16:56:49 +02:00
CONFIGURE_COMMAND ""
BUILD_COMMAND ""
INSTALL_COMMAND "")
ExternalProject_get_property(lief_pybind11 SOURCE_DIR)
2017-04-05 15:33:18 +02:00
set(PYBIND11_SOURCE_DIR "${SOURCE_DIR}")
2017-03-30 16:56:49 +02:00
# Define source files
set(LIEF_PYTHON_BASIC_SRC
2017-04-05 15:33:18 +02:00
"${CMAKE_CURRENT_SOURCE_DIR}/pyLIEF.cpp"
"${CMAKE_CURRENT_SOURCE_DIR}/pyUtils.cpp"
"${CMAKE_CURRENT_SOURCE_DIR}/pyIterators.cpp"
2017-07-15 14:15:16 +02:00
"${CMAKE_CURRENT_SOURCE_DIR}/pyExceptions.cpp"
"${CMAKE_CURRENT_SOURCE_DIR}/pyLogger.cpp"
"${CMAKE_CURRENT_SOURCE_DIR}/pyObject.cpp"
2017-07-15 14:15:16 +02:00
"${CMAKE_CURRENT_SOURCE_DIR}/encoding.cpp"
)
2017-04-05 15:33:18 +02:00
2017-08-20 07:08:50 +02:00
if (LIEF_ENABLE_JSON)
set(LIEF_PYTHON_BASIC_SRC
${LIEF_PYTHON_BASIC_SRC}
2017-08-20 07:08:50 +02:00
"${CMAKE_CURRENT_SOURCE_DIR}/pyJson.cpp"
)
endif()
set(LIEF_PYTHON_SRC
${LIEF_PYTHON_BASIC_SRC}
)
set(LIEF_PYTHON_BASIC_HDR
"${CMAKE_CURRENT_SOURCE_DIR}/pyIterators.hpp"
2017-07-15 14:15:16 +02:00
"${CMAKE_CURRENT_SOURCE_DIR}/pyLIEF.hpp"
"${CMAKE_CURRENT_SOURCE_DIR}/enums_wrapper.hpp"
2017-07-15 14:15:16 +02:00
"${CMAKE_CURRENT_SOURCE_DIR}/encoding.hpp"
)
set(LIEF_PYTHON_HDR
${LIEF_PYTHON_BASIC_HDR}
)
2017-03-30 16:56:49 +02:00
source_group("Header Files" FILES ${LIEF_PYTHON_BASIC_HDR})
2017-03-30 16:56:49 +02:00
add_library(pyLIEF SHARED ${LIEF_PYTHON_SRC} ${LIEF_PYTHON_HDR})
2017-03-30 16:56:49 +02:00
target_include_directories(pyLIEF PUBLIC
2017-04-05 15:33:18 +02:00
"${CMAKE_CURRENT_SOURCE_DIR}/"
"${PYTHON_INCLUDE_DIR}"
"${PYBIND11_SOURCE_DIR}/include")
2017-03-30 16:56:49 +02:00
add_definitions(-DELPP_NO_DEFAULT_LOG_FILE)
include("${CMAKE_CURRENT_SOURCE_DIR}/Abstract/CMakeLists.txt")
2017-03-30 16:56:49 +02:00
if(LIEF_ELF)
2017-04-05 15:33:18 +02:00
include("${CMAKE_CURRENT_SOURCE_DIR}/ELF/CMakeLists.txt")
2017-03-30 16:56:49 +02:00
endif()
if(LIEF_PE)
2017-04-05 15:33:18 +02:00
include("${CMAKE_CURRENT_SOURCE_DIR}/PE/CMakeLists.txt")
2017-03-30 16:56:49 +02:00
endif()
if(LIEF_MACHO)
2017-04-05 15:33:18 +02:00
include("${CMAKE_CURRENT_SOURCE_DIR}/MachO/CMakeLists.txt")
2017-03-30 16:56:49 +02:00
endif()
target_compile_features(pyLIEF PRIVATE cxx_attribute_deprecated)
set_property(TARGET pyLIEF PROPERTY CXX_STANDARD 11)
set_property(TARGET pyLIEF PROPERTY CXX_STANDARD_REQUIRED ON)
if (MSVC)
target_compile_options(pyLIEF PUBLIC /FIiso646.h)
set_property(TARGET pyLIEF PROPERTY LINK_FLAGS /NODEFAULTLIB:MSVCRT)
endif()
set_target_properties(pyLIEF PROPERTIES PYTHON_VERSION ${PYTHON_VERSION})
2017-03-30 16:56:49 +02:00
set(PYLIEF_DEPS_LIBRARIES LIB_LIEF_STATIC)
if(LIEF_COVERAGE)
target_compile_options(pyLIEF PRIVATE -g -O0 --coverage -fprofile-arcs -ftest-coverage)
set(PYLIEF_DEPS_LIBRARIES ${PYLIEF_DEPS_LIBRARIES} gcov)
endif()
ADD_FLAG_IF_SUPPORTED("-Wno-macro-redefined" NO_MACRO_REDEFINED)
2017-03-30 16:56:49 +02:00
2017-07-25 17:06:30 +02:00
set_target_properties(pyLIEF PROPERTIES PREFIX "" OUTPUT_NAME "_pylief")
add_dependencies(pyLIEF lief_pybind11)
2017-03-30 16:56:49 +02:00
if(APPLE)
2017-09-28 11:24:20 +02:00
set_target_properties(pyLIEF PROPERTIES MACOSX_RPATH ".")
set_target_properties(pyLIEF PROPERTIES LINK_FLAGS "-undefined dynamic_lookup ")
2017-03-30 16:56:49 +02:00
endif()
set_target_properties(pyLIEF PROPERTIES PREFIX "")
if (UNIX)
set_target_properties(pyLIEF PROPERTIES SUFFIX ".so")
elseif(WIN32)
set_target_properties(pyLIEF PROPERTIES SUFFIX ".pyd")
endif()
get_target_property(suffix pyLIEF SUFFIX)
set(LIEF_LIBRARY_NAME "lief${suffix}")
if (WIN32)
set(PYLIEF_DEPS_LIBRARIES ${PYLIEF_DEPS_LIBRARIES} ${PYTHON_LIBRARIES})
endif()
target_link_libraries(pyLIEF PUBLIC ${PYLIEF_DEPS_LIBRARIES})
add_custom_command(TARGET pyLIEF POST_BUILD
2017-07-25 17:06:30 +02:00
COMMAND ${CMAKE_COMMAND} -E copy $<TARGET_FILE:pyLIEF> ${PROJECT_BINARY_DIR}/api/python/lief
2017-03-30 16:56:49 +02:00
)
2017-07-25 17:06:30 +02:00
if (MSVC)
add_custom_command(TARGET pyLIEF POST_BUILD
COMMAND ${CMAKE_COMMAND} -E copy $<TARGET_FILE:pyLIEF> ${CMAKE_CURRENT_BINARY_DIR}
)
endif()
configure_file("${CMAKE_CURRENT_SOURCE_DIR}/setup.py.in" "${CMAKE_CURRENT_BINARY_DIR}/setup.py")
configure_file("${CMAKE_CURRENT_SOURCE_DIR}/__init__.py.in" "${CMAKE_CURRENT_BINARY_DIR}/lief/__init__.py")
2017-10-03 22:42:08 +02:00
configure_file("${CMAKE_CURRENT_SOURCE_DIR}/README" "${CMAKE_CURRENT_BINARY_DIR}/README")
configure_file("${CMAKE_CURRENT_SOURCE_DIR}/MANIFEST.in" "${CMAKE_CURRENT_BINARY_DIR}/MANIFEST.in")
configure_file("${CMAKE_CURRENT_SOURCE_DIR}/setup.cfg" "${CMAKE_CURRENT_BINARY_DIR}/setup.cfg")
2017-03-30 16:56:49 +02:00
MESSAGE(STATUS "OS: ${CMAKE_HOST_SYSTEM}")
find_program(ENV_BINARY "env")
if (UNIX AND ENV_BINARY AND LIEF_INSTALL_PYTHON)
install(CODE "execute_process(COMMAND ${ENV_BINARY} ${PYTHON_EXECUTABLE} ${CMAKE_CURRENT_BINARY_DIR}/setup.py install)"
2017-03-30 16:56:49 +02:00
COMPONENT python)
endif()