Skip to content

Commit

Permalink
[Windows] cmake: unpack kernels into a build directory (#2347)
Browse files Browse the repository at this point in the history
  • Loading branch information
apwojcik authored Jan 16, 2024
1 parent b73baa1 commit 3a33fe7
Show file tree
Hide file tree
Showing 3 changed files with 74 additions and 82 deletions.
124 changes: 59 additions & 65 deletions CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -399,19 +399,31 @@ option( MIOPEN_DEBUG_FIND_DB_CACHING "Use system find-db caching" ON)
# FOR HANDLING ENABLE/DISABLE OPTIONAL BACKWARD COMPATIBILITY for FILE/FOLDER REORG
option(BUILD_FILE_REORG_BACKWARD_COMPATIBILITY "Build with file/folder reorg with backward compatibility enabled" OFF)

set( MIOPEN_INSTALL_DIR miopen)
set( DATA_INSTALL_DIR ${CMAKE_INSTALL_DATAROOTDIR}/miopen )
if(WIN32)
set( DATA_INSTALL_DIR bin )
set( DATABASE_INSTALL_DIR ${DATA_INSTALL_DIR})
else()
set( MIOPEN_INSTALL_DIR miopen)
set( DATA_INSTALL_DIR ${CMAKE_INSTALL_DATADIR}/${MIOPEN_INSTALL_DIR} )
set( DATABASE_INSTALL_DIR ${DATA_INSTALL_DIR}/db )
endif()

if(MIOPEN_ENABLE_AI_KERNEL_TUNING OR MIOPEN_ENABLE_AI_IMMED_MODE_FALLBACK)
find_package(frugally-deep CONFIG REQUIRED)
find_package(Eigen3 REQUIRED)
endif()

if(WIN32)
set(KERNELS_BINARY_DIR ${PROJECT_BINARY_DIR}/bin)
else()
set(KERNELS_BINARY_DIR ${PROJECT_BINARY_DIR}/${DATABASE_INSTALL_DIR})
endif()

set(MIOPEN_GPU_SYNC Off CACHE BOOL "")
if(BUILD_DEV)
set(MIOPEN_BUILD_DEV 1)
set(MIOPEN_SYSTEM_DB_PATH "${CMAKE_SOURCE_DIR}/src/kernels" CACHE PATH "Default path of system db files")
set(MIOPEN_USER_DB_PATH "${CMAKE_SOURCE_DIR}/src/kernels" CACHE PATH "Default path of user db files")
set(MIOPEN_SYSTEM_DB_PATH "${KERNELS_BINARY_DIR}" CACHE PATH "Default path of system db files")
set(MIOPEN_USER_DB_PATH "${KERNELS_BINARY_DIR}" CACHE PATH "Default path of user db files")
set(MIOPEN_USER_DB_SUFFIX "${MIOPEN_BACKEND}.${MIOpen_VERSION_MAJOR}_${MIOpen_VERSION_MINOR}_${MIOpen_VERSION_PATCH}" CACHE PATH "Filename suffix for the user find-db files")
set(MIOPEN_CACHE_DIR "" CACHE STRING "")
else()
Expand Down Expand Up @@ -466,92 +478,74 @@ elseif(MIOPEN_BACKEND STREQUAL "OpenCL")
set(CPACK_RPM_PACKAGE_CONFLICTS miopen-hip)
endif()

# Unpack DB files
set(KERNELS_SOURCE_DIR ${PROJECT_SOURCE_DIR}/src/kernels)

find_program(UNZIPPER lbzcat bzcat REQUIRED)
file(MAKE_DIRECTORY ${KERNELS_BINARY_DIR})

function(unpack_db db_bzip2_file)
set(KERNELS_DIR "${CMAKE_SOURCE_DIR}/src/kernels")
STRING(REPLACE ".bz2" "" db_file "${db_bzip2_file}")
find_program(UNZIPPER NAMES lbunzip2 bunzip2)
if(EXISTS "${db_file}")
message(STATUS "WARNING: ${db_file} already exists and will be overwritten")
endif()
if(EXISTS "${db_bzip2_file}")
message(STATUS "${UNZIPPER} -k -f ${db_bzip2_file}")
execute_process(
COMMAND ${UNZIPPER} -k -f ${db_bzip2_file}
WORKING_DIRECTORY ${KERNELS_DIR}
RESULT_VARIABLE ret
)
if(NOT ret EQUAL "0")
message(FATAL_ERROR "${db_file} could not be extracted, file is empty!")
execute_process(
COMMAND touch ${db_file}
WORKING_DIRECTORY ${KERNELS_DIR}
)
endif()
endif()
get_filename_component(__fname ${db_bzip2_file} NAME_WLE)
add_custom_command(OUTPUT ${KERNELS_BINARY_DIR}/${__fname}
COMMAND ${UNZIPPER} -k ${db_bzip2_file} > ${KERNELS_BINARY_DIR}/${__fname})
string(REPLACE "." "_" __tname ${__fname})
add_custom_target(generate_${__tname} ALL DEPENDS ${KERNELS_BINARY_DIR}/${__fname})
endfunction()

file(GLOB PERF_DB_BZIP_FILES "${CMAKE_SOURCE_DIR}/src/kernels/*.db.bz2")
file(GLOB PERF_DB_BZIP_FILES CONFIGURE_DEPENDS "${KERNELS_SOURCE_DIR}/*.db.bz2")
foreach(DB_BZIP_FILE ${PERF_DB_BZIP_FILES})
unpack_db(${DB_BZIP_FILE})
endforeach()

file(GLOB FIND_DB_BZIP_FILES "${CMAKE_SOURCE_DIR}/src/kernels/*.fdb.txt.bz2")
file(GLOB FIND_DB_BZIP_FILES CONFIGURE_DEPENDS "${KERNELS_SOURCE_DIR}/*.fdb.txt.bz2")
foreach(DB_BZIP_FILE ${FIND_DB_BZIP_FILES})
unpack_db(${DB_BZIP_FILE})
endforeach()

# Begin KDB component install
function(install_kdb)
set(oneValueArgs NAME COMPONENT_NAME)
cmake_parse_arguments(PARSE "" "${oneValueArgs}" "" ${ARGN})
# Begin KDB package creation

if(PARSE_NAME)
set(FILE_NAME ${PARSE_NAME})
endif()
STRING(REPLACE - _ FILE_NAME "${ARCH_NAME}")
file(READ "${CMAKE_SOURCE_DIR}/src/kernels/${FILE_NAME}.kdb.bz2" FILE_CONTENTS LIMIT 7)
string(STRIP "${FILE_CONTENTS}" FILE_CONTENTS)
if(FILE_CONTENTS STREQUAL "version")
set(LFS_MISSING_FILES ${LFS_MISSING_FILES} ${FILE_NAME}.kdb.bz2 PARENT_SCOPE)
function(install_kdb FILE_NAME COMPONENT_NAME)
file(READ ${FILE_NAME} __contents LIMIT 7)
get_filename_component(__fname ${FILE_NAME} NAME_WLE)
if(__contents MATCHES "version")
list(APPEND LFS_MISSING_FILES ${__fname})
else()
unpack_db("${CMAKE_SOURCE_DIR}/src/kernels/${FILE_NAME}.kdb.bz2")
message("Installing ${FILE_NAME} in component ${PARSE_COMPONENT_NAME}")
unpack_db(${FILE_NAME})
if( NOT ENABLE_ASAN_PACKAGING )
rocm_install(FILES
src/kernels/${FILE_NAME}.kdb
DESTINATION ${DATA_INSTALL_DIR}/db
COMPONENT ${PARSE_COMPONENT_NAME})
rocm_install(FILES ${KERNELS_BINARY_DIR}/${__fname}
DESTINATION ${DATABASE_INSTALL_DIR}
COMPONENT ${COMPONENT_NAME})
endif()
set(CPACK_COMPONENTS_ALL
"${CPACK_COMPONENTS_ALL};${__component}" PARENT_SCOPE)
endif()
endfunction()

# Both the lists below should be in sync always
list(APPEND ARCH_LST gfx90a gfx1030 gfx908 gfx906 gfx900)
list(APPEND ARCH_FILE_LST gfx90akdb gfx1030kdb gfx908kdb gfx906kdb gfx900kdb)

list(LENGTH ARCH_LST FULL_LEN)
math(EXPR ARCH_LST_LEN "${FULL_LEN} - 1")
set(KDB_BZ2_FILES gfx90a.kdb.bz2 gfx1030.kdb.bz2 gfx908.kdb.bz2 gfx906.kdb.bz2 gfx900.kdb.bz2)
set(COMPONENT_LST gfx90akdb gfx1030kdb gfx908kdb gfx906kdb gfx900kdb)


foreach(IDX RANGE ${ARCH_LST_LEN})
list(GET ARCH_LST ${IDX} ARCH_NAME)
list(GET ARCH_FILE_LST ${IDX} ARCH_FILE_NAME)
install_kdb(
NAME ${ARCH_NAME}
COMPONENT_NAME ${ARCH_FILE_NAME}
)
endforeach()
if(CMAKE_VERSION VERSION_GREATER_EQUAL 3.17)
foreach(__file __component IN ZIP_LISTS KDB_BZ2_FILES COMPONENT_LST)
install_kdb(${KERNELS_SOURCE_DIR}/${__file} ${__component})
endforeach()
else()
# TODO: Upgrade minimum CMake to version 3.17+ and use IN ZIP_LISTS instead
list(LENGTH KDB_BZ2_FILES __length)
math(EXPR __high "${__length} - 1")
foreach(__index RANGE ${__high})
list(GET COMPONENT_LST ${__index} __component)
list(GET KDB_BZ2_FILES ${__index} __file)
install_kdb(${KERNELS_SOURCE_DIR}/${__file} ${__component})
endforeach()
endif()

if(LFS_MISSING_FILES)
string(REPLACE ";" "; " LFS_MISSING_FILES "${LFS_MISSING_FILES}")
message(WARNING "GIT LFS Files not pulled down, skipped: ${LFS_MISSING_FILES}")
string(REPLACE ";" ", " __lfs_missing_files "${LFS_MISSING_FILES}")
message(WARNING "GIT LFS files not pulled down, skipped: ${__lfs_missing_files}")
set(MIOPEN_NO_LFS_PULLED TRUE CACHE INTERNAL "")
else()
set(CPACK_COMPONENTS_ALL ${ARCH_FILE_LST})
endif()

#end kdb package creation
# End KDB package creation

rocm_create_package(
NAME MIOpen-${MIOPEN_BACKEND}
Expand Down
26 changes: 12 additions & 14 deletions src/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -743,20 +743,18 @@ endif()
if(MIOPEN_ENABLE_AI_KERNEL_TUNING OR MIOPEN_ENABLE_AI_IMMED_MODE_FALLBACK)
target_link_libraries(MIOpen PRIVATE frugally-deep::fdeep Eigen3::Eigen)
if(NOT TARGET nlohmann_json)
# frugally-deep has broken linking to nlohmann_json
# frugally-deep has broken linking to nlohmann_json
add_library(nlohmann_json INTERFACE IMPORTED GLOBAL)
target_link_libraries(nlohmann_json INTERFACE nlohmann_json::nlohmann_json)
endif()
if(NOT BUILD_DEV)
file(GLOB MODEL_FILES kernels/*.model)
if( NOT ENABLE_ASAN_PACKAGING )
install(FILES ${MODEL_FILES} DESTINATION ${DATA_INSTALL_DIR}/db)
endif ()
foreach(MODEL_FILE ${MODEL_FILES})
get_filename_component(MODEL_FILE_FILENAME "${MODEL_FILE}" NAME)
configure_file("${MODEL_FILE}" "${PROJECT_BINARY_DIR}/share/miopen/db/${MODEL_FILE_FILENAME}" COPYONLY)
endforeach()
target_link_libraries(nlohmann_json INTERFACE nlohmann_json::nlohmann_json)
endif()
file(GLOB MODEL_FILES CONFIGURE_DEPENDS kernels/*.model)
if(NOT ENABLE_ASAN_PACKAGING )
install(FILES ${MODEL_FILES} DESTINATION ${DATABASE_INSTALL_DIR})
endif()
foreach(MODEL_FILE ${MODEL_FILES})
get_filename_component(MODEL_FILE_FILENAME "${MODEL_FILE}" NAME)
configure_file("${MODEL_FILE}" "${PROJECT_BINARY_DIR}/${DATABASE_INSTALL_DIR}/${MODEL_FILE_FILENAME}" COPYONLY)
endforeach()
endif()

############################################################
Expand Down Expand Up @@ -921,11 +919,11 @@ endif()
if( NOT ENABLE_ASAN_PACKAGING )
install(FILES
${FIND_DB_FILES}
DESTINATION ${DATA_INSTALL_DIR}/db)
DESTINATION ${DATABASE_INSTALL_DIR})
endif()
foreach(DB_FILE ${FIND_DB_FILES})
get_filename_component(DB_FILE_FILENAME "${DB_FILE}" NAME)
configure_file("${DB_FILE}" "${PROJECT_BINARY_DIR}/share/miopen/db/${DB_FILE_FILENAME}" COPYONLY)
configure_file("${DB_FILE}" "${PROJECT_BINARY_DIR}/${DATABASE_INSTALL_DIR}/${DB_FILE_FILENAME}" COPYONLY)
endforeach()

endif()
Expand Down
6 changes: 3 additions & 3 deletions test/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -35,19 +35,19 @@ if( NOT ENABLE_ASAN_PACKAGING )
endif()

set(MODEL_FILES)
file (GLOB model_src perf_models/*.txt)
file (GLOB model_src CONFIGURE_DEPENDS perf_models/*.txt)
foreach (src ${model_src})
list (APPEND MODEL_FILES ${src})
endforeach()

if( NOT ENABLE_ASAN_PACKAGING )
install(FILES
${MODEL_FILES}
DESTINATION ${DATA_INSTALL_DIR}/perf_models)
DESTINATION ${DATA_INSTALL_DIR}/perf_models)
endif()
foreach(MODEL_FILE ${MODEL_FILES})
get_filename_component(MODEL_FILE_FILENAME "${MODEL_FILE}" NAME)
configure_file("${MODEL_FILE}" "${PROJECT_BINARY_DIR}/share/miopen/perf_models/${MODEL_FILE_FILENAME}" COPYONLY)
configure_file("${MODEL_FILE}" "${PROJECT_BINARY_DIR}/${DATA_INSTALL_DIR}/perf_models/${MODEL_FILE_FILENAME}" COPYONLY)
endforeach()

include(CheckCXXCompilerFlag)
Expand Down

0 comments on commit 3a33fe7

Please sign in to comment.