@@ -12,6 +12,11 @@ set(PY_BUILD_DIR "python_package")
1212# additionally defined in pyproject.toml
1313set (PY_PACKAGE_DIR "${PY_BUILD_DIR} /amdsmi" )
1414set (PY_WRAPPER_INSTALL_DIR "${SHARE_INSTALL_PREFIX} " CACHE STRING "Wrapper installation directory" )
15+ set (AMDSMI_PYTHON_LIB_NAME "libamd_smi.so" )
16+ if (BUILD_PYTHON_LIB)
17+ set (AMDSMI_PYTHON_LIB_NAME "libamd_smi_python.so" )
18+ endif ()
19+ set (AMDSMI_PYTHON_LIB_PATH "${PROJECT_BINARY_DIR} /src/${AMDSMI_PYTHON_LIB_NAME} " )
1520
1621# try to find clang of the right version
1722set (GOOD_CLANG_FOUND FALSE )
@@ -35,6 +40,8 @@ if(NOT GOOD_CLANG_FOUND)
3540 AUTHOR_WARNING
3641 "A wrapper will not be re-generated! Using old wrapper instead.\n Set -DBUILD_WRAPPER=ON to re-build the wrapper"
3742 )
43+ # Still need Python3 for building the wheel package
44+ find_package (Python3 3.6 COMPONENTS Interpreter REQUIRED )
3845 add_custom_command (
3946 OUTPUT amdsmi_wrapper.py ${PY_PACKAGE_DIR} /amdsmi_wrapper.py
4047 DEPENDS ${AMD_SMI} ${CMAKE_CURRENT_SOURCE_DIR} /amdsmi_wrapper.py
@@ -54,18 +61,22 @@ else()
5461 add_custom_command (
5562 OUTPUT amdsmi.h ${CMAKE_CURRENT_SOURCE_DIR} /amdsmi_wrapper.py amdsmi_wrapper.py
5663 ${PY_PACKAGE_DIR} /amdsmi_wrapper.py
57- DEPENDS ${AMD_SMI} python_pre_reqs generator.py ${PROJECT_SOURCE_DIR} /include/amd_smi/amdsmi.h
64+ DEPENDS ${AMD_SMI} $<$< BOOL : ${BUILD_PYTHON_LIB} >: ${AMD_SMI} _python > python_pre_reqs generator.py ${PROJECT_SOURCE_DIR} /include/amd_smi/amdsmi.h
5865 COMMAND cp ${PROJECT_SOURCE_DIR} /include/amd_smi/amdsmi.h ./
59- COMMAND ${Python3_EXECUTABLE} generator.py "$<$<BOOL :${ENABLE_ESMI_LIB} >:-e -DENABLE_ESMI_LIB >" -i amdsmi.h -l
60- ${PROJECT_BINARY_DIR} /src/libamd_smi.so -o ${CMAKE_CURRENT_SOURCE_DIR} /amdsmi_wrapper.py
66+ COMMAND ${CMAKE_COMMAND} -E env AMDSMI_FIND_LIB_PATH=${CMAKE_CURRENT_BINARY_DIR}/${PY_PACKAGE_DIR}/_find_lib.py
67+ ${Python3_EXECUTABLE} generator.py "$<$<BOOL :${ENABLE_ESMI_LIB} >:-e -DENABLE_ESMI_LIB >" -i amdsmi.h -l
68+ ${AMDSMI_PYTHON_LIB_PATH} -o ${CMAKE_CURRENT_SOURCE_DIR} /amdsmi_wrapper.py
6169 COMMAND mkdir -p ${PY_PACKAGE_DIR}
6270 COMMAND ${CMAKE_COMMAND} -E copy_if_different ${CMAKE_CURRENT_SOURCE_DIR} /amdsmi_wrapper.py ${PY_PACKAGE_DIR} / )
6371endif ()
6472
6573# populate version string
6674configure_file (pyproject.toml.in ${PY_BUILD_DIR} /pyproject.toml @ONLY )
75+ configure_file (setup.cfg.in ${PY_BUILD_DIR} /setup.cfg @ONLY )
6776configure_file (_version.py.in ${PY_PACKAGE_DIR} /_version.py @ONLY )
68- configure_file (setup.py.in ${PY_BUILD_DIR} /setup.py @ONLY )
77+ if (BUILD_PYTHON_LIB)
78+ configure_file (_find_lib.py.in ${PY_PACKAGE_DIR} /_find_lib.py @ONLY )
79+ endif ()
6980
7081add_custom_target (python_wrapper DEPENDS amdsmi_wrapper.py )
7182
@@ -81,24 +92,38 @@ add_custom_command(
8192 COMMAND ${CMAKE_COMMAND} -E copy_if_different ${PROJECT_SOURCE_DIR} /LICENSE ${PY_PACKAGE_DIR} / )
8293
8394# copy libamd_smi.so to allow for a self-contained python package
84- add_custom_command (OUTPUT ${PY_PACKAGE_DIR} /libamd_smi.so DEPENDS ${PROJECT_BINARY_DIR} /src/libamd_smi.so
85- COMMAND cp "${PROJECT_BINARY_DIR} /src/libamd_smi.so " ${PY_PACKAGE_DIR} / )
95+ add_custom_command (OUTPUT ${PY_PACKAGE_DIR} /${AMDSMI_PYTHON_LIB_NAME} DEPENDS ${AMDSMI_PYTHON_LIB_PATH}
96+ COMMAND cp "${AMDSMI_PYTHON_LIB_PATH} " ${PY_PACKAGE_DIR} / )
8697
8798add_custom_target (
8899 python_package ALL
89100 DEPENDS ${PY_BUILD_DIR} /pyproject.toml
90- ${PY_BUILD_DIR} /setup.py
101+ ${PY_BUILD_DIR} /setup.cfg
91102 ${PY_PACKAGE_DIR} /_version.py
92103 ${PY_PACKAGE_DIR} /__init__.py
93104 ${PY_PACKAGE_DIR} /amdsmi_exception.py
94105 ${PY_PACKAGE_DIR} /amdsmi_interface.py
95106 ${PY_PACKAGE_DIR} /README.md
96107 ${PY_PACKAGE_DIR} /LICENSE
97- ${PY_PACKAGE_DIR} /libamd_smi.so )
108+ ${PY_PACKAGE_DIR} /${AMDSMI_PYTHON_LIB_NAME}
109+ $<$<BOOL :${BUILD_PYTHON_LIB} >:${PY_PACKAGE_DIR} /_find_lib .py >)
110+ if (BUILD_PYTHON_LIB)
111+ add_dependencies (python_package ${AMD_SMI} _python )
112+ endif ()
113+
114+ # Build a wheel into the binary dir (no deps, local artifacts only)
115+ add_custom_target (
116+ python_wheel ALL
117+ DEPENDS python_package
118+ COMMAND ${CMAKE_COMMAND} -E env PYTHONPATH=${CMAKE_CURRENT_BINARY_DIR}/${PY_BUILD_DIR}
119+ ${Python3_EXECUTABLE} -m pip wheel --no-deps -w ${CMAKE_CURRENT_BINARY_DIR} /${PY_BUILD_DIR}
120+ ${CMAKE_CURRENT_BINARY_DIR} /${PY_BUILD_DIR}
121+ WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR} /${PY_BUILD_DIR}
122+ COMMENT "Building amdsmi wheel without dependencies" )
98123
99124install (
100125 FILES ${CMAKE_CURRENT_BINARY_DIR} /${PY_BUILD_DIR} /pyproject.toml
101- ${CMAKE_CURRENT_BINARY_DIR} /${PY_BUILD_DIR} /setup.py ${CMAKE_CURRENT_BINARY_DIR} / ${ PY_PACKAGE_DIR} /_version.py
126+ ${CMAKE_CURRENT_BINARY_DIR} /${PY_PACKAGE_DIR} /_version.py
102127 DESTINATION ${PY_WRAPPER_INSTALL_DIR}
103128 COMPONENT dev)
104129
0 commit comments