From 47486abb67879f09906fc9dc63dbcda1b57efef2 Mon Sep 17 00:00:00 2001 From: Mirza Halilcevic Date: Wed, 2 Oct 2024 11:47:11 +0000 Subject: [PATCH] Fix cmake. --- CMakeLists.txt | 52 ++++++++++++++++++++++++++++-------------- codegen/CMakeLists.txt | 33 ++++++++++----------------- 2 files changed, 47 insertions(+), 38 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 96c37ac943..fd321f7722 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -26,7 +26,23 @@ set(version 1.1.0) project(composable_kernel VERSION ${version} LANGUAGES CXX HIP) include(CTest) -find_package(Python3 3.6 COMPONENTS Interpreter REQUIRED) +# Usage: for customized Python location cmake -DCK_USE_ALTERNATIVE_PYTHON="/opt/Python-3.8.13/bin/python3.8" +# CK Codegen requires dataclass which is added in Python 3.7 +# Python version 3.8 is required for general good practice as it is default for Ubuntu 20.04 +if(NOT CK_USE_ALTERNATIVE_PYTHON) + find_package(Python3 3.8 COMPONENTS Interpreter REQUIRED) +else() + message("Using alternative python version") + set(EXTRA_PYTHON_PATH) + # this is overly restrictive, we may need to be more flexible on the following + string(REPLACE "/bin/python3.8" "" EXTRA_PYTHON_PATH "${CK_USE_ALTERNATIVE_PYTHON}") + message("alternative python path is: ${EXTRA_PYTHON_PATH}") + find_package(Python3 3.6 COMPONENTS Interpreter REQUIRED) + add_definitions(-DPython3_EXECUTABLE="${CK_USE_ALTERNATIVE_PYTHON}") + set(Python3_EXECUTABLE "${CK_USE_ALTERNATIVE_PYTHON}") + set(PYTHON_EXECUTABLE "${CK_USE_ALTERNATIVE_PYTHON}") + set(ENV{LD_LIBRARY_PATH} "${EXTRA_PYTHON_PATH}/lib:$ENV{LD_LIBRARY_PATH}") +endif() list(APPEND CMAKE_MODULE_PATH "${PROJECT_SOURCE_DIR}/cmake") @@ -62,17 +78,14 @@ if (DTYPES) endif() message("DTYPES macro set to ${DTYPES}") else() - add_definitions(-DCK_ENABLE_INT8 -DCK_ENABLE_FP16 -DCK_ENABLE_FP32 -DCK_ENABLE_FP64 -DCK_ENABLE_BF16) + add_definitions(-DCK_ENABLE_INT8 -DCK_ENABLE_FP16 -DCK_ENABLE_FP32 -DCK_ENABLE_FP64 -DCK_ENABLE_BF16 -DCK_ENABLE_FP8 -DCK_ENABLE_BF8) set(CK_ENABLE_INT8 "ON") set(CK_ENABLE_FP16 "ON") set(CK_ENABLE_FP32 "ON") set(CK_ENABLE_FP64 "ON") set(CK_ENABLE_BF16 "ON") - if (GPU_TARGETS MATCHES "gfx94") - add_definitions(-DCK_ENABLE_FP8 -DCK_ENABLE_BF8) - set(CK_ENABLE_FP8 "ON") - set(CK_ENABLE_BF8 "ON") - endif() + set(CK_ENABLE_FP8 "ON") + set(CK_ENABLE_BF8 "ON") endif() #for f8/bf8_t type @@ -191,12 +204,18 @@ endif() configure_file(include/ck/config.h.in ${CMAKE_CURRENT_BINARY_DIR}/include/ck/config.h) if(NOT WIN32 AND ${hip_VERSION_FLAT} GREATER 500723302) - message("Adding the fno-offload-uniform-block compiler flag") - add_compile_options(-fno-offload-uniform-block) + check_cxx_compiler_flag("-fno-offload-uniform-block" HAS_NO_OFFLOAD_UNIFORM_BLOCK) + if(HAS_NO_OFFLOAD_UNIFORM_BLOCK) + message("Adding the fno-offload-uniform-block compiler flag") + add_compile_options(-fno-offload-uniform-block) + endif() endif() if(NOT WIN32 AND ${hip_VERSION_FLAT} GREATER 600140090) - message("Adding the enable-post-misched=0 compiler flag") - add_compile_options("SHELL: -mllvm -enable-post-misched=0") + check_cxx_compiler_flag("-mllvm -enable-post-misched=0" HAS_ENABLE_POST_MISCHED) + if(HAS_ENABLE_POST_MISCHED) + message("Adding the enable-post-misched=0 compiler flag") + add_compile_options("SHELL: -mllvm -enable-post-misched=0") + endif() endif() set(check-coerce) check_cxx_compiler_flag(" -mllvm -amdgpu-coerce-illegal-types=1" check-coerce) @@ -550,12 +569,7 @@ if(NOT DEFINED INSTANCES_ONLY) PACKAGE_NAME examples ) add_subdirectory(example) - if(GPU_TARGETS MATCHES "gfx9" AND NOT INSTANCES_ONLY) - add_subdirectory(codegen) - endif() - if(BUILD_TESTING) - add_subdirectory(test) - endif() + add_subdirectory(test) rocm_package_setup_component(profiler LIBRARY_NAME composablekernel @@ -572,6 +586,10 @@ if(NOT DEFINED INSTANCES_ONLY) endif() endif() +if(NOT DEFINED PROFILER_ONLY AND (GPU_TARGETS MATCHES "gfx9" OR DEFINED INSTANCES_ONLY)) + add_subdirectory(codegen) +endif() + #Create an interface target for the include only files and call it "composablekernels" include(CMakePackageConfigHelpers) diff --git a/codegen/CMakeLists.txt b/codegen/CMakeLists.txt index 5ef0d9b24d..3b3e9f06ee 100644 --- a/codegen/CMakeLists.txt +++ b/codegen/CMakeLists.txt @@ -1,29 +1,22 @@ -cmake_minimum_required(VERSION 3.16) -project(composable_kernel_host LANGUAGES CXX HIP) -find_package(ROCM) -include(ROCMInstallTargets) -include(ROCMTest) - set(CMAKE_EXPORT_COMPILE_COMMANDS ON) - + set(CMAKE_LIBRARY_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/lib) set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/lib) set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/bin) set(CK_ROOT ${CMAKE_CURRENT_SOURCE_DIR}/..) - + add_compile_options(-std=c++17) find_package(hip) add_custom_target(codegen) - + # add include directories include_directories(BEFORE ${PROJECT_BINARY_DIR}/include ${PROJECT_SOURCE_DIR}/include ${PROJECT_SOURCE_DIR}/library/include ${HIP_INCLUDE_DIRS} - ${CK_ROOT}/include/ ) - + list(APPEND CMAKE_MODULE_PATH ${CK_ROOT}/cmake) include(Embed) file(GLOB_RECURSE KERNEL_FILES CONFIGURE_DEPENDS @@ -32,31 +25,29 @@ file(GLOB_RECURSE KERNEL_FILES CONFIGURE_DEPENDS #message(STATUS "KERNEL_FILES: ${KERNEL_FILES}") #message(STATUS "RELATIVE: ${CK_ROOT}/include") add_embed_library(ck_headers ${KERNEL_FILES} RELATIVE ${CK_ROOT}/include) - + file(GLOB SOURCES CONFIGURE_DEPENDS src/*.cpp) - + ##message(STATUS "SOURCE_FILES: ${SOURCES}") # TODO: Use object library add_library(ck_host STATIC ${SOURCES}) target_link_libraries(ck_host PRIVATE ck_headers) - + set_target_properties(ck_host PROPERTIES LINKER_LANGUAGE CXX POSITION_INDEPENDENT_CODE ON) - + target_include_directories(ck_host PUBLIC $ - $ - $ ) - + add_executable(ck-template-driver driver/main.cpp) target_link_libraries(ck-template-driver ck_host) - + rocm_install( - TARGETS ck_host + TARGETS ck_host ck_headers EXPORT ck_hostTargets ) rocm_install(DIRECTORY include/ck DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}) - + add_subdirectory(test)