cmake_minimum_required(VERSION 2.8)

ADD_EXECUTABLE(oclTool tools/oclTool.cpp)
GET_TARGET_PROPERTY(oclTool_exe oclTool LOCATION)

include(FindOpenMP)
if(OPENMP_FOUND)
    set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${OpenMP_C_FLAGS}")
    set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${OpenMP_CXX_FLAGS}")
    set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} ${OpenMP_EXE_LINKER_FLAGS}")
endif()

SET (CMAKE_CXX_FLAGS_DEBUG "-D _DEBUG")

ADD_CUSTOM_COMMAND(
   OUTPUT ${PROJECT_BINARY_DIR}/oclDefines.h
   COMMAND ${oclTool_exe} oclDefines ${PROJECT_SOURCE_DIR}/src/opencl/opencl/oclDefines.cl ${PROJECT_BINARY_DIR}/oclDefines.h
   DEPENDS oclTool
   MAIN_DEPENDENCY ${PROJECT_SOURCE_DIR}/src/opencl/opencl/oclDefines.cl
)

ADD_CUSTOM_COMMAND(
   OUTPUT ${PROJECT_BINARY_DIR}/oclSwScore.h
   COMMAND ${oclTool_exe} oclSwScore ${PROJECT_SOURCE_DIR}/src/opencl/opencl/oclSwScore.cl ${PROJECT_BINARY_DIR}/oclSwScore.h
   DEPENDS oclTool
   MAIN_DEPENDENCY ${PROJECT_SOURCE_DIR}/src/opencl/opencl/oclSwScore.cl
)

ADD_CUSTOM_COMMAND(
   OUTPUT ${PROJECT_BINARY_DIR}/oclEndFreeScore.h
   COMMAND ${oclTool_exe} oclEndFreeScore ${PROJECT_SOURCE_DIR}/src/opencl/opencl/oclEndFreeScore.cl ${PROJECT_BINARY_DIR}/oclEndFreeScore.h
   DEPENDS oclTool
   MAIN_DEPENDENCY ${PROJECT_SOURCE_DIR}/src/opencl/opencl/oclEndFreeScore.cl
)

ADD_CUSTOM_COMMAND(
   OUTPUT ${PROJECT_BINARY_DIR}/oclSwAlignment.h
   COMMAND ${oclTool_exe} oclSwAlignment ${PROJECT_SOURCE_DIR}/src/opencl/opencl/oclSwAlignment.cl ${PROJECT_BINARY_DIR}/oclSwAlignment.h
   DEPENDS oclTool
   MAIN_DEPENDENCY ${PROJECT_SOURCE_DIR}/src/opencl/opencl/oclSwAlignment.cl
)

ADD_CUSTOM_COMMAND(
   OUTPUT ${PROJECT_BINARY_DIR}/oclSwCigar.h
   COMMAND ${oclTool_exe} oclSwCigar ${PROJECT_SOURCE_DIR}/src/opencl/opencl/oclSwCigar.cl ${PROJECT_BINARY_DIR}/oclSwCigar.h
   DEPENDS oclTool
   MAIN_DEPENDENCY ${PROJECT_SOURCE_DIR}/src/opencl/opencl/oclSwCigar.cl
)

include_directories (.)
include_directories (${PROJECT_BINARY_DIR})
include_directories ("${PROJECT_SOURCE_DIR}/include")
include_directories( ${OPENCL_INCLUDE_DIRS} )
add_definitions(-fopenmp)


add_library(MASonOpenClCpu SHARED ${PROJECT_BINARY_DIR}/oclDefines.h 
							${PROJECT_BINARY_DIR}/oclSwScore.h
							${PROJECT_BINARY_DIR}/oclEndFreeScore.h
							${PROJECT_BINARY_DIR}/oclSwAlignment.h							
							${PROJECT_BINARY_DIR}/oclSwCigar.h
							OclHost.cpp SWOcl_export.cpp SWOcl.cpp SWOclAlignment.cpp SWOclCigar.cpp Timer.cpp)							

add_library(MASonOpenClGpu SHARED ${PROJECT_BINARY_DIR}/oclDefines.h 
							${PROJECT_BINARY_DIR}/oclSwScore.h
							${PROJECT_BINARY_DIR}/oclEndFreeScore.h
							${PROJECT_BINARY_DIR}/oclSwAlignment.h
							${PROJECT_BINARY_DIR}/oclSwScore.h
							${PROJECT_BINARY_DIR}/oclSwCigar.h
							OclHost.cpp SWOcl_export.cpp SWOcl.cpp SWOclAlignment.cpp SWOclCigar.cpp Timer.cpp)

SET_TARGET_PROPERTIES(MASonOpenClCpu PROPERTIES
                      DEFINE_SYMBOL CPU)

target_link_libraries(MASonOpenClCpu ${OPENCL_LIBRARIES})
target_link_libraries(MASonOpenClGpu ${OPENCL_LIBRARIES})


ADD_CUSTOM_TARGET(opencl  
  DEPENDS
    MASonOpenClCpu MASonOpenClGpu
)



#GET_TARGET_PROPERTY(LIB_PATH MASonOpenClCpu LOCATION)
#ADD_CUSTOM_COMMAND(
  #TARGET MASonOpenClCpu
  #POST_BUILD
  #COMMAND ${CMAKE_COMMAND} -E copy ${LIB_PATH} ${PROJECT_SOURCE_DIR}/bin/
#)

#GET_TARGET_PROPERTY(LIB_PATH_GPU MASonOpenClGpu LOCATION)
#ADD_CUSTOM_COMMAND(
  #TARGET MASonOpenClGpu
  #POST_BUILD
  #COMMAND ${CMAKE_COMMAND} -E copy ${LIB_PATH_GPU} ${PROJECT_SOURCE_DIR}/bin/
#)


install (TARGETS MASonOpenClCpu DESTINATION lib)
install (TARGETS MASonOpenClGpu DESTINATION lib)