Skip to content

Commit 3a33fe7

Browse files
authored
[Windows] cmake: unpack kernels into a build directory (#2347)
1 parent b73baa1 commit 3a33fe7

File tree

3 files changed

+74
-82
lines changed

3 files changed

+74
-82
lines changed

CMakeLists.txt

Lines changed: 59 additions & 65 deletions
Original file line numberDiff line numberDiff line change
@@ -399,19 +399,31 @@ option( MIOPEN_DEBUG_FIND_DB_CACHING "Use system find-db caching" ON)
399399
# FOR HANDLING ENABLE/DISABLE OPTIONAL BACKWARD COMPATIBILITY for FILE/FOLDER REORG
400400
option(BUILD_FILE_REORG_BACKWARD_COMPATIBILITY "Build with file/folder reorg with backward compatibility enabled" OFF)
401401

402-
set( MIOPEN_INSTALL_DIR miopen)
403-
set( DATA_INSTALL_DIR ${CMAKE_INSTALL_DATAROOTDIR}/miopen )
402+
if(WIN32)
403+
set( DATA_INSTALL_DIR bin )
404+
set( DATABASE_INSTALL_DIR ${DATA_INSTALL_DIR})
405+
else()
406+
set( MIOPEN_INSTALL_DIR miopen)
407+
set( DATA_INSTALL_DIR ${CMAKE_INSTALL_DATADIR}/${MIOPEN_INSTALL_DIR} )
408+
set( DATABASE_INSTALL_DIR ${DATA_INSTALL_DIR}/db )
409+
endif()
404410

405411
if(MIOPEN_ENABLE_AI_KERNEL_TUNING OR MIOPEN_ENABLE_AI_IMMED_MODE_FALLBACK)
406412
find_package(frugally-deep CONFIG REQUIRED)
407413
find_package(Eigen3 REQUIRED)
408414
endif()
409415

416+
if(WIN32)
417+
set(KERNELS_BINARY_DIR ${PROJECT_BINARY_DIR}/bin)
418+
else()
419+
set(KERNELS_BINARY_DIR ${PROJECT_BINARY_DIR}/${DATABASE_INSTALL_DIR})
420+
endif()
421+
410422
set(MIOPEN_GPU_SYNC Off CACHE BOOL "")
411423
if(BUILD_DEV)
412424
set(MIOPEN_BUILD_DEV 1)
413-
set(MIOPEN_SYSTEM_DB_PATH "${CMAKE_SOURCE_DIR}/src/kernels" CACHE PATH "Default path of system db files")
414-
set(MIOPEN_USER_DB_PATH "${CMAKE_SOURCE_DIR}/src/kernels" CACHE PATH "Default path of user db files")
425+
set(MIOPEN_SYSTEM_DB_PATH "${KERNELS_BINARY_DIR}" CACHE PATH "Default path of system db files")
426+
set(MIOPEN_USER_DB_PATH "${KERNELS_BINARY_DIR}" CACHE PATH "Default path of user db files")
415427
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")
416428
set(MIOPEN_CACHE_DIR "" CACHE STRING "")
417429
else()
@@ -466,92 +478,74 @@ elseif(MIOPEN_BACKEND STREQUAL "OpenCL")
466478
set(CPACK_RPM_PACKAGE_CONFLICTS miopen-hip)
467479
endif()
468480

469-
# Unpack DB files
481+
set(KERNELS_SOURCE_DIR ${PROJECT_SOURCE_DIR}/src/kernels)
482+
483+
find_program(UNZIPPER lbzcat bzcat REQUIRED)
484+
file(MAKE_DIRECTORY ${KERNELS_BINARY_DIR})
485+
470486
function(unpack_db db_bzip2_file)
471-
set(KERNELS_DIR "${CMAKE_SOURCE_DIR}/src/kernels")
472-
STRING(REPLACE ".bz2" "" db_file "${db_bzip2_file}")
473-
find_program(UNZIPPER NAMES lbunzip2 bunzip2)
474-
if(EXISTS "${db_file}")
475-
message(STATUS "WARNING: ${db_file} already exists and will be overwritten")
476-
endif()
477-
if(EXISTS "${db_bzip2_file}")
478-
message(STATUS "${UNZIPPER} -k -f ${db_bzip2_file}")
479-
execute_process(
480-
COMMAND ${UNZIPPER} -k -f ${db_bzip2_file}
481-
WORKING_DIRECTORY ${KERNELS_DIR}
482-
RESULT_VARIABLE ret
483-
)
484-
if(NOT ret EQUAL "0")
485-
message(FATAL_ERROR "${db_file} could not be extracted, file is empty!")
486-
execute_process(
487-
COMMAND touch ${db_file}
488-
WORKING_DIRECTORY ${KERNELS_DIR}
489-
)
490-
endif()
491-
endif()
487+
get_filename_component(__fname ${db_bzip2_file} NAME_WLE)
488+
add_custom_command(OUTPUT ${KERNELS_BINARY_DIR}/${__fname}
489+
COMMAND ${UNZIPPER} -k ${db_bzip2_file} > ${KERNELS_BINARY_DIR}/${__fname})
490+
string(REPLACE "." "_" __tname ${__fname})
491+
add_custom_target(generate_${__tname} ALL DEPENDS ${KERNELS_BINARY_DIR}/${__fname})
492492
endfunction()
493493

494-
file(GLOB PERF_DB_BZIP_FILES "${CMAKE_SOURCE_DIR}/src/kernels/*.db.bz2")
494+
file(GLOB PERF_DB_BZIP_FILES CONFIGURE_DEPENDS "${KERNELS_SOURCE_DIR}/*.db.bz2")
495495
foreach(DB_BZIP_FILE ${PERF_DB_BZIP_FILES})
496496
unpack_db(${DB_BZIP_FILE})
497497
endforeach()
498498

499-
file(GLOB FIND_DB_BZIP_FILES "${CMAKE_SOURCE_DIR}/src/kernels/*.fdb.txt.bz2")
499+
file(GLOB FIND_DB_BZIP_FILES CONFIGURE_DEPENDS "${KERNELS_SOURCE_DIR}/*.fdb.txt.bz2")
500500
foreach(DB_BZIP_FILE ${FIND_DB_BZIP_FILES})
501501
unpack_db(${DB_BZIP_FILE})
502502
endforeach()
503503

504-
# Begin KDB component install
505-
function(install_kdb)
506-
set(oneValueArgs NAME COMPONENT_NAME)
507-
cmake_parse_arguments(PARSE "" "${oneValueArgs}" "" ${ARGN})
504+
# Begin KDB package creation
508505

509-
if(PARSE_NAME)
510-
set(FILE_NAME ${PARSE_NAME})
511-
endif()
512-
STRING(REPLACE - _ FILE_NAME "${ARCH_NAME}")
513-
file(READ "${CMAKE_SOURCE_DIR}/src/kernels/${FILE_NAME}.kdb.bz2" FILE_CONTENTS LIMIT 7)
514-
string(STRIP "${FILE_CONTENTS}" FILE_CONTENTS)
515-
if(FILE_CONTENTS STREQUAL "version")
516-
set(LFS_MISSING_FILES ${LFS_MISSING_FILES} ${FILE_NAME}.kdb.bz2 PARENT_SCOPE)
506+
function(install_kdb FILE_NAME COMPONENT_NAME)
507+
file(READ ${FILE_NAME} __contents LIMIT 7)
508+
get_filename_component(__fname ${FILE_NAME} NAME_WLE)
509+
if(__contents MATCHES "version")
510+
list(APPEND LFS_MISSING_FILES ${__fname})
517511
else()
518-
unpack_db("${CMAKE_SOURCE_DIR}/src/kernels/${FILE_NAME}.kdb.bz2")
519-
message("Installing ${FILE_NAME} in component ${PARSE_COMPONENT_NAME}")
512+
unpack_db(${FILE_NAME})
520513
if( NOT ENABLE_ASAN_PACKAGING )
521-
rocm_install(FILES
522-
src/kernels/${FILE_NAME}.kdb
523-
DESTINATION ${DATA_INSTALL_DIR}/db
524-
COMPONENT ${PARSE_COMPONENT_NAME})
514+
rocm_install(FILES ${KERNELS_BINARY_DIR}/${__fname}
515+
DESTINATION ${DATABASE_INSTALL_DIR}
516+
COMPONENT ${COMPONENT_NAME})
525517
endif()
518+
set(CPACK_COMPONENTS_ALL
519+
"${CPACK_COMPONENTS_ALL};${__component}" PARENT_SCOPE)
526520
endif()
527521
endfunction()
528522

529523
# Both the lists below should be in sync always
530-
list(APPEND ARCH_LST gfx90a gfx1030 gfx908 gfx906 gfx900)
531-
list(APPEND ARCH_FILE_LST gfx90akdb gfx1030kdb gfx908kdb gfx906kdb gfx900kdb)
532-
533-
list(LENGTH ARCH_LST FULL_LEN)
534-
math(EXPR ARCH_LST_LEN "${FULL_LEN} - 1")
524+
set(KDB_BZ2_FILES gfx90a.kdb.bz2 gfx1030.kdb.bz2 gfx908.kdb.bz2 gfx906.kdb.bz2 gfx900.kdb.bz2)
525+
set(COMPONENT_LST gfx90akdb gfx1030kdb gfx908kdb gfx906kdb gfx900kdb)
535526

536-
537-
foreach(IDX RANGE ${ARCH_LST_LEN})
538-
list(GET ARCH_LST ${IDX} ARCH_NAME)
539-
list(GET ARCH_FILE_LST ${IDX} ARCH_FILE_NAME)
540-
install_kdb(
541-
NAME ${ARCH_NAME}
542-
COMPONENT_NAME ${ARCH_FILE_NAME}
543-
)
544-
endforeach()
527+
if(CMAKE_VERSION VERSION_GREATER_EQUAL 3.17)
528+
foreach(__file __component IN ZIP_LISTS KDB_BZ2_FILES COMPONENT_LST)
529+
install_kdb(${KERNELS_SOURCE_DIR}/${__file} ${__component})
530+
endforeach()
531+
else()
532+
# TODO: Upgrade minimum CMake to version 3.17+ and use IN ZIP_LISTS instead
533+
list(LENGTH KDB_BZ2_FILES __length)
534+
math(EXPR __high "${__length} - 1")
535+
foreach(__index RANGE ${__high})
536+
list(GET COMPONENT_LST ${__index} __component)
537+
list(GET KDB_BZ2_FILES ${__index} __file)
538+
install_kdb(${KERNELS_SOURCE_DIR}/${__file} ${__component})
539+
endforeach()
540+
endif()
545541

546542
if(LFS_MISSING_FILES)
547-
string(REPLACE ";" "; " LFS_MISSING_FILES "${LFS_MISSING_FILES}")
548-
message(WARNING "GIT LFS Files not pulled down, skipped: ${LFS_MISSING_FILES}")
543+
string(REPLACE ";" ", " __lfs_missing_files "${LFS_MISSING_FILES}")
544+
message(WARNING "GIT LFS files not pulled down, skipped: ${__lfs_missing_files}")
549545
set(MIOPEN_NO_LFS_PULLED TRUE CACHE INTERNAL "")
550-
else()
551-
set(CPACK_COMPONENTS_ALL ${ARCH_FILE_LST})
552546
endif()
553547

554-
#end kdb package creation
548+
# End KDB package creation
555549

556550
rocm_create_package(
557551
NAME MIOpen-${MIOPEN_BACKEND}

src/CMakeLists.txt

Lines changed: 12 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -743,20 +743,18 @@ endif()
743743
if(MIOPEN_ENABLE_AI_KERNEL_TUNING OR MIOPEN_ENABLE_AI_IMMED_MODE_FALLBACK)
744744
target_link_libraries(MIOpen PRIVATE frugally-deep::fdeep Eigen3::Eigen)
745745
if(NOT TARGET nlohmann_json)
746-
# frugally-deep has broken linking to nlohmann_json
746+
# frugally-deep has broken linking to nlohmann_json
747747
add_library(nlohmann_json INTERFACE IMPORTED GLOBAL)
748-
target_link_libraries(nlohmann_json INTERFACE nlohmann_json::nlohmann_json)
749-
endif()
750-
if(NOT BUILD_DEV)
751-
file(GLOB MODEL_FILES kernels/*.model)
752-
if( NOT ENABLE_ASAN_PACKAGING )
753-
install(FILES ${MODEL_FILES} DESTINATION ${DATA_INSTALL_DIR}/db)
754-
endif ()
755-
foreach(MODEL_FILE ${MODEL_FILES})
756-
get_filename_component(MODEL_FILE_FILENAME "${MODEL_FILE}" NAME)
757-
configure_file("${MODEL_FILE}" "${PROJECT_BINARY_DIR}/share/miopen/db/${MODEL_FILE_FILENAME}" COPYONLY)
758-
endforeach()
748+
target_link_libraries(nlohmann_json INTERFACE nlohmann_json::nlohmann_json)
759749
endif()
750+
file(GLOB MODEL_FILES CONFIGURE_DEPENDS kernels/*.model)
751+
if(NOT ENABLE_ASAN_PACKAGING )
752+
install(FILES ${MODEL_FILES} DESTINATION ${DATABASE_INSTALL_DIR})
753+
endif()
754+
foreach(MODEL_FILE ${MODEL_FILES})
755+
get_filename_component(MODEL_FILE_FILENAME "${MODEL_FILE}" NAME)
756+
configure_file("${MODEL_FILE}" "${PROJECT_BINARY_DIR}/${DATABASE_INSTALL_DIR}/${MODEL_FILE_FILENAME}" COPYONLY)
757+
endforeach()
760758
endif()
761759

762760
############################################################
@@ -921,11 +919,11 @@ endif()
921919
if( NOT ENABLE_ASAN_PACKAGING )
922920
install(FILES
923921
${FIND_DB_FILES}
924-
DESTINATION ${DATA_INSTALL_DIR}/db)
922+
DESTINATION ${DATABASE_INSTALL_DIR})
925923
endif()
926924
foreach(DB_FILE ${FIND_DB_FILES})
927925
get_filename_component(DB_FILE_FILENAME "${DB_FILE}" NAME)
928-
configure_file("${DB_FILE}" "${PROJECT_BINARY_DIR}/share/miopen/db/${DB_FILE_FILENAME}" COPYONLY)
926+
configure_file("${DB_FILE}" "${PROJECT_BINARY_DIR}/${DATABASE_INSTALL_DIR}/${DB_FILE_FILENAME}" COPYONLY)
929927
endforeach()
930928

931929
endif()

test/CMakeLists.txt

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -35,19 +35,19 @@ if( NOT ENABLE_ASAN_PACKAGING )
3535
endif()
3636

3737
set(MODEL_FILES)
38-
file (GLOB model_src perf_models/*.txt)
38+
file (GLOB model_src CONFIGURE_DEPENDS perf_models/*.txt)
3939
foreach (src ${model_src})
4040
list (APPEND MODEL_FILES ${src})
4141
endforeach()
4242

4343
if( NOT ENABLE_ASAN_PACKAGING )
4444
install(FILES
4545
${MODEL_FILES}
46-
DESTINATION ${DATA_INSTALL_DIR}/perf_models)
46+
DESTINATION ${DATA_INSTALL_DIR}/perf_models)
4747
endif()
4848
foreach(MODEL_FILE ${MODEL_FILES})
4949
get_filename_component(MODEL_FILE_FILENAME "${MODEL_FILE}" NAME)
50-
configure_file("${MODEL_FILE}" "${PROJECT_BINARY_DIR}/share/miopen/perf_models/${MODEL_FILE_FILENAME}" COPYONLY)
50+
configure_file("${MODEL_FILE}" "${PROJECT_BINARY_DIR}/${DATA_INSTALL_DIR}/perf_models/${MODEL_FILE_FILENAME}" COPYONLY)
5151
endforeach()
5252

5353
include(CheckCXXCompilerFlag)

0 commit comments

Comments
 (0)