###
#
# @file
#
#  CMake Information
#  PLASMA is a software package provided by Univ. of Tennessee,
#  Univ. of California Berkeley and Univ. of Colorado Denver
#
# @version 2.5.1
# @author Asim YarKhan
# @date 2010-11-15
#
###

INCLUDE( ${CMAKE_SOURCE_DIR}/GenerateZDCS.cmake OPTIONAL )

set( plasma_compute_ZSRCS
        zgels.c  zgelqf.c zgelqs.c zgeqrf.c zgeqrs.c
        zgesv_incpiv.c  zgetrf_incpiv.c zgetrs_incpiv.c
        zgesv.c  zgetrf.c zgetrs.c zlaswp.c zlaswpc.c
        zposv.c  zpotrf.c zpotrs.c
        ztrsm.c  zgemm.c  zsymm.c zsyrk.c ztrsmpl.c ztrsmrv.c
        zpotri.c ztrtri.c zlauum.c ztrmm.c zsyr2k.c
        zgetri.c
        zlange.c zlansy.c zlaset.c zlacpy.c
        zunmqr.c zunmlq.c zungqr.c zunglq.c
        zhemm.c  zherk.c  zlanhe.c zher2k.c
        zcposv.c zcgesv.c zcungesv.c
        zgecfi2.c zgecfi.c zgetmi.c
        zplrnt.c zplghe.c zplgsy.c
        zhegv.c zhegvd.c  zheev.c zheevd.c zheevr.c zhegst.c zhetrd.c
        zgesvd.c zgesdd.c zgebrd.c
        zgecon.c zpocon.c
        zgeqp3.c
        zgetrf_nopiv.c zgetrf_tntpiv.c
        #
        pzgelqf.c pzgeqrf.c pzpotrf.c pztrtri.c pzlauum.c
        pzgelqfrh.c pzgeqrfrh.c
        pztrsm.c  pzgemm.c  pzsymm.c  pzsyrk.c  pztrsmpl.c pztrsmrv.c
        pzlange.c pzlansy.c pzsyr2k.c
        pzlacpy.c pzgeadd.c  pzgetrf_incpiv.c pztrmm.c
        pzunmqr.c pzunmlq.c pzungqr.c pzunglq.c
        pzunmqrrh.c pzungqrrh.c
        pzunmlqrh.c pzunglqrh.c
        pzlanhe.c pzhemm.c pzherk.c pzher2k.c
        pzlag2c.c pzlaset.c pzlaset2.c
        pzpack.c  pzshift.c pzgetmi2.c
        pzplrnt.c pzplghe.c pzplgsy.c
        pzgetrf_reclap.c pzgetrf_rectil.c pzlaswp.c pzlaswpc.c
        pzbarrier.c
        pzgebrd_ge2gb.c pzgebrd_gb2bd_v1.c
        pzhetrd_he2hb.c pzhetrd_hb2st_v1.c
        pzhegst.c
        pzlarft_blgtrd.c pzunmqr_blgtrd.c
        pzgbcpy_t2bl.c pzhbcpy_t2bl.c
        pzgeqp3.c
        pzgetrf_nopiv.c pzgetrf_tntpiv.c
        zgecfi2.h
)

set( plasma_compute_CSRCS
        cgels.c  cgelqf.c cgelqs.c cgeqrf.c cgeqrs.c
        cgesv_incpiv.c  cgetrf_incpiv.c cgetrs_incpiv.c
        cgesv.c  cgetrf.c cgetrs.c claswp.c claswpc.c
        cposv.c  cpotrf.c cpotrs.c
        ctrsm.c  cgemm.c  csymm.c csyrk.c ctrsmpl.c ctrsmrv.c
        cpotri.c ctrtri.c clauum.c ctrmm.c csyr2k.c
        cgetri.c
        clange.c clansy.c claset.c clacpy.c
        cunmqr.c cunmlq.c cungqr.c cunglq.c
        chemm.c  cherk.c  clanhe.c cher2k.c
        ### ccposv.c ccgesv.c ccungesv.c
        cgecfi2.c cgecfi.c cgetmi.c
        cplrnt.c cplghe.c cplgsy.c
        chegv.c chegvd.c  cheev.c cheevd.c cheevr.c  chegst.c chetrd.c
        cgesvd.c cgesdd.c cgebrd.c
        cgecon.c cpocon.c
        cgeqp3.c
        cgetrf_nopiv.c cgetrf_tntpiv.c
        pcgelqf.c pcgeqrf.c pcpotrf.c pctrtri.c pclauum.c
        pcgelqfrh.c pcgeqrfrh.c
        pctrsm.c  pcgemm.c  pcsymm.c  pcsyrk.c  pctrsmpl.c pctrsmrv.c
        pclange.c pclansy.c pcsyr2k.c
        pclacpy.c pcgeadd.c  pcgetrf_incpiv.c pctrmm.c
        pcunmqr.c pcunmlq.c pcungqr.c pcunglq.c
        pcunmqrrh.c pcungqrrh.c
        pcunmlqrh.c pcunglqrh.c
        pclanhe.c pchemm.c pcherk.c pcher2k.c
        ### pclag2s.c
        pclaset.c pclaset2.c
        pcpack.c  pcshift.c pcgetmi2.c
        pcplrnt.c pcplghe.c pcplgsy.c
        pcgetrf_reclap.c pcgetrf_rectil.c pclaswp.c pclaswpc.c
        pcbarrier.c
        pcgebrd_ge2gb.c pcgebrd_gb2bd_v1.c
        pchetrd_he2hb.c pchetrd_hb2st_v1.c
        pchegst.c
        pclarft_blgtrd.c pcunmqr_blgtrd.c
        pcgbcpy_t2bl.c pchbcpy_t2bl.c
        pcgeqp3.c
        pcgetrf_nopiv.c pcgetrf_tntpiv.c
        cgecfi2.h
)

set( plasma_compute_DSRCS
        dgels.c  dgelqf.c dgelqs.c dgeqrf.c dgeqrs.c
        dgesv_incpiv.c  dgetrf_incpiv.c dgetrs_incpiv.c
        dgesv.c  dgetrf.c dgetrs.c dlaswp.c dlaswpc.c
        dposv.c  dpotrf.c dpotrs.c
        dtrsm.c  dgemm.c  dsymm.c dsyrk.c dtrsmpl.c dtrsmrv.c
        dpotri.c dtrtri.c dlauum.c dtrmm.c dsyr2k.c
        dgetri.c
        dlange.c dlansy.c dlaset.c dlacpy.c
        dormqr.c dormlq.c dorgqr.c dorglq.c
        ### dsymm.c  dsyrk.c  dlansy.c dsyr2k.c
        dsposv.c dsgesv.c dsungesv.c
        dgecfi2.c dgecfi.c dgetmi.c
        dplrnt.c dplgsy.c  ### dplgsy.c
        dsygv.c dsygvd.c  dsyev.c dsyevd.c dsyevr.c dsygst.c dsytrd.c
        dgesvd.c dgesdd.c dgebrd.c
        dgecon.c dpocon.c
        dgeqp3.c
        dgetrf_nopiv.c dgetrf_tntpiv.c
        pdgelqf.c pdgeqrf.c pdpotrf.c pdtrtri.c pdlauum.c
        pdgelqfrh.c pdgeqrfrh.c
        pdtrsm.c  pdgemm.c  pdsymm.c  pdsyrk.c  pdtrsmpl.c pdtrsmrv.c
        pdlange.c pdlansy.c pdsyr2k.c
        pdlacpy.c pdgeadd.c  pdgetrf_incpiv.c pdtrmm.c
        pdormqr.c pdormlq.c pdorgqr.c pdorglq.c
        pdormqrrh.c pdorgqrrh.c
        pdormlqrh.c pdorglqrh.c
        ### pdlansy.c pdsymm.c pdsyrk.c pdsyr2k.c
        pdlag2s.c
        pdlaset.c pdlaset2.c
        pdpack.c  pdshift.c pdgetmi2.c
        pdplrnt.c pdplgsy.c ### pdplgsy.c
        pdgetrf_reclap.c pdgetrf_rectil.c pdlaswp.c pdlaswpc.c
        pdbarrier.c
        pdgebrd_ge2gb.c pdgebrd_gb2bd_v1.c
        pdsytrd_he2hb.c pdsytrd_hb2st_v1.c
        pdsygst.c
        pdlarft_blgtrd.c pdormqr_blgtrd.c
        pdgbcpy_t2bl.c  pdsbcpy_t2bl.c
        pdgeqp3.c
        pdgetrf_nopiv.c pdgetrf_tntpiv.c
        dgecfi2.h
)

set( plasma_compute_SSRCS
        sgels.c  sgelqf.c sgelqs.c sgeqrf.c sgeqrs.c
        sgesv_incpiv.c  sgetrf_incpiv.c sgetrs_incpiv.c
        sgesv.c  sgetrf.c sgetrs.c slaswp.c slaswpc.c
        sposv.c  spotrf.c spotrs.c
        strsm.c  sgemm.c  ssymm.c ssyrk.c strsmpl.c strsmrv.c
        spotri.c strtri.c slauum.c strmm.c ssyr2k.c
        sgetri.c
        slange.c slansy.c slaset.c slacpy.c
        sormqr.c sormlq.c sorgqr.c sorglq.c
        ### ssymm.c  ssyrk.c  slansy.c ssyr2k.c
        ### scposv.c scgesv.c scungesv.c
        sgecfi2.c sgecfi.c sgetmi.c
        splrnt.c splgsy.c  ### splgsy.c
        ssygv.c ssygvd.c  ssyev.c ssyevd.c ssyevr.c ssygst.c ssytrd.c
        sgesvd.c sgesdd.c sgebrd.c
        sgecon.c spocon.c
        sgeqp3.c
        sgetrf_nopiv.c sgetrf_tntpiv.c
        psgelqf.c psgeqrf.c pspotrf.c pstrtri.c pslauum.c
        psgelqfrh.c psgeqrfrh.c
        pstrsm.c  psgemm.c  pssymm.c  pssyrk.c  pstrsmpl.c pstrsmrv.c
        pslange.c pslansy.c pssyr2k.c
        pslacpy.c psgeadd.c  psgetrf_incpiv.c pstrmm.c
        psormqr.c psormlq.c psorgqr.c psorglq.c
        psormqrrh.c psorgqrrh.c
        psormlqrh.c psorglqrh.c
        ### pslansy.c pssymm.c pssyrk.c pssyr2k.c
        ### pslag2c.c
        pslaset.c pslaset2.c
        pspack.c  psshift.c psgetmi2.c
        psplrnt.c psplgsy.c ### psplgsy.c
        psgetrf_reclap.c psgetrf_rectil.c pslaswp.c pslaswpc.c
        psbarrier.c
        psgebrd_ge2gb.c psgebrd_gb2bd_v1.c
        pssytrd_he2hb.c pssytrd_hb2st_v1.c
        pssygst.c
        pslarft_blgtrd.c psormqr_blgtrd.c
        psgbcpy_t2bl.c pssbcpy_t2bl.c
        psgeqp3.c
        psgetrf_nopiv.c psgetrf_tntpiv.c
        sgecfi2.h
)

set( plasma_compute_SRCS ${plasma_compute_ZSRCS} ${plasma_compute_CSRCS} ${plasma_compute_DSRCS} ${plasma_compute_SSRCS} )

##################################################

# Setup files in control directory

set( plasma_control_HEADERS
        allocate.h
        async.h
        auxiliary.h
        common.h
        context.h
        control.h
        descriptor.h
        global.h
        tile.h
        workspace.h primes.h gkkleader.h
        compute_z.h   compute_d.h   compute_c.h   compute_s.h
)

set( plasma_control_ALLSRC
        allocate.c async.c    auxiliary.c
        context.c  control.c  descriptor.c
        tile.c     plasmaos.c workspace.c
        primes.c   gkkleader.c
        plasma_threadsetting.c
        plasma_f77.c plasma_mf77.c
        plasma_zf77.c plasma_df77.c plasma_cf77.c plasma_sf77.c
        workspace_z.c workspace_d.c workspace_c.c workspace_s.c
        pztile.c      pdtile.c      pctile.c      pstile.c
        ztile.c       dtile.c       ctile.c       stile.c
)

foreach( base ${plasma_control_HEADERS} )
  set( plasma_control_SRCS ${plasma_control_SRCS} ${CMAKE_SOURCE_DIR}/control/${base} )
endforeach()
foreach( base ${plasma_control_ALLSRC} )
  set( plasma_control_SRCS ${plasma_control_SRCS} ${CMAKE_SOURCE_DIR}/control/${base} )
endforeach()
if(WIN32)
  set( plasma_control_SRCS ${plasma_control_SRCS} ${CMAKE_SOURCE_DIR}/control/plasmawinthread.c ${CMAKE_SOURCE_DIR}/control/plasmawinthread.h )
endif( WIN32 )

set( plasma_SRCS ${plasma_control_SRCS} ${plasma_compute_SRCS} )

add_library( plasma ${plasma_SRCS} )

add_dependencies( plasma include control_include )

INSTALL( TARGETS plasma DESTINATION ARCHIVE DESTINATION lib LIBRARY DESTINATION lib RUNTIME DESTINATION bin )

# INSTALL( FILES ${plasma_compute_SRCS} CMakeLists.txt DESTINATION compute )
# INSTALL( FILES ${plasma_control_SRCS} DESTINATION control )
