From 8e140c948549d2fcb6a60e09a112cbc93dfef89e Mon Sep 17 00:00:00 2001
From: foreman
Date: Wed, 26 Apr 2017 16:10:30 -0400
Subject: [PATCH] P4 to Git Change 1402945 by lmoriche@lmoriche_palamida on
2017/04/26 16:03:39
SWDEV-102733 - [OCL-LC-ROCm] Cmake build Write CMakeLists.txt to enable building with and without the DK environment
Affected files ...
... //depot/stg/opencl/drivers/opencl/CMakeLists.txt#5 edit
... //depot/stg/opencl/drivers/opencl/api/opencl/amdocl/CMakeLists.txt#1 add
... //depot/stg/opencl/drivers/opencl/compiler/lib/loaders/elf/utils/libelf/CMakeLists.txt#1 add
... //depot/stg/opencl/drivers/opencl/runtime/CMakeLists.txt#1 add
... //depot/stg/opencl/drivers/opencl/runtime/device/appprofile.cpp#18 edit
... //depot/stg/opencl/drivers/opencl/runtime/device/rocm/CMakeLists.txt#1 add
... //depot/stg/opencl/drivers/opencl/tools/bc2h/CMakeLists.txt#1 add
---
rocclr/CMakeLists.txt | 18 ++-
.../loaders/elf/utils/libelf/CMakeLists.txt | 16 +++
rocclr/runtime/CMakeLists.txt | 54 ++++++++
rocclr/runtime/device/appprofile.cpp | 17 ++-
rocclr/runtime/device/rocm/CMakeLists.txt | 130 ++++++++++++++++++
5 files changed, 232 insertions(+), 3 deletions(-)
create mode 100644 rocclr/compiler/lib/loaders/elf/utils/libelf/CMakeLists.txt
create mode 100644 rocclr/runtime/CMakeLists.txt
create mode 100644 rocclr/runtime/device/rocm/CMakeLists.txt
diff --git a/rocclr/CMakeLists.txt b/rocclr/CMakeLists.txt
index 48824f86bf..1ba68e03d3 100644
--- a/rocclr/CMakeLists.txt
+++ b/rocclr/CMakeLists.txt
@@ -10,6 +10,9 @@ project(OpenCL-ROCm)
set(LLVM_INCLUDE_TESTS CACHE BOOL OFF)
set(LLVM_TARGETS_TO_BUILD "AMDGPU" "X86" CACHE STRING "")
set(LLVM_ENABLE_PROJECTS CACHE STRING "clang")
+set(LLVM_BUILD_GLOBAL_ISEL CACHE BOOL OFF)
+set(CLANG_ENABLE_ARCMT CACHE BOOL OFF)
+set(CLANG_ENABLE_STATIC_ANALYZER CACHE BOOL OFF)
add_subdirectory(compiler/llvm)
@@ -27,9 +30,22 @@ include_directories(${CMAKE_BINARY_DIR}/compiler/llvm/tools/clang/include)
include_directories(${CMAKE_SOURCE_DIR}/compiler/llvm/lib/Target/AMDGPU)
include_directories(${CMAKE_BINARY_DIR}/compiler/llvm/lib/Target/AMDGPU)
+set(AMD_EXTENSIONS CACHE BOOL OFF)
+set(BUILD_HSAILASM CACHE BOOL OFF)
+add_subdirectory(compiler/sc/HSAIL/hsail-tools)
+
add_subdirectory(compiler/driver)
set(CMAKE_C_COMPILER "${PROJECT_BINARY_DIR}/compiler/llvm/bin/clang")
set(BUILD_HC_LIB CACHE BOOL OFF)
set(ROCM_DEVICELIB_INCLUDE_TESTS CACHE BOOL OFF)
-add_subdirectory(library/amdgcn)
\ No newline at end of file
+add_subdirectory(library/amdgcn)
+
+add_subdirectory(compiler/lib/loaders/elf/utils/libelf)
+
+add_subdirectory(tools/bc2h)
+add_dependencies(bc2h clang) # FIXME: remove
+add_dependencies(oclelf clang) # FIXME: remove
+
+add_subdirectory(runtime)
+add_subdirectory(api/opencl/amdocl)
diff --git a/rocclr/compiler/lib/loaders/elf/utils/libelf/CMakeLists.txt b/rocclr/compiler/lib/loaders/elf/utils/libelf/CMakeLists.txt
new file mode 100644
index 0000000000..8a6d3e6ef1
--- /dev/null
+++ b/rocclr/compiler/lib/loaders/elf/utils/libelf/CMakeLists.txt
@@ -0,0 +1,16 @@
+set(CMAKE_CXX_FLAGS "-std=c++11")
+
+include_directories(${CMAKE_CURRENT_SOURCE_DIR})
+include_directories(${CMAKE_CURRENT_SOURCE_DIR}/../common)
+include_directories(${CMAKE_CURRENT_SOURCE_DIR}/../common/win32/sys)
+
+add_definitions(-DBSD_LIBELF -DUSE_MEMFILE)
+
+file(GLOB sources
+ ${CMAKE_CURRENT_SOURCE_DIR}/*.cpp
+ ${CMAKE_CURRENT_SOURCE_DIR}/*.c
+ ${CMAKE_CURRENT_SOURCE_DIR}/*.h
+)
+add_library(oclelf STATIC ${sources})
+set_target_properties(oclelf PROPERTIES POSITION_INDEPENDENT_CODE ON)
+
diff --git a/rocclr/runtime/CMakeLists.txt b/rocclr/runtime/CMakeLists.txt
new file mode 100644
index 0000000000..2827bbd15b
--- /dev/null
+++ b/rocclr/runtime/CMakeLists.txt
@@ -0,0 +1,54 @@
+set(CMAKE_CXX_FLAGS "-std=c++11")
+
+add_definitions(-DLINUX -D__x86_64__ -D__AMD64__ -DUNIX_OS -DqLittleEndian -DAMD_LIBELF -DOPENCL_MAJOR=2 -DOPENCL_MINOR=0 -DWITH_AQL -DWITH_ONLINE_COMPILER -DATI_OS_LINUX -DATI_ARCH_X86 -DLITTLEENDIAN_CPU -DATI_BITS_64 -DATI_COMP_GCC -DWITH_HSA_DEVICE -DWITH_TARGET_AMDGCN -DOPENCL_EXPORTS -DCL_USE_DEPRECATED_OPENCL_1_1_APIS -DCL_USE_DEPRECATED_OPENCL_1_2_APIS -DCL_USE_DEPRECATED_OPENCL_2_0_APIS -DWITH_VERSION_0_8=1 -DVEGA10_ONLY=false -DWITH_LIGHTNING_COMPILER -DBSD_LIBELF)
+
+include_directories(/opt/rocm/include/hsa)
+
+include_directories(${CMAKE_SOURCE_DIR}/runtime)
+include_directories(${CMAKE_SOURCE_DIR}/api/opencl)
+include_directories(${CMAKE_SOURCE_DIR}/api/opencl/khronos/headers)
+include_directories(${CMAKE_SOURCE_DIR}/api/opencl/khronos/headers/opencl2.0)
+include_directories(${CMAKE_SOURCE_DIR}/compiler/llvm/lib/Target/AMDGPU/MCTargetDesc)
+include_directories(${CMAKE_SOURCE_DIR}/compiler/driver/src)
+include_directories(${CMAKE_SOURCE_DIR}/compiler/lib)
+include_directories(${CMAKE_SOURCE_DIR}/compiler/lib/include)
+include_directories(${CMAKE_SOURCE_DIR}/compiler/lib/backends/common)
+include_directories(${CMAKE_SOURCE_DIR}/compiler/lib/loaders/elf/utils/common)
+include_directories(${CMAKE_SOURCE_DIR}/compiler/lib/loaders/elf/utils/libelf)
+include_directories(${CMAKE_SOURCE_DIR}/compiler/lib/loaders)
+include_directories(${CMAKE_SOURCE_DIR}/compiler/tools)
+
+add_subdirectory(device/rocm)
+
+add_library(oclruntime OBJECT
+ thread/thread.cpp
+ thread/monitor.cpp
+ thread/semaphore.cpp
+ utils/flags.cpp
+ utils/debug.cpp
+ device/appprofile.cpp
+ device/device.cpp
+ device/hwdebug.cpp
+ device/blitcl.cpp
+ device/blit.cpp
+ platform/kernel.cpp
+ platform/context.cpp
+ platform/command.cpp
+ platform/ndrange.cpp
+ platform/runtime.cpp
+ platform/object.cpp
+ platform/memory.cpp
+ platform/program.cpp
+ platform/commandqueue.cpp
+ platform/agent.cpp
+ os/os_win32.cpp
+ os/alloc.cpp
+ os/os.cpp
+ os/os_posix.cpp
+ ${CMAKE_SOURCE_DIR}/compiler/lib/utils/options.cpp
+ ${CMAKE_SOURCE_DIR}/compiler/lib/loaders/elf/elf.cpp
+ ${CMAKE_SOURCE_DIR}/compiler/lib/loaders/elf/elf_utils.cpp
+ ${CMAKE_SOURCE_DIR}/compiler/tools/caching/cache.cpp
+)
+set_target_properties(oclruntime PROPERTIES POSITION_INDEPENDENT_CODE ON)
+
diff --git a/rocclr/runtime/device/appprofile.cpp b/rocclr/runtime/device/appprofile.cpp
index 5fd61619fe..868c770450 100644
--- a/rocclr/runtime/device/appprofile.cpp
+++ b/rocclr/runtime/device/appprofile.cpp
@@ -6,10 +6,21 @@
#include "os/os.hpp"
#include "utils/flags.hpp"
#include "appprofile.hpp"
+#if !defined(WITH_LIGHTNING_COMPILER)
#include "adl.h"
+#endif // !defined(WITH_LIGHTNING_COMPILER)
#include
#include
+#if defined(WITH_LIGHTNING_COMPILER)
+typedef void* ADLApplicationProfile;
+int SearchProfileOfAnApplication(const wchar_t* fileName, ADLApplicationProfile** lppProfile)
+{
+ return 0;
+}
+#define __stdcall
+#endif // defined(WITH_LIGHTNING_COMPILER)
+
#ifdef BRAHMA
extern int SearchProfileOfAnApplication(const wchar_t* fileName,
ADLApplicationProfile** lppProfile);
@@ -21,7 +32,7 @@ static void* __stdcall adlMallocCallback(int n) { return malloc(n); }
namespace amd {
-#ifndef BRAHMA
+#if !defined(BRAHMA) && !defined(WITH_LIGHTNING_COMPILER)
class ADL {
public:
@@ -157,7 +168,7 @@ bool AppProfile::init() {
bool AppProfile::ParseApplicationProfile() {
ADLApplicationProfile* pProfile = NULL;
-#ifndef BRAHMA
+#if !defined(BRAHMA) && !defined(WITH_LIGHTNING_COMPILER)
amd::ADL* adl = new amd::ADL;
if ((adl == NULL) || !adl->init()) {
@@ -183,6 +194,7 @@ bool AppProfile::ParseApplicationProfile() {
return false;
}
+#if !defined(WITH_LIGHTNING_COMPILER)
PropertyRecord* firstProperty = pProfile->record;
uint32_t valueOffset = 0;
const int BUFSIZE = 1024;
@@ -224,6 +236,7 @@ bool AppProfile::ParseApplicationProfile() {
}
free(pProfile);
+#endif // !defined(WITH_LIGHTNING_COMPILER)
return true;
}
}
diff --git a/rocclr/runtime/device/rocm/CMakeLists.txt b/rocclr/runtime/device/rocm/CMakeLists.txt
new file mode 100644
index 0000000000..9579b3ea97
--- /dev/null
+++ b/rocclr/runtime/device/rocm/CMakeLists.txt
@@ -0,0 +1,130 @@
+set(headers
+ irif.amdgcn.inc
+ ockl.amdgcn.inc
+ ocml.amdgcn.inc
+ opencl.amdgcn.inc
+ oclc_unsafe_math_on.amdgcn.inc
+ oclc_unsafe_math_off.amdgcn.inc
+ oclc_finite_only_on.amdgcn.inc
+ oclc_finite_only_off.amdgcn.inc
+ oclc_correctly_rounded_sqrt_on.amdgcn.inc
+ oclc_correctly_rounded_sqrt_off.amdgcn.inc
+ oclc_daz_opt_off.amdgcn.inc
+ oclc_daz_opt_on.amdgcn.inc
+ oclc_isa_version_700.amdgcn.inc
+ oclc_isa_version_701.amdgcn.inc
+ oclc_isa_version_800.amdgcn.inc
+ oclc_isa_version_801.amdgcn.inc
+ oclc_isa_version_802.amdgcn.inc
+ oclc_isa_version_803.amdgcn.inc
+ oclc_isa_version_804.amdgcn.inc
+ oclc_isa_version_810.amdgcn.inc
+ oclc_isa_version_900.amdgcn.inc
+ oclc_isa_version_901.amdgcn.inc
+)
+
+
+include_directories(${CMAKE_SOURCE_DIR}/compiler/lib/loaders/elf/utils/common)
+include_directories(${CMAKE_SOURCE_DIR}/compiler/lib/loaders/elf/utils/libelf)
+include_directories(${CMAKE_SOURCE_DIR}/compiler/sc/HSAIL/include)
+include_directories(${CMAKE_SOURCE_DIR}/compiler/sc/HSAIL/hsail-tools/libHSAIL)
+include_directories(${CMAKE_BINARY_DIR}/compiler/sc/HSAIL/hsail-tools/libHSAIL/generated)
+include_directories(${CMAKE_CURRENT_BINARY_DIR})
+
+
+add_library(oclrocm OBJECT
+ rocprintf.cpp
+ rocprogram.cpp
+ rocmemory.cpp
+ rocdevice.cpp
+ roccompiler.cpp
+ rocblit.cpp
+ rockernel.cpp
+ rocvirtual.cpp
+ rocglinterop.cpp
+ rocappprofile.cpp
+ rocsettings.cpp
+ libraries.amdgcn.inc
+ opencl1.2-c.amdgcn.inc
+ opencl2.0-c.amdgcn.inc
+ ${headers}
+)
+set_target_properties(oclrocm PROPERTIES POSITION_INDEPENDENT_CODE ON)
+
+add_dependencies(oclrocm libhsail-includes)
+
+foreach(header ${headers})
+ string(REGEX REPLACE "([^._-]*)(.*).amdgcn.inc" "${CMAKE_BINARY_DIR}/library/amdgcn/\\1/\\1\\2.lib.bc" bclib ${header})
+ string(REGEX REPLACE ".inc$" "" target ${header})
+ string(REGEX REPLACE "[\\.-]" "_" symbol ${target})
+ string(REGEX REPLACE ".amdgcn.inc$" "" lib_bc ${header})
+
+ add_custom_command(OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/${target}.inc
+ COMMAND bc2h ${bclib} ${CMAKE_CURRENT_BINARY_DIR}/${target}.inc ${symbol}
+ DEPENDS ${bclib} ${lib_bc}_lib_bc
+ COMMENT "Generating ${target}.inc"
+ )
+ set_property(DIRECTORY APPEND PROPERTY ADDITIONAL_MAKE_CLEAN_FILES ${CMAKE_CURRENT_BINARY_DIR}/${target}.inc)
+
+ add_custom_target(${target}.inc ALL DEPENDS ${CMAKE_CURRENT_BINARY_DIR}/${target}.inc)
+ set_source_files_properties(${CMAKE_CURRENT_BINARY_DIR}/${target}.inc PROPERTIES HEADER_FILE_ONLY TRUE)
+
+ string(REGEX REPLACE ".amdgcn.inc$" "" lib_bc ${header})
+ #add_dependencies(${target}.inc ${lib_bc}_lib_bc)
+endforeach()
+
+file(WRITE ${CMAKE_CURRENT_BINARY_DIR}/libraries.amdgcn.inc "// Automatically generated file; DO NOT EDIT.\n")
+
+foreach(file ${headers})
+ string(REGEX REPLACE "(.*).inc$" "#include \"\\1.inc\"" line ${file})
+ file(APPEND ${CMAKE_CURRENT_BINARY_DIR}/libraries.amdgcn.inc "${line}\n")
+endforeach()
+
+file(APPEND ${CMAKE_CURRENT_BINARY_DIR}/libraries.amdgcn.inc
+ "static inline std::pair\nget_oclc_isa_version(uint gfxip)\n{\nswitch (gfxip) {\n")
+foreach(file ${headers})
+ string(REGEX MATCH "oclc_isa_version_(.*).amdgcn.inc" isa ${file})
+ if (NOT "${isa}" STREQUAL "")
+ string(REGEX REPLACE "oclc_isa_version_(.*).amdgcn.inc" "\\1" gfxip ${file})
+ file(APPEND ${CMAKE_CURRENT_BINARY_DIR}/libraries.amdgcn.inc
+ "case ${gfxip}: return std::make_pair(oclc_isa_version_${gfxip}_amdgcn, oclc_isa_version_${gfxip}_amdgcn_size); break;\n")
+ endif()
+endforeach()
+file(APPEND ${CMAKE_CURRENT_BINARY_DIR}/libraries.amdgcn.inc
+ "default: return std::make_pair((const void*)0,(size_t)0);\n}\n}\n")
+
+foreach(file ${headers})
+ string(REGEX MATCH "oclc_(.*)_on.amdgcn.inc" is_control ${file})
+ if (NOT "${is_control}" STREQUAL "")
+ string(REGEX REPLACE "oclc_(.*)_on.amdgcn.inc" "\\1" function ${file})
+ file(APPEND ${CMAKE_CURRENT_BINARY_DIR}/libraries.amdgcn.inc
+ "static inline std::pair get_oclc_${function}(bool on)\n{ return std::make_pair("
+ "(const char*)(on ? oclc_${function}_on_amdgcn : oclc_${function}_off_amdgcn),"
+ "on ? oclc_${function}_on_amdgcn_size : oclc_${function}_off_amdgcn_size);}\n")
+ endif()
+endforeach()
+
+add_custom_command(OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/opencl1.2-c.amdgcn.pch
+ COMMAND clang -cc1 -x cl-header -triple amdgcn-amd-amdhsa-opencl -Werror -O3 -Dcl_khr_fp64 -Dcl_khr_fp16 -DNDEBUG -cl-std=CL1.2 -emit-pch -o ${CMAKE_CURRENT_BINARY_DIR}/opencl1.2-c.amdgcn.pch < ${CMAKE_SOURCE_DIR}/compiler/llvm/tools/clang/lib/Headers/opencl-c.h
+ DEPENDS clang ${CMAKE_SOURCE_DIR}/compiler/llvm/tools/clang/lib/Headers/opencl-c.h
+ COMMENT "Generating opencl1.2-c.amdgcn.pch"
+)
+add_custom_command(OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/opencl1.2-c.amdgcn.inc
+ COMMAND bc2h ${CMAKE_CURRENT_BINARY_DIR}/opencl1.2-c.amdgcn.pch ${CMAKE_CURRENT_BINARY_DIR}/opencl1.2-c.amdgcn.inc opencl1_2_c_amdgcn
+ DEPENDS bc2h ${CMAKE_CURRENT_BINARY_DIR}/opencl1.2-c.amdgcn.pch
+ COMMENT "Generating opencl1.2-c.amdgcn.inc"
+)
+set_property(DIRECTORY APPEND PROPERTY ADDITIONAL_MAKE_CLEAN_FILES ${CMAKE_CURRENT_BINARY_DIR}/opencl2.0-c.amdgcn.inc ${CMAKE_CURRENT_BINARY_DIR}/opencl2.0-c.amdgcn.pch)
+
+add_custom_command(OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/opencl2.0-c.amdgcn.pch
+ COMMAND clang -cc1 -x cl-header -triple amdgcn-amd-amdhsa-opencl -Werror -O3 -Dcl_khr_fp64 -Dcl_khr_fp16 -DNDEBUG -cl-std=CL2.0 -emit-pch -o ${CMAKE_CURRENT_BINARY_DIR}/opencl2.0-c.amdgcn.pch < ${CMAKE_SOURCE_DIR}/compiler/llvm/tools/clang/lib/Headers/opencl-c.h
+ DEPENDS clang ${CMAKE_SOURCE_DIR}/compiler/llvm/tools/clang/lib/Headers/opencl-c.h
+ COMMENT "Generating opencl2.0-c.amdgcn.pch"
+)
+add_custom_command(OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/opencl2.0-c.amdgcn.inc
+ COMMAND bc2h ${CMAKE_CURRENT_BINARY_DIR}/opencl2.0-c.amdgcn.pch ${CMAKE_CURRENT_BINARY_DIR}/opencl2.0-c.amdgcn.inc opencl2_0_c_amdgcn
+ DEPENDS bc2h ${CMAKE_CURRENT_BINARY_DIR}/opencl2.0-c.amdgcn.pch
+ COMMENT "Generating opencl2.0-c.amdgcn.inc"
+)
+set_property(DIRECTORY APPEND PROPERTY ADDITIONAL_MAKE_CLEAN_FILES ${CMAKE_CURRENT_BINARY_DIR}/opencl2.0-c.amdgcn.inc ${CMAKE_CURRENT_BINARY_DIR}/opencl2.0-c.amdgcn.pch)
+