diff options
author | Cristian Adam <cristian.adam@qt.io> | 2020-01-24 17:09:56 +0100 |
---|---|---|
committer | Cristian Adam <cristian.adam@qt.io> | 2020-01-28 14:18:19 +0000 |
commit | e6e0b0ca3bf77826e2ce2ca05776f2809f99931d (patch) | |
tree | 02f8b546f0633c75a1db1dd34f364ee1d3f185ec /cmake | |
parent | 4da23c74910611ed99d18f9dfc8ff12194cbfd52 (diff) |
CMake Build: add perfparser
Change-Id: Ib16548befefbb827f2752300f9e67da3cf91570c
Reviewed-by: Alessandro Portale <alessandro.portale@qt.io>
Diffstat (limited to 'cmake')
-rw-r--r-- | cmake/Findelfutils.cmake | 70 | ||||
-rw-r--r-- | cmake/QtCreatorAPI.cmake | 31 |
2 files changed, 96 insertions, 5 deletions
diff --git a/cmake/Findelfutils.cmake b/cmake/Findelfutils.cmake new file mode 100644 index 0000000000..b4d043d53e --- /dev/null +++ b/cmake/Findelfutils.cmake @@ -0,0 +1,70 @@ +#.rst: +# Findelfutils +# ----------------- +# +# Try to locate the elfutils binary installation +# +# The ``ELFUTILS_INSTALL_DIR`` (CMake or Environment) variable should be used +# to pinpoint the elfutils binary installation +# +# If found, this will define the following variables: +# +# ``elfutils_FOUND`` +# True if the elfutils header and library files have been found +# +# ``elfutils::dw`` +# ``elfutils::elf`` +# Imported targets containing the includes and libraries need to build +# against +# + +if (TARGET elfutils::dw AND TARGET elfutils::elf) + set(elfutils_FOUND TRUE) + return() +endif() + +find_path(ELFUTILS_INCLUDE_DIR + NAMES libdwfl.h elfutils/libdwfl.h + PATH_SUFFIXES include + HINTS + "${ELFUTILS_INSTALL_DIR}" ENV ELFUTILS_INSTALL_DIR +) + +foreach(lib dw elf eu_compat) + find_library(ELFUTILS_LIB_${lib} + NAMES ${lib} + PATH_SUFFIXES lib + HINTS + "${ELFUTILS_INSTALL_DIR}" ENV ELFUTILS_INSTALL_DIR + ) +endforeach() + +include(FindPackageHandleStandardArgs) +find_package_handle_standard_args(elfutils + DEFAULT_MSG + ELFUTILS_INCLUDE_DIR ELFUTILS_LIB_dw ELFUTILS_LIB_elf +) + +if(elfutils_FOUND) + foreach(lib dw elf) + if (NOT TARGET elfutils::${lib}) + add_library(elfutils::${lib} UNKNOWN IMPORTED) + set_target_properties(elfutils::${lib} + PROPERTIES + IMPORTED_LOCATION "${ELFUTILS_LIB_${lib}}" + INTERFACE_INCLUDE_DIRECTORIES + "${ELFUTILS_INCLUDE_DIR};${ELFUTILS_INCLUDE_DIR}/elfutils" + ) + if (ELFUTILS_LIB_eu_compat) + target_link_libraries(elfutils::${lib} INTERFACE ${ELFUTILS_LIB_eu_compat}) + endif() + endif() + endforeach() +endif() + +mark_as_advanced(ELFUTILS_INCLUDE_DIR ELFUTILS_LIB_elf ELFUTILS_LIB_dw) + +include(FeatureSummary) +set_package_properties(elfutils PROPERTIES + URL "https://sourceware.org/elfutils/" + DESCRIPTION "a collection of utilities and libraries to read, create and modify ELF binary files") diff --git a/cmake/QtCreatorAPI.cmake b/cmake/QtCreatorAPI.cmake index e03d34f92f..60aac409b2 100644 --- a/cmake/QtCreatorAPI.cmake +++ b/cmake/QtCreatorAPI.cmake @@ -229,6 +229,10 @@ function(finalize_test_setup test_name) list(APPEND env_path $<TARGET_FILE_DIR:libclang>) endif() + if (TARGET elfutils::elf) + list(APPEND env_path $<TARGET_FILE_DIR:elfutils::elf>) + endif() + string(REPLACE "/" "\\" env_path "${env_path}") string(REPLACE ";" "\\;" env_path "${env_path}") @@ -391,10 +395,16 @@ endfunction() # function(add_qtc_library name) - cmake_parse_arguments(_arg "STATIC;OBJECT;SKIP_TRANSLATION;BUILD_BY_DEFAULT" "DESTINATION" + cmake_parse_arguments(_arg "STATIC;OBJECT;SKIP_TRANSLATION;BUILD_BY_DEFAULT;ALLOW_ASCII_CASTS" + "DESTINATION" "DEFINES;DEPENDS;EXTRA_TRANSLATIONS;INCLUDES;PUBLIC_DEFINES;PUBLIC_DEPENDS;PUBLIC_INCLUDES;SOURCES;EXPLICIT_MOC;SKIP_AUTOMOC;PROPERTIES" ${ARGN} ) + set(default_defines_copy ${DEFAULT_DEFINES}) + if (_arg_ALLOW_ASCII_CASTS) + list(REMOVE_ITEM default_defines_copy QT_NO_CAST_TO_ASCII QT_RESTRICTED_CAST_FROM_ASCII) + endif() + if (${_arg_UNPARSED_ARGUMENTS}) message(FATAL_ERROR "add_qtc_library had unparsed arguments") endif() @@ -442,7 +452,7 @@ function(add_qtc_library name) set_public_includes(${name} "${_arg_PUBLIC_INCLUDES}") target_compile_definitions(${name} - PRIVATE ${EXPORT_SYMBOL} ${DEFAULT_DEFINES} ${_arg_DEFINES} ${TEST_DEFINES} + PRIVATE ${EXPORT_SYMBOL} ${default_defines_copy} ${_arg_DEFINES} ${TEST_DEFINES} PUBLIC ${_arg_PUBLIC_DEFINES} ) @@ -813,7 +823,7 @@ function(extend_qtc_plugin target_name) endfunction() function(add_qtc_executable name) - cmake_parse_arguments(_arg "SKIP_INSTALL;SKIP_TRANSLATION" + cmake_parse_arguments(_arg "SKIP_INSTALL;SKIP_TRANSLATION;ALLOW_ASCII_CASTS" "DESTINATION" "DEFINES;DEPENDS;EXTRA_TRANSLATIONS;INCLUDES;SOURCES;PROPERTIES" ${ARGN}) @@ -821,6 +831,11 @@ function(add_qtc_executable name) message(FATAL_ERROR "add_qtc_executable had unparsed arguments!") endif() + set(default_defines_copy ${DEFAULT_DEFINES}) + if (_arg_ALLOW_ASCII_CASTS) + list(REMOVE_ITEM default_defines_copy QT_NO_CAST_TO_ASCII QT_RESTRICTED_CAST_FROM_ASCII) + endif() + update_cached_list(__QTC_EXECUTABLES "${name}") string(TOUPPER "BUILD_EXECUTABLE_${name}" _build_executable_var) @@ -856,7 +871,7 @@ function(add_qtc_executable name) add_executable("${name}" ${_arg_SOURCES}) target_include_directories("${name}" PRIVATE "${CMAKE_BINARY_DIR}/src" ${_arg_INCLUDES}) - target_compile_definitions("${name}" PRIVATE ${_arg_DEFINES} ${TEST_DEFINES} ${DEFAULT_DEFINES}) + target_compile_definitions("${name}" PRIVATE ${default_defines_copy} ${TEST_DEFINES} ${_arg_DEFINES} ) target_link_libraries("${name}" PRIVATE ${_arg_DEPENDS} ${IMPLICIT_DEPENDS}) set(skip_translation OFF) @@ -895,7 +910,10 @@ function(add_qtc_test name) cmake_parse_arguments(_arg "GTEST" "" "DEFINES;DEPENDS;INCLUDES;SOURCES" ${ARGN}) foreach(dependency ${_arg_DEPENDS}) - if (NOT TARGET dependency AND NOT _arg_GTEST) + if (NOT TARGET ${dependency} AND NOT _arg_GTEST) + if (WITH_DEBUG_CMAKE) + message(STATUS "'${dependency}' is not a target") + endif() return() endif() endforeach() @@ -931,6 +949,9 @@ function(add_qtc_test name) endfunction() function(finalize_qtc_gtest test_name) + if (NOT TARGET test_name) + return() + endif() get_target_property(test_sources ${test_name} SOURCES) include(GoogleTest) gtest_add_tests(TARGET ${test_name} SOURCES ${test_sources} TEST_LIST test_list) |