aboutsummaryrefslogtreecommitdiffstats
path: root/cmake
diff options
context:
space:
mode:
authorCristian Adam <cristian.adam@qt.io>2020-01-24 17:09:56 +0100
committerCristian Adam <cristian.adam@qt.io>2020-01-28 14:18:19 +0000
commite6e0b0ca3bf77826e2ce2ca05776f2809f99931d (patch)
tree02f8b546f0633c75a1db1dd34f364ee1d3f185ec /cmake
parent4da23c74910611ed99d18f9dfc8ff12194cbfd52 (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.cmake70
-rw-r--r--cmake/QtCreatorAPI.cmake31
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)