###
#
# @file          : CMakeLists.txt
#
# @description   : Project MORSE
#
# @version       :
# @created by    : Cedric Castagnede
# @creation date : 24-01-2012
# @last modified : mar. 22 mai 2012 10:30:47 CEST
#
###

CMAKE_MINIMUM_REQUIRED(VERSION 2.8)
INCLUDE(RulesPrecisions)

# Check for the subdirectories
# ----------------------------
ADD_SUBDIRECTORY(include)

# Generate the morse common for all possible precisions
# -----------------------------------------------------
SET(MORSE_COMMON_GENERATED "")
SET(ZSRC
    control/zprofiling.c
    control/zlocality.c
    )

precisions_rules_py(MORSE_COMMON_GENERATED "${ZSRC}"
                    PRECISIONS "${MAGMA_MORSE_PRECISION}"
                    DICTIONARY "MORSE")

SET(MORSE_COMMON
    control/control.c
    control/context.c
    control/descriptor.c
    control/async.c
    control/options.c
    control/profiling.c
    ../../control/global.c
    ${MORSE_COMMON_GENERATED}
    )

# Generate the morse sources for all possible precisions
# ------------------------------------------------------
SET(MORSE_SRCS_GENERATED "")
SET(ZSRC
    codelets/codelet_ztile_zero.c
    ##################
    # BLAS 3
    ##################
    codelets/codelet_zgemm.c
    codelets/codelet_zhemm.c
    codelets/codelet_zher2k.c
    codelets/codelet_zherk.c
    codelets/codelet_zsymm.c
    codelets/codelet_zsyr2k.c
    codelets/codelet_zsyrk.c
    codelets/codelet_ztrmm.c
    codelets/codelet_ztrsm.c
    ##################
    # LAPACK
    ##################
    codelets/codelet_zgeadd.c
    codelets/codelet_zgelqt.c
    codelets/codelet_zgeqrt.c
    codelets/codelet_zgessm.c
    codelets/codelet_zgetrf.c
    codelets/codelet_zgetrf_incpiv.c
    codelets/codelet_zlacpy.c
#    codelets/codelet_zlange.c
#    codelets/codelet_zlanhe.c
#    codelets/codelet_zlansy.c
    codelets/codelet_zlaset2.c
    codelets/codelet_zlaset.c
    codelets/codelet_zlauum.c
    codelets/codelet_zplghe.c
    codelets/codelet_zplgsy.c
    codelets/codelet_zplrnt.c
    codelets/codelet_zpotrf.c
    codelets/codelet_zssssm.c
    codelets/codelet_ztrtri.c
    codelets/codelet_ztslqt.c
    codelets/codelet_ztsmlq.c
    codelets/codelet_ztsmqr.c
    codelets/codelet_ztsqrt.c
    codelets/codelet_ztstrf.c
    codelets/codelet_zttlqt.c
    codelets/codelet_zttmlq.c
    codelets/codelet_zttmqr.c
    codelets/codelet_zttqrt.c
    codelets/codelet_zunmlq.c
    codelets/codelet_zunmqr.c
    ##################
    # MIXED PRECISION
    ##################
    codelets/codelet_zlag2c.c

    ##################
    # OTHERS
    ##################
#    codelets/codelet_zbrdalg.c
#    codelets/codelet_zgbelr.c
#    codelets/codelet_zgblrx.c
#    codelets/codelet_zgbrce.c
#    codelets/codelet_zgessq.c
#    codelets/codelet_zgetrf_reclap.c
#    codelets/codelet_zgetrf_rectil.c
#    codelets/codelet_zgetrip.c
#    codelets/codelet_zhbelr.c
#    codelets/codelet_zhblrx.c
#    codelets/codelet_zhbrce.c
#    codelets/codelet_zhbtype1cb.c
#    codelets/codelet_zhbtype2cb.c
#    codelets/codelet_zhbtype3cb.c
#    codelets/codelet_zhegst.c
#    codelets/codelet_zherfb.c
#    codelets/codelet_zhessq.c
#    codelets/codelet_zlarfb_gemm.c
#    codelets/codelet_zlarfx_tbrd.c
#    codelets/codelet_zlarfy.c
#    codelets/codelet_zlaswp.c
#    codelets/codelet_zlatro.c
#    codelets/codelet_zpamm.c
#    codelets/codelet_zparfb.c
#    codelets/codelet_zplssq.c
#    codelets/codelet_zshift.c
#    codelets/codelet_zswpab.c
#    codelets/codelet_zsyssq.c
#    codelets/codelet_ztrdalg.c
#    codelets/codelet_ztsmlq_corner.c
#    codelets/codelet_ztsmlq_hetra1.c
#    codelets/codelet_ztsmqr_corner.c
#    codelets/codelet_ztsmqr_hetra1.c
#    codelets/codelet_ztsrfb.c
    )

precisions_rules_py(MORSE_SRCS_GENERATED "${ZSRC}"
                    PRECISIONS "${MAGMA_MORSE_PRECISION}"
                    DICTIONARY "MORSE")

SET(MORSE_SRCS ${MORSE_COMMON}
               ${MORSE_SRCS_GENERATED}
               )
ADD_CUSTOM_TARGET(morse_quark_source ALL SOURCES ${MORSE_SRCS})


# Include directories
# -------------------
INCLUDE_DIRECTORIES(${CMAKE_CURRENT_SOURCE_DIR}/include)
INCLUDE_DIRECTORIES(${CMAKE_CURRENT_BINARY_DIR}/include)

# Add library
# -----------
ADD_LIBRARY(morse_quark ${MORSE_SRCS})
SET_PROPERTY(TARGET morse_quark PROPERTY LINKER_LANGUAGE Fortran)

ADD_DEPENDENCIES(morse_quark morse_quark_source)
ADD_DEPENDENCIES(morse_quark coreblas_include)
ADD_DEPENDENCIES(morse_quark quarkblas_include)
ADD_DEPENDENCIES(morse_quark control_include)
ADD_DEPENDENCIES(morse_quark compute_include)
ADD_DEPENDENCIES(morse_quark morse_include)

FOREACH(_external_package "blas" "cblas" "lapack" "lapacke" "quark" "starpu")
    STRING(TOUPPER "${_external_package}" _NAMEVAR)
    IF(${_NAMEVAR}_EP)
        ADD_DEPENDENCIES(morse_quark ${_external_package}_build)
    ENDIF()
ENDFOREACH()

# installation
# ------------
INSTALL(TARGETS morse_quark
        DESTINATION lib)

###
### END CMakeLists.txt
###
