mirror of
https://github.com/lifting-bits/mcsema
synced 2026-06-08 15:31:09 +00:00
31f267bd5f
* Update to latest remill APIs and way of using CMake. * Minor fixes * Bug fixes for AArch64 * Tweaks * Adds some nifty functionality useful for debugging some aarch64 bugs * Fixes a subtle bug * Bug fixes * Make the test suite use explicit args * Bug fix in xrefs * Disable tests for now
173 lines
5.8 KiB
CMake
173 lines
5.8 KiB
CMake
# Distributed under the OSI-approved BSD 3-Clause License. See accompanying
|
|
# file Copyright.txt or https://cmake.org/licensing for details.
|
|
|
|
set(LIBRARY_ROOT "${CXX_COMMON_REPOSITORY_ROOT}/protobuf")
|
|
|
|
set(Protobuf_FOUND TRUE)
|
|
set(Protobuf_INCLUDE_DIR "${LIBRARY_ROOT}/include")
|
|
|
|
if (WIN32)
|
|
set(Protobuf_PROTOC_EXECUTABLE "${LIBRARY_ROOT}/bin/protoc.exe")
|
|
set(Protobuf_LIBRARIES ${LIBRARY_ROOT}/lib/protobuf.lib)
|
|
set(Protobuf_PROTOC_LIBRARIES ${LIBRARY_ROOT}/lib/protoc.lib)
|
|
else ()
|
|
set(Protobuf_PROTOC_EXECUTABLE "${LIBRARY_ROOT}/bin/protoc")
|
|
set(Protobuf_LIBRARIES ${LIBRARY_ROOT}/lib/libprotobuf.a)
|
|
set(Protobuf_PROTOC_LIBRARIES ${LIBRARY_ROOT}/lib/libprotoc.a)
|
|
endif ()
|
|
|
|
mark_as_advanced(FORCE Protobuf_FOUND)
|
|
mark_as_advanced(FORCE Protobuf_INCLUDE_DIR)
|
|
mark_as_advanced(FORCE Protobuf_PROTOC_EXECUTABLE)
|
|
mark_as_advanced(FORCE Protobuf_LIBRARIES)
|
|
mark_as_advanced(FORCE Protobuf_PROTOC_LIBRARIES)
|
|
|
|
# Backwards compatibility
|
|
# Define camel case versions of input variables
|
|
foreach(UPPER
|
|
PROTOBUF_SRC_ROOT_FOLDER
|
|
PROTOBUF_IMPORT_DIRS
|
|
PROTOBUF_DEBUG
|
|
PROTOBUF_LIBRARY
|
|
PROTOBUF_PROTOC_LIBRARY
|
|
PROTOBUF_INCLUDE_DIR
|
|
PROTOBUF_PROTOC_EXECUTABLE
|
|
PROTOBUF_LIBRARY_DEBUG
|
|
PROTOBUF_PROTOC_LIBRARY_DEBUG
|
|
PROTOBUF_LITE_LIBRARY
|
|
PROTOBUF_LITE_LIBRARY_DEBUG
|
|
)
|
|
if (DEFINED ${UPPER})
|
|
string(REPLACE "PROTOBUF_" "Protobuf_" Camel ${UPPER})
|
|
if (NOT DEFINED ${Camel})
|
|
set(${Camel} ${${UPPER}})
|
|
endif()
|
|
endif()
|
|
endforeach()
|
|
|
|
# By default have PROTOBUF_GENERATE_CPP macro pass -I to protoc
|
|
# for each directory where a proto file is referenced.
|
|
if(NOT DEFINED PROTOBUF_GENERATE_CPP_APPEND_PATH)
|
|
set(PROTOBUF_GENERATE_CPP_APPEND_PATH TRUE)
|
|
endif()
|
|
|
|
function(PROTOBUF_GENERATE_CPP SRCS HDRS)
|
|
if(NOT ARGN)
|
|
message(SEND_ERROR "Error: PROTOBUF_GENERATE_CPP() called without any proto files")
|
|
return()
|
|
endif()
|
|
|
|
if(PROTOBUF_GENERATE_CPP_APPEND_PATH)
|
|
# Create an include path for each file specified
|
|
foreach(FIL ${ARGN})
|
|
get_filename_component(ABS_FIL ${FIL} ABSOLUTE)
|
|
get_filename_component(ABS_PATH ${ABS_FIL} PATH)
|
|
list(FIND _protobuf_include_path ${ABS_PATH} _contains_already)
|
|
if(${_contains_already} EQUAL -1)
|
|
list(APPEND _protobuf_include_path -I ${ABS_PATH})
|
|
endif()
|
|
endforeach()
|
|
else()
|
|
set(_protobuf_include_path -I ${CMAKE_CURRENT_SOURCE_DIR})
|
|
endif()
|
|
|
|
if(DEFINED PROTOBUF_IMPORT_DIRS AND NOT DEFINED Protobuf_IMPORT_DIRS)
|
|
set(Protobuf_IMPORT_DIRS "${PROTOBUF_IMPORT_DIRS}")
|
|
endif()
|
|
|
|
if(DEFINED Protobuf_IMPORT_DIRS)
|
|
foreach(DIR ${Protobuf_IMPORT_DIRS})
|
|
get_filename_component(ABS_PATH ${DIR} ABSOLUTE)
|
|
list(FIND _protobuf_include_path ${ABS_PATH} _contains_already)
|
|
if(${_contains_already} EQUAL -1)
|
|
list(APPEND _protobuf_include_path -I ${ABS_PATH})
|
|
endif()
|
|
endforeach()
|
|
endif()
|
|
|
|
set(${SRCS})
|
|
set(${HDRS})
|
|
foreach(FIL ${ARGN})
|
|
get_filename_component(ABS_FIL ${FIL} ABSOLUTE)
|
|
get_filename_component(FIL_WE ${FIL} NAME_WE)
|
|
if(NOT PROTOBUF_GENERATE_CPP_APPEND_PATH)
|
|
get_filename_component(FIL_DIR ${FIL} DIRECTORY)
|
|
if(FIL_DIR)
|
|
set(FIL_WE "${FIL_DIR}/${FIL_WE}")
|
|
endif()
|
|
endif()
|
|
|
|
list(APPEND ${SRCS} "${CMAKE_CURRENT_BINARY_DIR}/${FIL_WE}.pb.cc")
|
|
list(APPEND ${HDRS} "${CMAKE_CURRENT_BINARY_DIR}/${FIL_WE}.pb.h")
|
|
|
|
add_custom_command(
|
|
OUTPUT "${CMAKE_CURRENT_BINARY_DIR}/${FIL_WE}.pb.cc"
|
|
"${CMAKE_CURRENT_BINARY_DIR}/${FIL_WE}.pb.h"
|
|
COMMAND ${Protobuf_PROTOC_EXECUTABLE}
|
|
ARGS --cpp_out ${CMAKE_CURRENT_BINARY_DIR} ${_protobuf_include_path} ${ABS_FIL}
|
|
DEPENDS ${ABS_FIL} ${Protobuf_PROTOC_EXECUTABLE}
|
|
COMMENT "Running C++ protocol buffer compiler on ${FIL}"
|
|
VERBATIM )
|
|
endforeach()
|
|
|
|
set_source_files_properties(${${SRCS}} ${${HDRS}} PROPERTIES GENERATED TRUE)
|
|
set(${SRCS} ${${SRCS}} PARENT_SCOPE)
|
|
set(${HDRS} ${${HDRS}} PARENT_SCOPE)
|
|
endfunction()
|
|
|
|
function(PROTOBUF_GENERATE_PYTHON SRCS)
|
|
if(NOT ARGN)
|
|
message(SEND_ERROR "Error: PROTOBUF_GENERATE_PYTHON() called without any proto files")
|
|
return()
|
|
endif()
|
|
|
|
if(PROTOBUF_GENERATE_CPP_APPEND_PATH)
|
|
# Create an include path for each file specified
|
|
foreach(FIL ${ARGN})
|
|
get_filename_component(ABS_FIL ${FIL} ABSOLUTE)
|
|
get_filename_component(ABS_PATH ${ABS_FIL} PATH)
|
|
list(FIND _protobuf_include_path ${ABS_PATH} _contains_already)
|
|
if(${_contains_already} EQUAL -1)
|
|
list(APPEND _protobuf_include_path -I ${ABS_PATH})
|
|
endif()
|
|
endforeach()
|
|
else()
|
|
set(_protobuf_include_path -I ${CMAKE_CURRENT_SOURCE_DIR})
|
|
endif()
|
|
|
|
if(DEFINED PROTOBUF_IMPORT_DIRS AND NOT DEFINED Protobuf_IMPORT_DIRS)
|
|
set(Protobuf_IMPORT_DIRS "${PROTOBUF_IMPORT_DIRS}")
|
|
endif()
|
|
|
|
if(DEFINED Protobuf_IMPORT_DIRS)
|
|
foreach(DIR ${Protobuf_IMPORT_DIRS})
|
|
get_filename_component(ABS_PATH ${DIR} ABSOLUTE)
|
|
list(FIND _protobuf_include_path ${ABS_PATH} _contains_already)
|
|
if(${_contains_already} EQUAL -1)
|
|
list(APPEND _protobuf_include_path -I ${ABS_PATH})
|
|
endif()
|
|
endforeach()
|
|
endif()
|
|
|
|
set(${SRCS})
|
|
foreach(FIL ${ARGN})
|
|
get_filename_component(ABS_FIL ${FIL} ABSOLUTE)
|
|
get_filename_component(FIL_WE ${FIL} NAME_WE)
|
|
if(NOT PROTOBUF_GENERATE_CPP_APPEND_PATH)
|
|
get_filename_component(FIL_DIR ${FIL} DIRECTORY)
|
|
if(FIL_DIR)
|
|
set(FIL_WE "${FIL_DIR}/${FIL_WE}")
|
|
endif()
|
|
endif()
|
|
|
|
list(APPEND ${SRCS} "${CMAKE_CURRENT_BINARY_DIR}/${FIL_WE}_pb2.py")
|
|
add_custom_command(
|
|
OUTPUT "${CMAKE_CURRENT_BINARY_DIR}/${FIL_WE}_pb2.py"
|
|
COMMAND ${Protobuf_PROTOC_EXECUTABLE} --python_out ${CMAKE_CURRENT_BINARY_DIR} ${_protobuf_include_path} ${ABS_FIL}
|
|
DEPENDS ${ABS_FIL} ${Protobuf_PROTOC_EXECUTABLE}
|
|
COMMENT "Running Python protocol buffer compiler on ${FIL}"
|
|
VERBATIM )
|
|
endforeach()
|
|
|
|
set(${SRCS} ${${SRCS}} PARENT_SCOPE)
|
|
endfunction() |