0e93099fd7
* [rocprofv3] rocpd SQLite3 database output support
* Move counters xml and yaml to source/share/rocprofiler-sdk
- more representative of install hierarchy
* Add share/rocprofiler-sdk/rocpd SQL files
* Experimental rocprofiler-sdk SQL API
* rocprofv3 default output format is rocpd
* Fix rocpd event ids for counter collection w/o kernel dispatch
* Remove fktable entries from rocpd_tables.sql
* Fix rocpd schema path
* Fix install component for roctx python bindings
* rocprofiler-sdk-rocpd
- create include/rocprofiler-sdk-rocpd
- create rocprofiler-sdk-rocpd library, package, etc.
- default all "guid" fields to "{{guid}}" in tables
- remove "{{view_uuid}}" support (always unused)
* Migrate rocprofv3 to use rocprofiler-sdk-rocpd
* Fix missing foreign key reference
* Revert change
* Fix cmake comment
* Fix maybe-uninitialized compiler warning
* Fix maybe-uninitialized compiler warning
* Add logging to rocpd_sql_load_schema
* Improve string sanitization when inserting json strings
* Initialize rocpd logging on rocprofiler-sdk-rocpd library load
* Revert lib/output/generatePerfetto.cpp changes
* [temporary] Tweak rocprofv3-test-list-avail-trace-execute test log level
* Update get_install_path for lib/rocprofiler-sdk-rocpd/sql.cpp
- try to resolve issues on RHEL/SLES for dladdr
* Update lib/common/logging.cpp
- enable environ overrides
* dlsym for rocpd_sql_load_schema
* Make dl_info.dli_fname lexically normal
* Implement node_info alternatives if /etc/machine-id does not exist
* Misc include fixes
* SHA256 and UUIDv7 support
* Implement UUIDv7 in generateRocpd.cpp
* Support push/pop environment variables
* Minor tweak
* Fix glog segfaults when unsetting glog env
* Updated CHANGELOG
* Updates tests/pytest-packages
- rocpd_reader.py: RocpdReader
* Update tests / marker_views.sql
- add test_rocpd_data
* Update rocpd_tables.sql
- Use AUTOINCREMENT
- insert "uuid" and "guid" into rocpd_metadata
* Minor updates to generateRocpd.cpp
- don't quote GUID
- use sqlite3_open_v2
- use sqlite3_close_v2
* Update execute_raw_sql_statements_impl
- uses sqlite3_last_insert_rowid for autoincrement
* Update SQL deferred_transaction
- CI check for nullptr to connection
* Apply suggestions from code review
Co-authored-by: Welton, Benjamin <Benjamin.Welton@amd.com>
* Code review updates
- formatting
- replace if with switch
- remove loop for {{uuid}}
* Fix pmc_groups handling in rocprofv3
* Address code review feedback
- Include rocm_version in rocprofv3 version info
- Note `--version` option for `rocprofv3` in CHANGELOG.md
- remove commented out code
* Fix packaging dependencies
* Fix install package step of CI workflow
* Fix install package step of CI workflow
---------
Co-authored-by: Jonathan R. Madsen <jonathanrmadsen@gmail.com>
Co-authored-by: Welton, Benjamin <Benjamin.Welton@amd.com>
[ROCm/rocprofiler-sdk commit: 7afedc63be]
253 خطوط
9.6 KiB
CMake
253 خطوط
9.6 KiB
CMake
#
|
|
# functions/macros for python
|
|
#
|
|
|
|
include_guard(DIRECTORY)
|
|
|
|
macro(rocprofiler_reset_python3_cache)
|
|
foreach(
|
|
_VAR
|
|
_Python3_Compiler_REASON_FAILURE
|
|
_Python3_Development_REASON_FAILURE
|
|
_Python3_EXECUTABLE
|
|
_Python3_INCLUDE_DIR
|
|
_Python3_INTERPRETER_PROPERTIES
|
|
_Python3_INTERPRETER_SIGNATURE
|
|
_Python3_LIBRARY_RELEASE
|
|
_Python3_NumPy_REASON_FAILURE
|
|
Python3_EXECUTABLE
|
|
Python3_INCLUDE_DIR
|
|
Python3_INTERPRETER_ID
|
|
Python3_STDLIB
|
|
Python3_STDARCH
|
|
Python3_SITELIB
|
|
Python3_SOABI
|
|
${ARGN})
|
|
unset(${_VAR} CACHE)
|
|
unset(${_VAR})
|
|
endforeach()
|
|
endmacro()
|
|
|
|
macro(rocprofiler_find_python3 _VERSION)
|
|
rocprofiler_reset_python3_cache()
|
|
|
|
if("${_VERSION}" MATCHES "^([0-9]+)\\.([0-9]+)\\.([0-9]+)$")
|
|
find_package(Python3 ${_VERSION} EXACT ${_ARGN} REQUIRED MODULE
|
|
COMPONENTS Interpreter Development)
|
|
elseif("${_VERSION}" MATCHES "^([0-9]+)\\.([0-9]+)$")
|
|
find_package(Python3 ${_VERSION}.0...${_VERSION}.999 ${_ARGN} REQUIRED MODULE
|
|
COMPONENTS Interpreter Development)
|
|
else()
|
|
message(
|
|
FATAL_ERROR
|
|
"Invalid Python3 version (${_VERSION}). Specify <MAJOR>.<MINOR> or <MAJOR>.<MINOR>.<PATCH>"
|
|
)
|
|
endif()
|
|
endmacro()
|
|
|
|
# make sure we have all python version candidates
|
|
set(ROCPROFILER_PYTHON_VERSION_CANDIDATES
|
|
"3.20;3.19;3.18;3.17;3.16;3.15;3.14;3.13;3.12;3.11;3.10;3.9;3.8;3.7;3.6"
|
|
CACHE STRING "Python versions to search for, newest first")
|
|
|
|
function(get_default_python_versions _VAR)
|
|
rocprofiler_reset_python3_cache()
|
|
|
|
set(_PYTHON_FOUND_VERSIONS)
|
|
|
|
foreach(_VER IN LISTS ROCPROFILER_PYTHON_VERSION_CANDIDATES)
|
|
find_package(Python3 ${_VER} EXACT COMPONENTS Interpreter Development)
|
|
if(Python3_FOUND)
|
|
list(APPEND _PYTHON_FOUND_VERSIONS
|
|
"${Python3_VERSION_MAJOR}.${Python3_VERSION_MINOR}")
|
|
endif()
|
|
endforeach()
|
|
|
|
# If none found, do one last check for 3.6 (no EXACT)
|
|
if(NOT _PYTHON_FOUND_VERSIONS)
|
|
find_package(Python3 3.6 COMPONENTS Interpreter Development)
|
|
if(Python3_FOUND)
|
|
list(APPEND _PYTHON_FOUND_VERSIONS
|
|
"${Python3_VERSION_MAJOR}.${Python3_VERSION_MINOR}")
|
|
endif()
|
|
endif()
|
|
|
|
# Set the output variable to the first found version, if any
|
|
if(_PYTHON_FOUND_VERSIONS)
|
|
set(${_VAR}
|
|
"${_PYTHON_FOUND_VERSIONS}"
|
|
PARENT_SCOPE)
|
|
endif()
|
|
|
|
rocprofiler_reset_python3_cache()
|
|
endfunction()
|
|
|
|
function(rocprofiler_roctx_python_bindings _VERSION)
|
|
message(
|
|
STATUS "Creating rocprofiler-sdk roctx python bindings for python ${_VERSION}")
|
|
|
|
rocprofiler_find_python3(${_VERSION})
|
|
|
|
set(roctx_PYTHON_INSTALL_DIRECTORY
|
|
${CMAKE_INSTALL_LIBDIR}/python${Python3_VERSION_MAJOR}.${Python3_VERSION_MINOR}/site-packages/roctx
|
|
)
|
|
set(roctx_PYTHON_OUTPUT_DIRECTORY
|
|
${PROJECT_BINARY_DIR}/${roctx_PYTHON_INSTALL_DIRECTORY})
|
|
set(roctx_PYTHON_SOURCES __init__.py context_decorators.py)
|
|
|
|
foreach(_SOURCE ${roctx_PYTHON_SOURCES})
|
|
configure_file(${CMAKE_CURRENT_LIST_DIR}/${_SOURCE}
|
|
${roctx_PYTHON_OUTPUT_DIRECTORY}/${_SOURCE} COPYONLY)
|
|
install(
|
|
FILES ${roctx_PYTHON_OUTPUT_DIRECTORY}/${_SOURCE}
|
|
DESTINATION ${roctx_PYTHON_INSTALL_DIRECTORY}
|
|
COMPONENT roctx)
|
|
endforeach()
|
|
|
|
add_library(rocprofiler-sdk-roctx-python-bindings-${_VERSION} MODULE)
|
|
target_sources(rocprofiler-sdk-roctx-python-bindings-${_VERSION}
|
|
PRIVATE libpyroctx.cpp)
|
|
target_include_directories(rocprofiler-sdk-roctx-python-bindings-${_VERSION} SYSTEM
|
|
PRIVATE ${Python3_INCLUDE_DIRS})
|
|
target_link_libraries(
|
|
rocprofiler-sdk-roctx-python-bindings-${_VERSION}
|
|
PRIVATE rocprofiler-sdk-roctx::rocprofiler-sdk-roctx-shared-library
|
|
rocprofiler-sdk::rocprofiler-sdk-pybind11 ${Python3_LIBRARIES})
|
|
|
|
set_target_properties(
|
|
rocprofiler-sdk-roctx-python-bindings-${_VERSION}
|
|
PROPERTIES OUTPUT_NAME libpyroctx
|
|
RUNTIME_OUTPUT_DIRECTORY ${roctx_PYTHON_OUTPUT_DIRECTORY}
|
|
LIBRARY_OUTPUT_DIRECTORY ${roctx_PYTHON_OUTPUT_DIRECTORY}
|
|
ARCHIVE_OUTPUT_DIRECTORY ${roctx_PYTHON_OUTPUT_DIRECTORY}
|
|
PDB_OUTPUT_DIRECTORY ${roctx_PYTHON_OUTPUT_DIRECTORY}
|
|
PREFIX ""
|
|
SUFFIX ".${Python3_SOABI}${CMAKE_SHARED_LIBRARY_SUFFIX}"
|
|
BUILD_RPATH "${DEFAULT_PYTHON_RPATH}"
|
|
INSTALL_RPATH "${DEFAULT_PYTHON_RPATH}")
|
|
|
|
install(
|
|
TARGETS rocprofiler-sdk-roctx-python-bindings-${_VERSION}
|
|
DESTINATION ${roctx_PYTHON_INSTALL_DIRECTORY}
|
|
COMPONENT roctx)
|
|
endfunction()
|
|
|
|
function(rocprofiler_rocpd_python_bindings_target_sources _VERSION)
|
|
target_sources(rocprofiler-sdk-rocpd-python-bindings-${_VERSION} ${ARGN})
|
|
endfunction()
|
|
|
|
function(rocprofiler_rocpd_python_bindings _VERSION)
|
|
message(
|
|
STATUS "Creating rocprofiler-sdk rocpd python bindings for python ${_VERSION}")
|
|
rocprofiler_find_python3(${_VERSION})
|
|
|
|
set(rocpd_PYTHON_INSTALL_DIRECTORY
|
|
${CMAKE_INSTALL_LIBDIR}/python${Python3_VERSION_MAJOR}.${Python3_VERSION_MINOR}/site-packages/rocpd
|
|
)
|
|
set(rocpd_PYTHON_OUTPUT_DIRECTORY
|
|
${PROJECT_BINARY_DIR}/${rocpd_PYTHON_INSTALL_DIRECTORY})
|
|
set(rocpd_PYTHON_SOURCES
|
|
chrome_tracing.py
|
|
csv.py
|
|
importer.py
|
|
__init__.py
|
|
__main__.py
|
|
output_config.py
|
|
pftrace.py
|
|
schema.py
|
|
time_window.py)
|
|
set(rocpd_SCHEMA_SOURCES
|
|
schema_data/data_views.sql schema_data/marker_views.sql
|
|
schema_data/rocpd_indexes.sql schema_data/rocpd_tables.sql
|
|
schema_data/rocpd_views.sql schema_data/summary_views.sql)
|
|
|
|
foreach(_SOURCE ${rocpd_PYTHON_SOURCES})
|
|
configure_file(${CMAKE_CURRENT_LIST_DIR}/${_SOURCE}
|
|
${rocpd_PYTHON_OUTPUT_DIRECTORY}/${_SOURCE} COPYONLY)
|
|
install(
|
|
FILES ${rocpd_PYTHON_OUTPUT_DIRECTORY}/${_SOURCE}
|
|
DESTINATION ${rocpd_PYTHON_INSTALL_DIRECTORY}
|
|
COMPONENT core)
|
|
endforeach()
|
|
|
|
foreach(_SOURCE ${rocpd_SCHEMA_SOURCES})
|
|
configure_file(${CMAKE_CURRENT_LIST_DIR}/${_SOURCE}
|
|
${rocpd_PYTHON_OUTPUT_DIRECTORY}/${_SOURCE} COPYONLY)
|
|
install(
|
|
FILES ${rocpd_PYTHON_OUTPUT_DIRECTORY}/${_SOURCE}
|
|
DESTINATION ${rocpd_PYTHON_INSTALL_DIRECTORY}/schema_data
|
|
COMPONENT core)
|
|
endforeach()
|
|
|
|
add_library(rocprofiler-sdk-rocpd-python-bindings-${_VERSION} MODULE)
|
|
target_sources(
|
|
rocprofiler-sdk-rocpd-python-bindings-${_VERSION}
|
|
PRIVATE libpyrocpd.cpp libpyrocpd.hpp
|
|
$<TARGET_OBJECTS:rocprofiler-sdk::rocprofiler-sdk-object-library>)
|
|
target_include_directories(rocprofiler-sdk-rocpd-python-bindings-${_VERSION} SYSTEM
|
|
PRIVATE ${Python3_INCLUDE_DIRS})
|
|
target_link_libraries(
|
|
rocprofiler-sdk-rocpd-python-bindings-${_VERSION}
|
|
PRIVATE rocprofiler-sdk::rocprofiler-sdk-headers
|
|
rocprofiler-sdk::rocprofiler-sdk-build-flags
|
|
rocprofiler-sdk::rocprofiler-sdk-memcheck
|
|
rocprofiler-sdk::rocprofiler-sdk-common-library
|
|
rocprofiler-sdk::rocprofiler-sdk-output-library
|
|
rocprofiler-sdk::rocprofiler-sdk-cereal
|
|
rocprofiler-sdk::rocprofiler-sdk-perfetto
|
|
rocprofiler-sdk::rocprofiler-sdk-otf2
|
|
rocprofiler-sdk::rocprofiler-sdk-sqlite3
|
|
rocprofiler-sdk::rocprofiler-sdk-pybind11
|
|
rocprofiler-sdk::rocprofiler-sdk-gotcha
|
|
rocprofiler-sdk::rocprofiler-sdk-dw
|
|
rocprofiler-sdk::rocprofiler-sdk-static-library
|
|
${Python3_LIBRARIES})
|
|
|
|
set_target_properties(
|
|
rocprofiler-sdk-rocpd-python-bindings-${_VERSION}
|
|
PROPERTIES OUTPUT_NAME libpyrocpd
|
|
RUNTIME_OUTPUT_DIRECTORY ${rocpd_PYTHON_OUTPUT_DIRECTORY}
|
|
LIBRARY_OUTPUT_DIRECTORY ${rocpd_PYTHON_OUTPUT_DIRECTORY}
|
|
ARCHIVE_OUTPUT_DIRECTORY ${rocpd_PYTHON_OUTPUT_DIRECTORY}
|
|
PDB_OUTPUT_DIRECTORY ${rocpd_PYTHON_OUTPUT_DIRECTORY}
|
|
PREFIX ""
|
|
SUFFIX ".${Python3_SOABI}${CMAKE_SHARED_LIBRARY_SUFFIX}"
|
|
BUILD_RPATH "${DEFAULT_PYTHON_RPATH}"
|
|
INSTALL_RPATH "${DEFAULT_PYTHON_RPATH}")
|
|
|
|
install(
|
|
TARGETS rocprofiler-sdk-rocpd-python-bindings-${_VERSION}
|
|
DESTINATION ${rocpd_PYTHON_INSTALL_DIRECTORY}
|
|
COMPONENT core)
|
|
endfunction()
|
|
|
|
function(rocprofiler_rocpd_python_packaging _VERSION)
|
|
message(
|
|
STATUS "Creating rocprofiler-sdk rocpd python packaging for python ${_VERSION}")
|
|
rocprofiler_find_python3(${_VERSION})
|
|
|
|
add_custom_target(
|
|
rocprofiler-sdk-rocpd-${Python3_VERSION_MAJOR}.${Python3_VERSION_MINOR} ALL
|
|
${Python3_EXECUTABLE}
|
|
-m
|
|
pip
|
|
install
|
|
-q
|
|
-q
|
|
--prefix
|
|
${PROJECT_BINARY_DIR}
|
|
-I
|
|
${CMAKE_CURRENT_BINARY_DIR}
|
|
WORKING_DIRECTORY ${PROJECT_BINARY_DIR}
|
|
COMMENT
|
|
"Packaging rocpd for python${Python3_VERSION_MAJOR}.${Python3_VERSION_MINOR}..."
|
|
)
|
|
|
|
install(
|
|
DIRECTORY
|
|
${PROJECT_BINARY_DIR}/${CMAKE_INSTALL_LIBDIR}/python${Python3_VERSION_MAJOR}.${Python3_VERSION_MINOR}
|
|
DESTINATION ${CMAKE_INSTALL_LIBDIR}
|
|
USE_SOURCE_PERMISSIONS
|
|
COMPONENT core)
|
|
endfunction()
|