From aaf154b30b2e28ce559ee03dbb1ea20617003550 Mon Sep 17 00:00:00 2001 From: German Andryeyev Date: Thu, 6 Feb 2020 18:00:18 -0500 Subject: [PATCH] Add CMake support for PAL backend Change-Id: Id0673d43217be305aa4ca7a612c416baee3fb23c [ROCm/clr commit: da5f4c554e12b3c80cd4b5145171ec6eb91f0ce7] --- projects/clr/rocclr/CMakeLists.txt | 38 +++++- projects/clr/rocclr/device/pal/CMakeLists.txt | 127 ++++++++++++++++++ projects/clr/rocclr/device/pal/palcdefs | 3 + projects/clr/rocclr/device/pal/paldevice.cpp | 25 ++-- projects/clr/rocclr/device/pal/palprogram.cpp | 2 - .../clr/rocclr/device/pal/palsettings.cpp | 2 +- projects/clr/rocclr/platform/context.cpp | 2 +- 7 files changed, 172 insertions(+), 27 deletions(-) create mode 100644 projects/clr/rocclr/device/pal/CMakeLists.txt create mode 100644 projects/clr/rocclr/device/pal/palcdefs diff --git a/projects/clr/rocclr/CMakeLists.txt b/projects/clr/rocclr/CMakeLists.txt index 6085057202..3658142fa4 100644 --- a/projects/clr/rocclr/CMakeLists.txt +++ b/projects/clr/rocclr/CMakeLists.txt @@ -9,6 +9,10 @@ set(USE_COMGR_LIBRARY "yes") add_definitions(-DUSE_COMGR_LIBRARY -DCOMGR_DYN_DLL) add_definitions(-DBSD_LIBELF) +if (CMAKE_CXX_COMPILER_ID STREQUAL "GNU") + add_compile_options("-Wno-ignored-attributes") +endif() + find_package(amd_comgr REQUIRED CONFIG PATHS /opt/rocm/ @@ -32,7 +36,7 @@ find_library( OpenCL REQUIRED CONFIG find_path(OPENCL_INCLUDE_DIR NAMES OpenCL/cl.h CL/cl.h PATH_SUFFIXES include opencl/include inc include/x86_64 include/x64 - PATHS /opt/rocm + PATHS /opt/rocm DOC "OpenCL include header OpenCL/cl.h or CL/cl.h" ) @@ -86,11 +90,16 @@ include_directories(${CMAKE_SOURCE_DIR}/compiler/lib/backends/common) include_directories(${CMAKE_SOURCE_DIR}/elf/utils/common) include_directories(${CMAKE_SOURCE_DIR}/elf/utils/libelf) +option(BUILD_PAL "Build PAL backend" OFF) +if (BUILD_PAL) + add_definitions(-DWITH_PAL_DEVICE) + add_subdirectory(device/pal) + + add_definitions(-DAMD_LIBELF) + add_subdirectory(compiler/sc/HSAIL) +endif() add_subdirectory(device/rocm) - - - #find_package(amd_comgr REQUIRED CONFIG) include_directories("$") set(COMGR_CPP device/comgrctx.cpp) @@ -134,17 +143,32 @@ add_library(oclruntime OBJECT set_target_properties(oclruntime PROPERTIES POSITION_INDEPENDENT_CODE ON) -add_library(amdvdi_static STATIC +add_library(amdvdi_static STATIC $ $ $ ) + set_target_properties(amdvdi_static PROPERTIES POSITION_INDEPENDENT_CODE ON) + +target_link_libraries(amdvdi_static PUBLIC Threads::Threads) +target_link_libraries(amdvdi_static PUBLIC dl ${ROCT_LIBRARIES} ${ROCR_LIBRARIES} ) + +if (BUILD_PAL) + target_link_libraries(amdvdi_static PRIVATE vdipal) + target_link_libraries(amdvdi_static PRIVATE amdhsaloader) + export(TARGETS amdvdi_static vdipal amdhsaloader amdhsacode pal addrlib vam metrohash cwpack gpuopen ddCore mpack rapidjson + FILE "${CMAKE_CURRENT_BINARY_DIR}/amdvdi_staticTargets.cmake" + ) +else() + export(TARGETS amdvdi_static + FILE "${CMAKE_CURRENT_BINARY_DIR}/amdvdi_staticTargets.cmake" + ) +endif() + #add_library(oclelf STATIC IMPORTED) #set_target_properties(oclelf PROPERTIES IMPORTED_LOCATION "${CMAKE_CURRENT_BINARY_DIR}/libelf/liboclelf.a") #target_link_libraries(oclruntime_static PRIVATE oclelf) -target_link_libraries(amdvdi_static PUBLIC Threads::Threads) -target_link_libraries(amdvdi_static PUBLIC dl ${ROCT_LIBRARIES} ${ROCR_LIBRARIES} ) if (UNIX) set(VDI_DEFAULT_INSTALL_PREFIX "/opt/rocm/vdi") diff --git a/projects/clr/rocclr/device/pal/CMakeLists.txt b/projects/clr/rocclr/device/pal/CMakeLists.txt new file mode 100644 index 0000000000..1be0f548e1 --- /dev/null +++ b/projects/clr/rocclr/device/pal/CMakeLists.txt @@ -0,0 +1,127 @@ +### +file(STRINGS palcdefs PAL_MAJOR_VERSION REGEX "^PAL_MAJOR_VERSION = [0-9]+") +string(REGEX REPLACE "PAL_MAJOR_VERSION = " "" PAL_MAJOR_VERSION ${PAL_MAJOR_VERSION}) + +file(STRINGS palcdefs GPUOPEN_MAJOR_VERSION REGEX "^GPUOPEN_MAJOR_VERSION = [0-9]+") +string(REGEX REPLACE "GPUOPEN_MAJOR_VERSION = " "" GPUOPEN_MAJOR_VERSION ${GPUOPEN_MAJOR_VERSION}) + +### Create PAL backend library for VDI +add_library(vdipal STATIC "") + +# Add defines necessary for PAL build +set(PAL_CLIENT_INTERFACE_MAJOR_VERSION ${PAL_MAJOR_VERSION} + CACHE STRING "PAL major interface: ${PAL_MAJOR_VERSION}" FORCE) +set(GPUOPEN_CLIENT_INTERFACE_MAJOR_VERSION ${GPUOPEN_MAJOR_VERSION} + CACHE STRING "GPU open major interface: ${GPUOPEN_MAJOR_VERSION}" FORCE) +set(GPUOPEN_CLIENT_INTERFACE_MINOR_VERSION "0" CACHE STRING "GPU open minor interface: 0" FORCE) + +set(PAL_CLIENT "OCL" CACHE STRING "Build PAL OCL support" FORCE) + +set(PAL_BUILD_GPUOPEN ON CACHE BOOL "Build GPUOpen support") +set(PAL_BUILD_VIDEO OFF CACHE BOOL "Don't build PAL with Video support") +set(PAL_BUILD_SCPC OFF CACHE BOOL "Don't build SCPC") + +set(PAL_CLOSED_SOURCE ON CACHE BOOL "Build closed source PAL") + +set(PAL_BUILD_POLARIS22 ON CACHE BOOL "Build PAL with Polaris support") +set(PAL_BUILD_GFX9 ON CACHE BOOL "Build PAL with GFX9 support") +set(PAL_BUILD_OSS4 ON CACHE BOOL "Build PAL with OSS4 support") +set(PAL_BUILD_VEGA12 ON CACHE BOOL "Build PAL with VEGA12 support") +set(PAL_BUILD_VEGA20 ON CACHE BOOL "Build PAL with GFX9 support") +set(PAL_BUILD_RAVEN1 ON CACHE BOOL "Build PAL with Raven1 support") +set(PAL_BUILD_RAVEN2 ON CACHE BOOL "Build PAL with Raven2 support") +set(PAL_BUILD_RENOIR ON CACHE BOOL "Build PAL with Renoir support") + +set(PAL_BUILD_GFX10 ON CACHE BOOL "Build PAL with GFX10 support") +set(PAL_BUILD_NAVI12 ON CACHE BOOL "Build PAL with Navi12 support") +set(PAL_BUILD_NAVI14 ON CACHE BOOL "Build PAL with Navi14 support") + +option(PAL_DEVELOPER_BUILD "No developer build" OFF) + +set(PYTHON_EXECUTABLE /usr/bin/python3) + +# Build PAL . . . +set(GLOBAL_ROOT_SRC_DIR ${CMAKE_SOURCE_DIR}) +add_subdirectory(palbe) + +# Setup defines for the client compilation +target_compile_definitions(vdipal PRIVATE + PAL_CLIENT_INTERFACE_MAJOR_VERSION=${PAL_CLIENT_INTERFACE_MAJOR_VERSION}) +target_compile_definitions(vdipal PRIVATE + GPUOPEN_CLIENT_INTERFACE_MAJOR_VERSION=${GPUOPEN_CLIENT_INTERFACE_MAJOR_VERSION}) +target_compile_definitions(vdipal PRIVATE + GPUOPEN_CLIENT_INTERFACE_MINOR_VERSION=${GPUOPEN_CLIENT_INTERFACE_MINOR_VERSION}) + +target_compile_definitions(vdipal PRIVATE PAL_CLIENT_OCL=1) + +target_compile_definitions(vdipal PRIVATE PAL_GPUOPEN_OCL=1) +target_compile_definitions(vdipal PRIVATE PAL_BUILD_GPUOPEN=1) +target_compile_definitions(vdipal PRIVATE PAL_BUILD_SCPC=0) +target_compile_definitions(vdipal PRIVATE PAL_CLOSED_SOURCE=1) +target_compile_definitions(vdipal PRIVATE PAL_BUILD_GPUOPEN=1) + +# GFX9 targets +target_compile_definitions(vdipal PRIVATE PAL_BUILD_POLARIS22=1) +target_compile_definitions(vdipal PRIVATE PAL_BUILD_GFX9=1) +target_compile_definitions(vdipal PRIVATE PAL_BUILD_OSS4=1) +target_compile_definitions(vdipal PRIVATE PAL_BUILD_VEGA12=1) +target_compile_definitions(vdipal PRIVATE PAL_BUILD_VEGA20=1) +target_compile_definitions(vdipal PRIVATE PAL_BUILD_RAVEN1=1) +target_compile_definitions(vdipal PRIVATE PAL_BUILD_RAVEN2=1) +target_compile_definitions(vdipal PRIVATE PAL_BUILD_RENOIR=1) + +# GFX10 targets +target_compile_definitions(vdipal PRIVATE PAL_BUILD_GFX10=1) +target_compile_definitions(vdipal PRIVATE PAL_BUILD_GFX103=1) +target_compile_definitions(vdipal PRIVATE PAL_BUILD_NAVI12=1) +target_compile_definitions(vdipal PRIVATE PAL_BUILD_NAVI14=1) + +target_compile_definitions(vdipal PRIVATE OPENCL_MAINLINE=1) + +if(${USE_COMGR_LIBRARY} MATCHES "yes") + target_compile_definitions(vdipal PRIVATE USE_COMGR_LIBRARY -DCOMGR_DYN_DLL) + if (DEFINED COMGR_INCLUDES AND NOT ${COMGR_INCLUDES} STREQUAL "") + target_include_directories(${COMGR_INCLUDES}) + endif() # if (DEFINED COMGR_INCLUDES AND NOT ${COMGR_INCLUDES} STREQUAL "") +endif() + +target_include_directories(vdipal PRIVATE ${CMAKE_SOURCE_DIR}/compiler/sc/HSAIL/include) +target_include_directories(vdipal PRIVATE ${CMAKE_SOURCE_DIR}/../asic_reg) + +target_include_directories(vdipal PRIVATE ${CMAKE_SOURCE_DIR}/device/pal/palbe) +target_include_directories(vdipal PRIVATE ${CMAKE_SOURCE_DIR}/device/pal/palbe/inc) +target_include_directories(vdipal PRIVATE ${CMAKE_SOURCE_DIR}/device/pal/palbe/inc/core) +target_include_directories(vdipal PRIVATE ${CMAKE_SOURCE_DIR}/device/pal/palbe/inc/util) +target_include_directories(vdipal PRIVATE ${CMAKE_SOURCE_DIR}/device/pal/palbe/shared/gpuopen/inc) +target_include_directories(vdipal PRIVATE ${CMAKE_SOURCE_DIR}/device/pal/palbe/shared/gpuopen/third_party/metrohash/src) +target_include_directories(vdipal PRIVATE ${CMAKE_CURRENT_BINARY_DIR}) + +target_sources(vdipal PRIVATE + palappprofile.cpp + palblit.cpp + palconstbuf.cpp + palcounters.cpp + paldebugmanager.cpp + paldevice.cpp + paldeviced3d10.cpp + paldeviced3d11.cpp + paldeviced3d9.cpp + paldevicegl.cpp + palgpuopen.cpp + palkernel.cpp + palmemory.cpp + palprintf.cpp + palprogram.cpp + palresource.cpp + palschedcl.cpp + palsettings.cpp + palthreadtrace.cpp + paltimestamp.cpp + palvirtual.cpp +) + +target_link_libraries(vdipal PUBLIC pal) + +set_target_properties(vdipal PROPERTIES POSITION_INDEPENDENT_CODE ON) + + diff --git a/projects/clr/rocclr/device/pal/palcdefs b/projects/clr/rocclr/device/pal/palcdefs new file mode 100644 index 0000000000..770f0c722c --- /dev/null +++ b/projects/clr/rocclr/device/pal/palcdefs @@ -0,0 +1,3 @@ +# PAL interface versions +PAL_MAJOR_VERSION = 563 +GPUOPEN_MAJOR_VERSION = 41 diff --git a/projects/clr/rocclr/device/pal/paldevice.cpp b/projects/clr/rocclr/device/pal/paldevice.cpp index dea699a67b..d6e71d2d04 100644 --- a/projects/clr/rocclr/device/pal/paldevice.cpp +++ b/projects/clr/rocclr/device/pal/paldevice.cpp @@ -35,7 +35,6 @@ #include "palLib.h" #include "palPlatform.h" #include "palDevice.h" -#include "cz_id.h" #include "acl.h" #include "vdi_common.hpp" @@ -546,22 +545,16 @@ void NullDevice::fillDeviceInfo(const Pal::DeviceProperties& palProp, info_.platform_ = AMD_PLATFORM; - if (false && (asicRevision() == Pal::AsicRevision::Carrizo) && - ASICREV_IS_CARRIZO_BRISTOL(palProp.revisionId)) { - const static char* bristol = "Bristol Ridge"; - ::strcpy(info_.name_, bristol); - } else { - if (settings().useLightning_) { - ::strcpy(info_.name_, hwInfo()->machineTargetLC_); - if (hwInfo()->xnackEnabled_) { - ::strcat(info_.name_, "+xnack"); - } - if (info_.sramEccEnabled_) { - ::strcat(info_.name_, "+sram-ecc"); - } - } else { - ::strcpy(info_.name_, hwInfo()->machineTarget_); + if (settings().useLightning_) { + ::strcpy(info_.name_, hwInfo()->machineTargetLC_); + if (hwInfo()->xnackEnabled_) { + ::strcat(info_.name_, "+xnack"); } + if (info_.sramEccEnabled_) { + ::strcat(info_.name_, "+sram-ecc"); + } + } else { + ::strcpy(info_.name_, hwInfo()->machineTarget_); } ::strcpy(info_.vendor_, "Advanced Micro Devices, Inc."); diff --git a/projects/clr/rocclr/device/pal/palprogram.cpp b/projects/clr/rocclr/device/pal/palprogram.cpp index a75099df2b..e775113df3 100644 --- a/projects/clr/rocclr/device/pal/palprogram.cpp +++ b/projects/clr/rocclr/device/pal/palprogram.cpp @@ -21,8 +21,6 @@ #include "os/os.hpp" #include "utils/flags.hpp" #include "include/aclTypes.h" -#include "utils/amdilUtils.hpp" -#include "utils/bif_section_labels.hpp" #include "device/pal/palprogram.hpp" #include "device/pal/palblit.hpp" #include diff --git a/projects/clr/rocclr/device/pal/palsettings.cpp b/projects/clr/rocclr/device/pal/palsettings.cpp index 4d95ad5691..29455fe5ba 100644 --- a/projects/clr/rocclr/device/pal/palsettings.cpp +++ b/projects/clr/rocclr/device/pal/palsettings.cpp @@ -203,7 +203,7 @@ bool Settings::create(const Pal::DeviceProperties& palProp, } switch (palProp.revision) { - case Pal::AsicRevision::Navi14: + case Pal::AsicRevision::Navi14: case Pal::AsicRevision::Navi12: case Pal::AsicRevision::Navi10: case Pal::AsicRevision::Navi10_A0: diff --git a/projects/clr/rocclr/platform/context.cpp b/projects/clr/rocclr/platform/context.cpp index c71c78a384..b62c905aad 100644 --- a/projects/clr/rocclr/platform/context.cpp +++ b/projects/clr/rocclr/platform/context.cpp @@ -35,7 +35,7 @@ #endif //_WIN32 #if (!defined(BUILD_HSA_TARGET) && defined(WITH_HSA_DEVICE) && \ - defined(WITH_AMDGPU_PRO)) || defined(_WIN32) || defined(WITH_PAL_DEVICE) + defined(WITH_AMDGPU_PRO)) || defined(_WIN32) #define WITH_LIQUID_FLASH 1 #endif