
# Copyright(c) 2017 Intel Corporation

# Permission is hereby granted, free of charge, to any person obtaining a
# copy of this software and associated documentation files(the "Software"),
# to deal in the Software without restriction, including without limitation
# the rights to use, copy, modify, merge, publish, distribute, sublicense,
# and / or sell copies of the Software, and to permit persons to whom the
# Software is furnished to do so, subject to the following conditions:

# The above copyright notice and this permission notice shall be included
# in all copies or substantial portions of the Software.

# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
# OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
# THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR
# OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
# ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
# OTHER DEALINGS IN THE SOFTWARE.


cmake_minimum_required(VERSION 3.5)
project(igfx_gmmumd)

# GmmLib Api Version used for so naming
set(GMMLIB_API_MAJOR_VERSION 12)
set(GMMLIB_API_MINOR_VERSION 1)

if(NOT DEFINED MAJOR_VERSION)
	set(MAJOR_VERSION 12)
endif()

if(NOT DEFINED MINOR_VERSION)
	set(MINOR_VERSION 1)
endif()

if(NOT DEFINED PATCH_VERSION)
	set(PATCH_VERSION 0)
endif()

if(NOT DEFINED GMMLIB_API_PATCH_VERSION)
    set(GMMLIB_API_PATCH_VERSION ${PATCH_VERSION})
endif()

message(STATUS "API version: ${GMMLIB_API_MAJOR_VERSION}.${GMMLIB_API_MINOR_VERSION}.${GMMLIB_API_PATCH_VERSION}")
message(STATUS "Package version: ${MAJOR_VERSION}.${MINOR_VERSION}.${PATCH_VERSION}")

if(NOT DEFINED BS_USE_OSDM_BUILD_SYSTEM)
    if(DEFINED ENV{BS_USE_OSDM_BUILD_SYSTEM})
        set(BS_USE_OSDM_BUILD_SYSTEM "$ENV{BS_USE_OSDM_BUILD_SYSTEM}")
    else()
        set(BS_USE_OSDM_BUILD_SYSTEM FALSE)
    endif()
endif()

# begin -- label bldsys file prologue
# WARNING: The "project" statement triggers reading of CMAKE_TOOLCHAIN_FILE
#   and so must precede the inclusion below of bs_init.cmake .
function(bs_find_build_system gfx_dev_dir build_sys_dir build_sys_inc)
    # If we are not building as a standalone project
    if(DEFINED GFX_DEVELOPMENT_DIR)
        set(_bs_gfx_development_dir "${GFX_DEVELOPMENT_DIR}")
    elseif(DEFINED ENV{GFX_DEVELOPMENT_DIR})
        set(_bs_gfx_development_dir "$ENV{GFX_DEVELOPMENT_DIR}")
    else()
        get_filename_component(_bs_cur_cmake_dir "${CMAKE_CURRENT_LIST_FILE}" PATH)
        get_filename_component(_bs_parent_dir "${_bs_cur_cmake_dir}" DIRECTORY)
        set(_bs_gfx_dir_found false)
        while(NOT _bs_gfx_dir_found)
            set(_bs_bldsys_dir "${_bs_parent_dir}/Tools/bldsys")
            if(EXISTS ${_bs_bldsys_dir})
                set(_bs_gfx_development_dir ${_bs_parent_dir})
                set(_bs_gfx_dir_found true)
                break()
            endif()
            get_filename_component(_bs_parent_dir "${_bs_parent_dir}" DIRECTORY)
            if(${_bs_parent_dir} STREQUAL "/")
                break()
            endif()
        endwhile(NOT _bs_gfx_dir_found)
        if (NOT _bs_gfx_development_dir)
            message(FATAL_ERROR "GFX_DEVELOPMENT_DIR not found (${_bs_gfx_development_dir}) - exiting!")
            exit(1)
        endif()
    endif()
    set(${gfx_dev_dir} "${_bs_gfx_development_dir}" PARENT_SCOPE)
    set(${build_sys_dir} "${_bs_gfx_development_dir}/Tools/bldsys" PARENT_SCOPE)
    set(${build_sys_inc} "${_bs_gfx_development_dir}/Tools/bldsys/include" PARENT_SCOPE)
endfunction(bs_find_build_system)

bs_find_build_system(GFX_DEVELOPMENT_DIR BUILD_SYS_DIR BUILD_SYS_INC)

include(${BUILD_SYS_DIR}/bs_init.cmake)
include(${BUILD_SYS_INC}/bs_dir_names.cmake)
# file prologue done


set(CMAKE_DISABLE_SOURCE_CHANGES ON)
set(CMAKE_DISABLE_IN_SOURCE_BUILD ON)

################################################################################
# Define GMM_DLL Target
################################################################################
set (GMM_LIB_DLL_NAME igfx_gmmumd_dll)

macro(GmmLibSetTargetConfig libTarget)
	if (TARGET ${libTarget})
			set_property(TARGET ${libTarget} APPEND PROPERTY COMPILE_DEFINITIONS
				$<$<CONFIG:Release>: _RELEASE>
				$<$<CONFIG:ReleaseInternal>: _RELEASE_INTERNAL>
				$<$<CONFIG:Debug>: _DEBUG>
			)
		endif()

endmacro()

if(CMAKE_CONFIGURATION_TYPES)
  set( CMAKE_CONFIGURATION_TYPES
      "Debug"
      "Release"
      "ReleaseInternal")

  set( CMAKE_CONFIGURATION_TYPES "${CMAKE_CONFIGURATION_TYPES}" CACHE STRING
       "Reset the configurations to what we need"
       FORCE)
endif()

set(GMMLIB_SOURCE_DIR ${CMAKE_CURRENT_SOURCE_DIR})
if(CMAKE_SIZEOF_VOID_P EQUAL 8)
    set (GMMLIB_ARCH "64")
else()
    set (GMMLIB_ARCH "32")
endif()

if ("${BUILD_TYPE}" STREQUAL "release")
    set(CMAKE_BUILD_TYPE "Release")
elseif ("${BUILD_TYPE}" STREQUAL "release-internal")
    set(CMAKE_BUILD_TYPE "ReleaseInternal")
elseif ("${BUILD_TYPE}" STREQUAL "debug")
    set(CMAKE_BUILD_TYPE "Debug")
endif()

if (${CMAKE_SYSTEM_PROCESSOR} MATCHES "^aarch")
    set(GMMLIB_MARCH "armv8-a+fp+simd")
elseif("${GMMLIB_MARCH}" STREQUAL "")
    set(GMMLIB_MARCH "corei7")
endif()

MESSAGE("platform: ${CMAKE_HOST_SYSTEM_NAME}")
MESSAGE("source_dir: ${BS_DIR_GMMLIB}")
MESSAGE("arch: ${GMMLIB_ARCH}")
MESSAGE("build type: ${CMAKE_BUILD_TYPE}")
MESSAGE("SourceConfiguration:")
MESSAGE("CommonDir: ${BS_DIR_COMMON}")
MESSAGE("IncDir: ${BS_DIR_INC}")

# If '-DGMM_DYNAMIC_MOCS_TABLE=TRUE' (default is FALSE) passed to cmake
# configure command gmmlib will generate MOCS table dynamically depending on
# usage requests (Gen9). In this case on Linux user responsibility is to
# make sure that generated MOCS table is programmed on KMD level.
if (GMM_DYNAMIC_MOCS_TABLE)
    MESSAGE("MOCS table: Dynamic")
    add_definitions(-DGMM_DYNAMIC_MOCS_TABLE)
else()
    MESSAGE("MOCS table: Static")
endif()

if(DEFINED UFO_DRIVER_OPTIMIZATION_LEVEL)
    if(${UFO_DRIVER_OPTIMIZATION_LEVEL} GREATER 0)
        add_definitions(-DGMM_GFX_GEN=${GFXGEN})
    endif()
endif()

set(HEADERS_
	${BS_DIR_GMMLIB}/CachePolicy/GmmCachePolicyConditionals.h
	${BS_DIR_GMMLIB}/CachePolicy/GmmCachePolicyResourceUsageDefinitions.h
	${BS_DIR_GMMLIB}/CachePolicy/GmmCachePolicyUndefineConditionals.h
	${BS_DIR_GMMLIB}/CachePolicy/GmmGen10CachePolicy.h
	${BS_DIR_GMMLIB}/CachePolicy/GmmGen11CachePolicy.h
	${BS_DIR_GMMLIB}/CachePolicy/GmmGen12CachePolicy.h
        ${BS_DIR_GMMLIB}/CachePolicy/GmmGen12dGPUCachePolicy.h
	${BS_DIR_GMMLIB}/CachePolicy/GmmGen8CachePolicy.h
	${BS_DIR_GMMLIB}/CachePolicy/GmmGen9CachePolicy.h
	${BS_DIR_GMMLIB}/inc/External/Common/CachePolicy/GmmCachePolicyGen10.h
	${BS_DIR_GMMLIB}/inc/External/Common/CachePolicy/GmmCachePolicyGen11.h
	${BS_DIR_GMMLIB}/inc/External/Common/CachePolicy/GmmCachePolicyGen12.h
        ${BS_DIR_GMMLIB}/inc/External/Common/CachePolicy/GmmCachePolicyGen12dGPU.h
	${BS_DIR_GMMLIB}/inc/External/Common/CachePolicy/GmmCachePolicyGen8.h
	${BS_DIR_GMMLIB}/inc/External/Common/CachePolicy/GmmCachePolicyGen9.h
	${BS_DIR_GMMLIB}/inc/External/Common/GmmCachePolicy.h
	${BS_DIR_GMMLIB}/inc/External/Common/GmmCachePolicyCommon.h
	${BS_DIR_GMMLIB}/inc/External/Common/GmmCachePolicyExt.h
	${BS_DIR_GMMLIB}/inc/External/Common/GmmCommonExt.h
	${BS_DIR_GMMLIB}/inc/External/Common/GmmConst.h
	${BS_DIR_GMMLIB}/inc/External/Common/GmmDebug.h
	${BS_DIR_GMMLIB}/inc/External/Common/GmmFormatTable.h
	${BS_DIR_GMMLIB}/inc/External/Common/GmmHw.h
	${BS_DIR_GMMLIB}/inc/External/Common/GmmInfo.h
	${BS_DIR_GMMLIB}/inc/External/Common/GmmInfoExt.h
	${BS_DIR_GMMLIB}/inc/External/Common/GmmInternal.h
	${BS_DIR_GMMLIB}/inc/External/Common/GmmMemAllocator.hpp

	${BS_DIR_GMMLIB}/inc/External/Common/GmmPlatformExt.h
	${BS_DIR_GMMLIB}/inc/External/Common/GmmProto.h
	${BS_DIR_GMMLIB}/inc/External/Common/GmmResourceFlags.h
	${BS_DIR_GMMLIB}/inc/External/Common/GmmResourceInfo.h
	${BS_DIR_GMMLIB}/inc/External/Common/GmmResourceInfoCommon.h
	${BS_DIR_GMMLIB}/inc/External/Common/GmmResourceInfoExt.h
	${BS_DIR_GMMLIB}/inc/External/Common/GmmTextureExt.h
	${BS_DIR_GMMLIB}/inc/External/Common/GmmUtil.h
	${BS_DIR_GMMLIB}/inc/External/Linux/GmmResourceInfoLin.h
        ${BS_DIR_GMMLIB}/inc/External/Linux/GmmResourceInfoLinExt.h
	${BS_DIR_GMMLIB}/inc/Internal/Common/Platform/GmmGen10Platform.h
	${BS_DIR_GMMLIB}/inc/Internal/Common/Platform/GmmGen11Platform.h
	${BS_DIR_GMMLIB}/inc/Internal/Common/Platform/GmmGen12Platform.h
	${BS_DIR_GMMLIB}/inc/Internal/Common/Platform/GmmGen8Platform.h
	${BS_DIR_GMMLIB}/inc/Internal/Common/Platform/GmmGen9Platform.h
	${BS_DIR_GMMLIB}/inc/Internal/Common/Texture/GmmGen10TextureCalc.h
	${BS_DIR_GMMLIB}/inc/Internal/Common/Texture/GmmGen11TextureCalc.h
	${BS_DIR_GMMLIB}/inc/Internal/Common/Texture/GmmGen12TextureCalc.h
	${BS_DIR_GMMLIB}/inc/Internal/Common/Texture/GmmGen7TextureCalc.h
	${BS_DIR_GMMLIB}/inc/Internal/Common/Texture/GmmGen8TextureCalc.h
	${BS_DIR_GMMLIB}/inc/Internal/Common/Texture/GmmGen9TextureCalc.h
	${BS_DIR_GMMLIB}/inc/Internal/Common/Texture/GmmTextureCalc.h
	${BS_DIR_GMMLIB}/inc/Internal/Common/GmmCommonInt.h
	${BS_DIR_GMMLIB}/inc/Internal/Common/GmmLibInc.h
	${BS_DIR_GMMLIB}/inc/GmmLib.h
	${BS_DIR_GMMLIB}/inc/Internal/Common/GmmLogger.h
)

set(UMD_HEADERS
	${HEADERS_}
	${BS_DIR_GMMLIB}/inc/External/Common/GmmPageTableMgr.h
	${BS_DIR_GMMLIB}/inc/External/Common/GmmClientContext.h
        ${BS_DIR_GMMLIB}/inc/External/Common/GmmLibDll.h
        ${BS_DIR_GMMLIB}/inc/External/Common/GmmLibDllName.h
	)


set(SOURCES_
  ${BS_DIR_COMMON}/AssertTracer/AssertTracer.cpp
  ${BS_DIR_GMMLIB}/CachePolicy/GmmCachePolicy.cpp
  ${BS_DIR_GMMLIB}/CachePolicy/GmmCachePolicyCommon.cpp
  ${BS_DIR_GMMLIB}/CachePolicy/GmmGen8CachePolicy.cpp
  ${BS_DIR_GMMLIB}/CachePolicy/GmmGen9CachePolicy.cpp
  ${BS_DIR_GMMLIB}/CachePolicy/GmmGen10CachePolicy.cpp
  ${BS_DIR_GMMLIB}/CachePolicy/GmmGen11CachePolicy.cpp
  ${BS_DIR_GMMLIB}/CachePolicy/GmmGen12CachePolicy.cpp
  ${BS_DIR_GMMLIB}/CachePolicy/GmmGen12dGPUCachePolicy.cpp
  ${BS_DIR_GMMLIB}/Platform/GmmGen11Platform.cpp
  ${BS_DIR_GMMLIB}/Platform/GmmGen12Platform.cpp
  ${BS_DIR_GMMLIB}/Platform/GmmGen8Platform.cpp
  ${BS_DIR_GMMLIB}/Platform/GmmGen9Platform.cpp
  ${BS_DIR_GMMLIB}/Platform/GmmGen10Platform.cpp
  ${BS_DIR_GMMLIB}/Platform/GmmPlatform.cpp
  ${BS_DIR_GMMLIB}/Resource/GmmResourceInfo.cpp
  ${BS_DIR_GMMLIB}/Resource/GmmResourceInfoCommon.cpp
  ${BS_DIR_GMMLIB}/Resource/GmmResourceInfoCommonEx.cpp
  ${BS_DIR_GMMLIB}/Resource/GmmRestrictions.cpp
  ${BS_DIR_GMMLIB}/Resource/Linux/GmmResourceInfoLinCWrapper.cpp
  ${BS_DIR_GMMLIB}/Texture/GmmGen7Texture.cpp
  ${BS_DIR_GMMLIB}/Texture/GmmGen8Texture.cpp
  ${BS_DIR_GMMLIB}/Texture/GmmGen9Texture.cpp
  ${BS_DIR_GMMLIB}/Texture/GmmGen10Texture.cpp
  ${BS_DIR_GMMLIB}/Texture/GmmGen11Texture.cpp
  ${BS_DIR_GMMLIB}/Texture/GmmGen12Texture.cpp
  ${BS_DIR_GMMLIB}/Texture/GmmTexture.cpp
  ${BS_DIR_GMMLIB}/Texture/GmmTextureAlloc.cpp
  ${BS_DIR_GMMLIB}/Texture/GmmTextureSpecialCases.cpp
  ${BS_DIR_GMMLIB}/Texture/GmmTextureOffset.cpp
  ${BS_DIR_GMMLIB}/GlobalInfo/GmmInfo.cpp
  ${BS_DIR_GMMLIB}/Utility/CpuSwizzleBlt/CpuSwizzleBlt.c
  ${BS_DIR_GMMLIB}/Utility/GmmLog/GmmLog.cpp
  ${BS_DIR_GMMLIB}/Utility/GmmUtility.cpp
)

set(UMD_SOURCES
  ${SOURCES_}
  ${BS_DIR_GMMLIB}/TranslationTable/GmmAuxTable.cpp
  ${BS_DIR_GMMLIB}/TranslationTable/GmmPageTableMgr.cpp
  ${BS_DIR_GMMLIB}/TranslationTable/GmmUmdTranslationTable.cpp
  ${BS_DIR_GMMLIB}/GlobalInfo/GmmClientContext.cpp
  ${BS_DIR_GMMLIB}/GlobalInfo/GmmLibDllMain.cpp
  )

source_group("Source Files\\Cache Policy\\Client Files" FILES
			${BS_DIR_GMMLIB}/CachePolicy/GmmCachePolicyResourceUsageDefinitions.h
			${BS_DIR_GMMLIB}/CachePolicy/GmmGen10CachePolicy.h
			${BS_DIR_GMMLIB}/CachePolicy/GmmGen11CachePolicy.h
			${BS_DIR_GMMLIB}/CachePolicy/GmmGen12CachePolicy.h
                        ${BS_DIR_GMMLIB}/CachePolicy/GmmGen12dGPUCachePolicy.h
			${BS_DIR_GMMLIB}/CachePolicy/GmmGen8CachePolicy.h
			${BS_DIR_GMMLIB}/CachePolicy/GmmGen9CachePolicy.h
			)

source_group("Source Files\\Cache Policy" ${BS_DIR_GMMLIB}/CachePolicy/*.cpp)
source_group("Source Files\\Global" ${BS_DIR_GMMLIB}/GlobalInfo/.*)
source_group("Source Files\\Platform" ${BS_DIR_GMMLIB}/Platform/.*)
source_group("Source Files\\Texture" ${BS_DIR_GMMLIB}/Texture/.*)
source_group("Source Files\\Translation Table" ${BS_DIR_GMMLIB}/TranslationTable/.*)
source_group("Source Files\\Utility" ${BS_DIR_GMMLIB}/Utility/.*)

source_group("Source Files\\Resource" FILES
			${BS_DIR_GMMLIB}/Resource/GmmResourceInfo.cpp
			${BS_DIR_GMMLIB}/Resource/GmmResourceInfoCommon.cpp
			${BS_DIR_GMMLIB}/Resource/GmmResourceInfoCommonEx.cpp
			${BS_DIR_GMMLIB}/Resource/GmmRestrictions.cpp)

source_group("Source Files\\Resource\\Linux" FILES
			${BS_DIR_GMMLIB}/Resource/Linux/GmmResourceInfoLinCWrapper.cpp
			)

source_group("Source Files\\TranslationTable\\Windows" FILES
			 ${BS_DIR_GMMLIB}/TranslationTable/GmmAuxTable.cpp
			 ${BS_DIR_GMMLIB}/TranslationTable/GmmPageTableMgr.cpp
			 ${BS_DIR_GMMLIB}/TranslationTable/GmmUmdTranslationTable.cpp)

source_group("Source Files\\TranslationTable" FILES
			${BS_DIR_GMMLIB}/TranslationTable/GmmUmdTranslationTable.h)

source_group("Header Files\\External\\Common" FILES
			${BS_DIR_GMMLIB}/inc/External/Common/GmmCachePolicy.h
			${BS_DIR_GMMLIB}/inc/External/Common/GmmCachePolicyCommon.h
			${BS_DIR_GMMLIB}/inc/External/Common/GmmCachePolicyExt.h
			${BS_DIR_GMMLIB}/inc/External/Common/GmmCommonExt.h
			${BS_DIR_GMMLIB}/inc/External/Common/GmmConst.h
			${BS_DIR_GMMLIB}/inc/External/Common/GmmDebug.h
			${BS_DIR_GMMLIB}/inc/External/Common/GmmFormatTable.h
			${BS_DIR_GMMLIB}/inc/External/Common/GmmHw.h
			${BS_DIR_GMMLIB}/inc/External/Common/GmmInfo.h
			${BS_DIR_GMMLIB}/inc/External/Common/GmmInfoExt.h
			${BS_DIR_GMMLIB}/inc/External/Common/GmmInternal.h
			${BS_DIR_GMMLIB}/inc/External/Common/GmmMemAllocator.hpp
			${BS_DIR_GMMLIB}/inc/External/Common/GmmPageTableMgr.h
			${BS_DIR_GMMLIB}/inc/External/Common/GmmPlatformExt.h
			${BS_DIR_GMMLIB}/inc/External/Common/GmmResourceFlags.h
			${BS_DIR_GMMLIB}/inc/External/Common/GmmResourceInfo.h
			${BS_DIR_GMMLIB}/inc/External/Common/GmmResourceInfoCommon.h
			${BS_DIR_GMMLIB}/inc/External/Common/GmmResourceInfoExt.h
			${BS_DIR_GMMLIB}/inc/External/Common/GmmTextureExt.h
			${BS_DIR_GMMLIB}/inc/External/Common/GmmUtil.h
			${BS_DIR_GMMLIB}/inc/External/Common/GmmClientContext.h
			)

source_group("Header Files" FILES
			${BS_DIR_GMMLIB}/inc/GmmLib.h
			)

source_group("Header Files\\External\\Common\\Cache Policy" FILES
			${BS_DIR_GMMLIB}/inc/External/Common/CachePolicy/GmmCachePolicyGen10.h
			${BS_DIR_GMMLIB}/inc/External/Common/CachePolicy/GmmCachePolicyGen11.h
			${BS_DIR_GMMLIB}/inc/External/Common/CachePolicy/GmmCachePolicyGen12.h
                        ${BS_DIR_GMMLIB}/inc/External/Common/CachePolicy/GmmCachePolicyGen12dGPU.h
			${BS_DIR_GMMLIB}/inc/External/Common/CachePolicy/GmmCachePolicyGen8.h
			${BS_DIR_GMMLIB}/inc/External/Common/CachePolicy/GmmCachePolicyGen9.h
			)

source_group("Header Files\\External\\Linux" FILES
			 ${BS_DIR_GMMLIB}/inc/External/Linux/GmmResourceInfoLin.h
			 ${BS_DIR_GMMLIB}/inc/External/Linux/GmmResourceInfoLinExt.h
			)

source_group("Header Files\\Internal\\Common" FILES
			${BS_DIR_GMMLIB}/inc/Internal/Common/GmmLibInc.h
			${BS_DIR_GMMLIB}/inc/Internal/Common/GmmProto.h
			)

source_group("Header Files\\Internal\\Common\\Platform" FILES
			${BS_DIR_GMMLIB}/inc/Internal/Common/Platform/GmmGen10Platform.h
			${BS_DIR_GMMLIB}/inc/Internal/Common/Platform/GmmGen11Platform.h
			${BS_DIR_GMMLIB}/inc/Internal/Common/Platform/GmmGen12Platform.h
			${BS_DIR_GMMLIB}/inc/Internal/Common/Platform/GmmGen8Platform.h
			${BS_DIR_GMMLIB}/inc/Internal/Common/Platform/GmmGen9Platform.h
			)

source_group("Header Files\\Internal\\Common\\Texture" FILES
			${BS_DIR_GMMLIB}/inc/Internal/Common/Texture/GmmGen10TextureCalc.h
			${BS_DIR_GMMLIB}/inc/Internal/Common/Texture/GmmGen11TextureCalc.h
			${BS_DIR_GMMLIB}/inc/Internal/Common/Texture/GmmGen12TextureCalc.h
			${BS_DIR_GMMLIB}/inc/Internal/Common/Texture/GmmGen7TextureCalc.h
			${BS_DIR_GMMLIB}/inc/Internal/Common/Texture/GmmGen8TextureCalc.h
			${BS_DIR_GMMLIB}/inc/Internal/Common/Texture/GmmGen9TextureCalc.h
			${BS_DIR_GMMLIB}/inc/Internal/Common/Texture/GmmTextureCalc.h
			)

include_directories(BEFORE ${BS_DIR_GMMLIB}/)

include_directories(BEFORE ${PROJECT_SOURCE_DIR})


  include_directories(
  ${BS_DIR_GMMLIB}
  ${BS_DIR_GMMLIB}/Utility/GmmLog
  ${BS_DIR_GMMLIB}/inc
  ${BS_DIR_GMMLIB}/Utility
  ${BS_DIR_GMMLIB}/GlobalInfo
  ${BS_DIR_GMMLIB}/Texture
  ${BS_DIR_GMMLIB}/Resource
  ${BS_DIR_GMMLIB}/Platform
  ${BS_DIR_UTIL}
  ${BS_DIR_INC}
  ${BS_DIR_INC}/common
  ${BS_DIR_INC}/umKmInc
  ${BS_DIR_INSTALL}
  #${BS_DIR_ANDROID}/include
  )

if(${CMAKE_SYSTEM_PROCESSOR} MATCHES "^aarch")
    include_directories(${GFX_DEVELOPMENT_DIR}/third_party/sse2neon)
endif()

set(headers
	${HEADERS_}
)

  set(SOURCES
    ${SOURCES_}
  )

# set compiler options
include(Linux.cmake)

###################################################################################
# create dll library
###################################################################################
add_library( ${GMM_LIB_DLL_NAME} SHARED igdgmm.rc ${UMD_SOURCES} ${UMD_HEADERS})

if(MSVC)

set_target_properties(${GMM_LIB_DLL_NAME} PROPERTIES OUTPUT_NAME "igdgmm${GMMLIB_ARCH}")

bs_set_wdk(${GMM_LIB_DLL_NAME})
GmmLibSetTargetConfig( ${GMM_LIB_DLL_NAME} )

set_target_properties(${GMM_LIB_DLL_NAME} PROPERTIES VS_GLOBAL_DriverTargetPlatform Universal)
set_target_properties(${GMM_LIB_DLL_NAME} PROPERTIES VS_PLATFORM_TOOLSET WindowsApplicationForDrivers10.0)
windows_umd_props_universal(${GMM_LIB_DLL_NAME})

target_link_libraries( ${GMM_LIB_DLL_NAME}
            onecoreuap.lib
        )
else()
	set_target_properties(${GMM_LIB_DLL_NAME} PROPERTIES OUTPUT_NAME "igdgmm")
	set_target_properties(${GMM_LIB_DLL_NAME} PROPERTIES VERSION ${GMMLIB_API_MAJOR_VERSION}.${GMMLIB_API_MINOR_VERSION}.${GMMLIB_API_PATCH_VERSION})
	set_target_properties(${GMM_LIB_DLL_NAME} PROPERTIES SOVERSION ${GMMLIB_API_MAJOR_VERSION})
        set(THREADS_PREFER_PTHREAD_FLAG ON)
        find_package(Threads REQUIRED)
        target_link_libraries(${GMM_LIB_DLL_NAME} Threads::Threads)

endif()


###################################################################################
# End of DLL create library
###################################################################################

bs_set_defines()
bs_set_force_exceptions()
bs_set_post_target()

###################################################################################
# Set common macros for DLL
###################################################################################
bs_set_extra_target_properties(${GMM_LIB_DLL_NAME}
      _ATL_NO_WIN_SUPPORT
      SMALL_POOL_ALLOC
      __GMM
      __GFX_MACRO_C__
      UNUSED_ISTDLIB_MT
	  __UMD
	  GMM_UNIFY_DAF_API
	  )

if(CMAKE_BUILD_TYPE STREQUAL "ReleaseInternal")
	bs_set_extra_target_properties(${GMM_LIB_DLL_NAME} _RELEASE_INTERNAL)
endif()

target_include_directories(${GMM_LIB_DLL_NAME} INTERFACE
        ${BS_DIR_GMMLIB}/inc
        ${BS_DIR_INC}
        ${BS_DIR_INC}/common)

###################################################################################
# End of Set macros DLL
###################################################################################

bs_set_extra_target_properties(${GMM_LIB_DLL_NAME}
	ISTDLIB_UMD
	UNUSED_ISTDLIB_MT
	GMM_UNIFIED_LIB
	GMM_LIB_DLL
        GMM_LIB_DLL_EXPORTS
)

if("${GMMLIB_ARCH}" MATCHES "64")
	bs_set_extra_target_properties(${GMM_LIB_DLL_NAME}
		_X64)
endif()

if(NOT DEFINED RUN_TEST_SUITE OR RUN_TEST_SUITE)
    add_subdirectory(ULT)
endif()

set (GMM_UMD_DLL "igdgmm")

include(os_release_info.cmake)

get_os_release_info(os_name os_version)

if("${os_name}" STREQUAL "clear-linux-os")
    # clear-linux-os distribution avoids /etc for distribution defaults.
    # Set this variable explicitly before including GNUInstallDirs.
    set(CMAKE_INSTALL_SYSCONFDIR "usr/share/defaults/etc")
endif()

if(UNIX)
    include(GNUInstallDirs)

    configure_file(${BS_DIR_GMMLIB}/igdgmm.h.in ${CMAKE_BINARY_DIR}/igdgmm.h)
    configure_file(${BS_DIR_GMMLIB}/igdgmm.pc.in ${CMAKE_BINARY_DIR}/igdgmm.pc @ONLY)

    file(WRITE ${CMAKE_CURRENT_BINARY_DIR}/tmp/postinst "/sbin/ldconfig\n")
    file(WRITE ${CMAKE_CURRENT_BINARY_DIR}/tmp/postrm "/sbin/ldconfig\n")
    file(COPY ${CMAKE_CURRENT_BINARY_DIR}/tmp/postinst DESTINATION ${CMAKE_CURRENT_BINARY_DIR} FILE_PERMISSIONS OWNER_READ OWNER_WRITE OWNER_EXECUTE GROUP_READ GROUP_EXECUTE WORLD_READ WORLD_EXECUTE)
    file(COPY ${CMAKE_CURRENT_BINARY_DIR}/tmp/postrm DESTINATION ${CMAKE_CURRENT_BINARY_DIR} FILE_PERMISSIONS OWNER_READ OWNER_WRITE OWNER_EXECUTE GROUP_READ GROUP_EXECUTE WORLD_READ WORLD_EXECUTE)

    install(TARGETS ${GMM_LIB_DLL_NAME} LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR} COMPONENT gmmlib NAMELINK_SKIP)
    install(TARGETS ${GMM_LIB_DLL_NAME} LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR} COMPONENT gmmlib-devel NAMELINK_ONLY)

    install(DIRECTORY ${BS_DIR_GMMLIB} DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/igdgmm COMPONENT gmmlib-devel
        FILES_MATCHING PATTERN "*.h"
        PATTERN "*.hpp"
        PATTERN "Internal" EXCLUDE
        PATTERN "ULT" EXCLUDE
	PATTERN "spdlog" EXCLUDE)

    install (DIRECTORY ${BS_DIR_INC} DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/igdgmm COMPONENT gmmlib-devel
        FILES_MATCHING PATTERN "*.h"
        PATTERN "*.hpp")

    install (DIRECTORY ${BS_DIR_UTIL} DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/igdgmm COMPONENT gmmlib-devel
        FILES_MATCHING PATTERN "*.h"
        PATTERN "*.hpp")

    install (FILES ${BS_DIR_GMMLIB}/Utility/CpuSwizzleBlt/CpuSwizzleBlt.c
        DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/igdgmm/GmmLib/Utility/CpuSwizzleBlt/ COMPONENT gmmlib-devel)

    install(FILES ${CMAKE_BINARY_DIR}/igdgmm.pc DESTINATION ${CMAKE_INSTALL_LIBDIR}/pkgconfig COMPONENT gmmlib-devel)
    install(FILES ${CMAKE_BINARY_DIR}/igdgmm.h DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/igdgmm COMPONENT gmmlib-devel)

    if(GMMLIB_CPACK_GENERATOR)
        set(CPACK_GENERATOR "${GMMLIB_CPACK_GENERATOR}")
    else()
        # If generators list was not define build native package for current distro
        if(EXISTS "/etc/debian_version")
        set(CPACK_GENERATOR "DEB")
        elseif(EXISTS "/etc/redhat-release")
        set(CPACK_GENERATOR "RPM")
        else()
        set(CPACK_GENERATOR "TXZ")
        endif()
    endif()

    set(CPACK_PACKAGE_NAME "intel")
    set(CPACK_PACKAGE_VENDOR "Intel Corporation")
    set(CPACK_PACKAGE_DESCRIPTION_SUMMARY "Intel(R) Graphics Memory Management Library Package")
    set(CPACK_PACKAGE_ARCHITECTURE "x86_64")

    set(CPACK_PACKAGE_VERSION_MAJOR ${MAJOR_VERSION})
    set(CPACK_PACKAGE_VERSION_MINOR ${MINOR_VERSION})
    set(CPACK_PACKAGE_VERSION_PATCH ${PATCH_VERSION})
    set(CPACK_PACKAGE_VERSION "${CPACK_PACKAGE_VERSION_MAJOR}.${CPACK_PACKAGE_VERSION_MINOR}.${CPACK_PACKAGE_VERSION_PATCH}")

    set(CPACK_PACKAGE_INSTALL_DIRECTORY ${GMMLIB_INSTALL_TIME_ROOT_DIR})
    set(CPACK_SET_DESTDIR TRUE)
    set(CPACK_PACKAGE_RELOCATABLE FALSE)

    set(CPACK_DEBIAN_PACKAGE_ARCHITECTURE "amd64")
    set(CPACK_DEBIAN_PACKAGE_MAINTAINER "Intel")
    set(CPACK_DEBIAN_COMPRESSION_TYPE "xz")
    set(CPACK_DEBIAN_PACKAGE_CONTROL_EXTRA "${CMAKE_CURRENT_BINARY_DIR}/postinst;${CMAKE_CURRENT_BINARY_DIR}/postrm")

    set(CPACK_RPM_PACKAGE_ARCHITECTURE "x86_64")
    set(CPACK_RPM_PACKAGE_RELEASE 1)
    set(CPACK_RPM_COMPRESSION_TYPE "xz")
    set(CPACK_RPM_POST_INSTALL_SCRIPT_FILE "${CMAKE_CURRENT_BINARY_DIR}/postinst")
    set(CPACK_RPM_POST_UNINSTALL_SCRIPT_FILE "${CMAKE_CURRENT_BINARY_DIR}/postrm")

    if(CMAKE_VERSION VERSION_GREATER 3.6 OR CMAKE_VERSION VERSION_EQUAL 3.6)
      set(CPACK_DEBIAN_GMMLIB_FILE_NAME "intel-gmmlib_${CPACK_PACKAGE_VERSION}_${CPACK_DEBIAN_PACKAGE_ARCHITECTURE}.deb")
      set(CPACK_DEBIAN_GMMLIB-DEVEL_FILE_NAME "intel-gmmlib-devel_${CPACK_PACKAGE_VERSION}_${CPACK_DEBIAN_PACKAGE_ARCHITECTURE}.deb")

      set(CPACK_RPM_GMMLIB_FILE_NAME "intel-gmmlib-${CPACK_PACKAGE_VERSION}-${CPACK_RPM_PACKAGE_RELEASE}%{?dist}.${CPACK_RPM_PACKAGE_ARCHITECTURE}.rpm")
      set(CPACK_RPM_GMMLIB-DEVEL_FILE_NAME "intel-gmmlib-devel-${CPACK_PACKAGE_VERSION}-${CPACK_RPM_PACKAGE_RELEASE}%{?dist}.${CPACK_RPM_PACKAGE_ARCHITECTURE}.rpm")

      set(CPACK_ARCHIVE_GMMLIB_FILE_NAME "intel-gmmlib-${CPACK_PACKAGE_VERSION}-${CPACK_PACKAGE_ARCHITECTURE}")
      set(CPACK_ARCHIVE_GMMLIB-DEVEL_FILE_NAME "intel-gmmlib-devel-${CPACK_PACKAGE_VERSION}-${CPACK_PACKAGE_ARCHITECTURE}")
    else()
      if(CPACK_GENERATOR STREQUAL "DEB")
        set(CPACK_PACKAGE_FILE_NAME "intel-gmmlib_${CPACK_PACKAGE_VERSION}_${CPACK_DEBIAN_PACKAGE_ARCHITECTURE}")
      elseif(CPACK_GENERATOR STREQUAL "RPM")
        set(CPACK_PACKAGE_FILE_NAME "intel-gmmlib-${CPACK_PACKAGE_VERSION}-${CPACK_RPM_PACKAGE_RELEASE}%{?dist}.${CPACK_RPM_PACKAGE_ARCHITECTURE}.rpm")
      else()
        set(CPACK_PACKAGE_FILE_NAME "intel-gmmlib-${CPACK_PACKAGE_VERSION}-${CPACK_PACKAGE_ARCHITECTURE}")
      endif()
    endif()

    set(CPACK_DEBIAN_GMMLIB-DEVEL_PACKAGE_DEPENDS "intel-gmmlib(=${CPACK_PACKAGE_VERSION})")
    set(CPACK_RPM_GMMLIB-DEVEL_PACKAGE_REQUIRES "intel-gmmlib = ${CPACK_PACKAGE_VERSION}")

    set(CPACK_COMPONENT_INSTALL ON)
    set(CPACK_DEB_COMPONENT_INSTALL ON)
    set(CPACK_RPM_COMPONENT_INSTALL ON)
    set(CPACK_ARCHIVE_COMPONENT_INSTALL ON)
    set(CPACK_COMPONENTS_ALL gmmlib gmmlib-devel)

    include (CPack)

endif()
