#/******************************************************************************
 #* Copyright (c) 2014, Texas Instruments Incorporated - http://www.ti.com/
 #*   All rights reserved.
 #*
 #*   Redistribution and use in source and binary forms, with or without
 #*   modification, are permitted provided that the following conditions are met:
 #*       * Redistributions of source code must retain the above copyright
 #*         notice, this list of conditions and the following disclaimer.
 #*       * Redistributions in binary form must reproduce the above copyright
 #*         notice, this list of conditions and the following disclaimer in the
 #*         documentation and/or other materials provided with the distribution.
 #*       * Neither the name of Texas Instruments Incorporated nor the
 #*         names of its contributors may be used to endorse or promote products
 #*         derived from this software without specific prior written permission.
 #*
 #*   THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
 #*   AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
 #*   IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 
 #*   ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
 #*   LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
 #*   CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
 #*   SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
 #*   INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
 #*   CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
 #*   ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
 #*   THE POSSIBILITY OF SUCH DAMAGE.
 #*****************************************************************************/
CMAKE_MINIMUM_REQUIRED (VERSION 2.6)
SET (CMAKE_BUILD_TYPE Release)

PROJECT (ti-openmpacc)

IF (CROSS_BUILD)
    MESSAGE (STATUS "x86 BUILD MACHINE detected, CROSS_BUILD triggered")
    SET(NATIVE_BUILD OFF)
ELSE()
    MESSAGE (STATUS "ARM BUILD MACHINE detected, NATIVE BUILD triggered")
    SET(NATIVE_BUILD ON)
ENDIF()

# Set Project Version
# If VERSION is supplied use that, other wise set last known version
IF(VERSION) # Get from supplied VERSION
    STRING(REPLACE "." ";" PROJECT_VERSION ${VERSION})
    LIST(GET PROJECT_VERSION 0 ${PROJECT_NAME}_MAJOR_VERSION)
    LIST(GET PROJECT_VERSION 1 ${PROJECT_NAME}_MINOR_VERSION)
    LIST(GET PROJECT_VERSION 2 ${PROJECT_NAME}_PATCH_LEVEL)
ELSE() # Set Last known version
    SET (${PROJECT_NAME}_MAJOR_VERSION 1)
    SET (${PROJECT_NAME}_MINOR_VERSION 1)
    SET (${PROJECT_NAME}_PATCH_LEVEL 0)
ENDIF()

# OpenMPAcc platform version
SET(${PROJECT_NAME}_VERSION ${${PROJECT_NAME}_MAJOR_VERSION}.${${PROJECT_NAME}_MINOR_VERSION}.${${PROJECT_NAME}_PATCH_LEVEL})
MESSAGE (STATUS "Build version is ${${PROJECT_NAME}_VERSION}")

# Set SONAME for OpenMPAcc library
SET(${PROJECT_NAME}_SOVERSION ${${PROJECT_NAME}_MAJOR_VERSION})

SET (CMAKE_INSTALL_PREFIX $ENV{DESTDIR})
MESSAGE (STATUS "Install path is ${CMAKE_INSTALL_PREFIX}")

# Set up install permissions for file, directories and binaries.
SET (OMPACC_FPERMS PERMISSIONS 
               OWNER_READ OWNER_WRITE 
	       GROUP_READ GROUP_WRITE 
	       WORLD_READ)

# Directory permissions (775). Files within the directories are set as above.
SET (OMPACC_DPERMS FILE_${OMPACC_FPERMS} 
               DIRECTORY_PERMISSIONS 
	       OWNER_READ OWNER_WRITE OWNER_EXECUTE 
	       GROUP_READ GROUP_WRITE GROUP_EXECUTE 
	       WORLD_READ WORLD_EXECUTE)

# Binary permissions (775)
SET (OMPACC_BPERMS PERMISSIONS 
               OWNER_READ OWNER_WRITE OWNER_EXECUTE 
	       GROUP_READ GROUP_WRITE GROUP_EXECUTE 
	       WORLD_READ WORLD_EXECUTE)

IF (NOT OMPACC_EXAMPLES_DIR)
    SET(OMPACC_EXAMPLES_DIR ${CMAKE_CURRENT_SOURCE_DIR}/../openmpacc-examples)
ENDIF()

ADD_SUBDIRECTORY (boost)
ADD_SUBDIRECTORY (clacc)
ADD_SUBDIRECTORY (libompacc)
ADD_SUBDIRECTORY (${OMPACC_EXAMPLES_DIR} ${CMAKE_CURRENT_BINARY_DIR}/examples)

# Create the top level directories with the desired install permissions
INSTALL(DIRECTORY DESTINATION /usr/share/ti                         ${OMPACC_DPERMS})
INSTALL(DIRECTORY DESTINATION /usr/share/doc/ti-openmpacc           ${OMPACC_DPERMS})
INSTALL(DIRECTORY DESTINATION /usr/share/ti/openmpacc               ${OMPACC_DPERMS})
INSTALL(DIRECTORY DESTINATION /usr/share/ti/openmpacc/dsp           ${OMPACC_DPERMS})
INSTALL(DIRECTORY DESTINATION /usr/share/ti/openmpacc/dsp/include   ${OMPACC_DPERMS})
INSTALL(DIRECTORY DESTINATION /usr/share/ti/examples                ${OMPACC_DPERMS})
IF(CROSS_BUILD)
    INSTALL(DIRECTORY DESTINATION /usr/share/ti/openmpacc/bin       ${OMPACC_DPERMS})
    INSTALL(DIRECTORY DESTINATION /usr/share/ti/openmpacc/bin/x86   ${OMPACC_DPERMS})
ENDIF()
# readme.txt and manifest docs
INSTALL (FILES readme.txt               DESTINATION /usr/share/doc/ti-openmpacc ${OMPACC_FPERMS})
INSTALL (FILES OpenMPAcc_Manifest.html  DESTINATION /usr/share/doc/ti-openmpacc ${OMPACC_FPERMS})

# Headers
INSTALL (FILES include/ti_omp_device.h  DESTINATION /usr/include ${OMPACC_FPERMS})
INSTALL (FILES include/omp.h            DESTINATION /usr/share/ti/openmpacc/dsp/include ${OMPACC_FPERMS})

SET (CPACK_GENERATOR "DEB")
SET (CPACK_DEBIAN_PACKAGE_MAINTAINER "TI")
SET (CPACK_DEBIAN_PACKAGE_NAME ${PROJECT_NAME})
SET (CPACK_DEBIAN_PACKAGE_ARCHITECTURE "all")

SET (CPACK_PACKAGE_VERSION_MAJOR ${${PROJECT_NAME}_MAJOR_VERSION})
SET (CPACK_PACKAGE_VERSION_MINOR ${${PROJECT_NAME}_MINOR_VERSION})
SET (CPACK_PACKAGE_VERSION_PATCH ${${PROJECT_NAME}_PATCH_LEVEL})
SET (CPACK_DEBIAN_PACKAGE_DEPENDS "debhelper (>= 8.0.0), ti-opencl (>= 0.8.2-6~ppa6), libelf-dev (>= 0.152-1ubuntu3), libelfg0 (>= 0.8.13-3), cmake (>= 2.8.7-0ubuntu4), libboost-filesystem1.48-dev (>= 1.48.0-3), libboost-system1.48-dev (>= 1.48.0-3), libboost-program-options1.48-dev (>= 1.48.0-3)")

#Set where dpkg will put the install
set (CPACK_INSTALL_PREFIX ${CMAKE_INSTALL_PREFIX})
set (CPACK_SET_DESTDIR TRUE)
include(CPack)
