319c9b487c51a094f7a52af52b3b711881f038df
[alexxy/gromacs.git] / src / kernel / CMakeLists.txt
1
2 set(GMXPREPROCESS_SOURCES 
3     add_par.c       
4     calc_verletbuf.c
5     compute_io.c    
6     convparm.c      
7     gen_ad.c        
8     gen_vsite.c     
9     genhydro.c   
10     gpp_atomtype.c  
11     gpp_bond_atomtype.c     
12     h_db.c          
13     hackblock.c             
14     hizzie.c        
15     nm2type.c
16     pdb2top.c       
17     pgutil.c        
18     readir.c        
19     readpull.c      
20     readadress.c      
21     readrot.c
22     resall.c        
23     sorting.c       
24     specbond.c      
25     ter_db.c        
26     tomorse.c       
27     topdirs.c       
28     topexcl.c       
29     topio.c         
30     toppush.c       
31     topshake.c      
32     toputil.c       
33     tpbcmp.c        
34     vsite_parm.c    
35     fflibutil.c
36     xlate.c)
37
38 set(MDRUN_SOURCES 
39     gctio.c    ionize.c runner.c
40     do_gct.c     repl_ex.c  xutils.c pme_loadbal.c
41     md.c         mdrun.c    genalg.c membed.c
42     md_openmm.c)
43
44 add_library(gmxpreprocess ${GMXPREPROCESS_SOURCES})
45 target_link_libraries(gmxpreprocess md)
46 set_target_properties(gmxpreprocess PROPERTIES OUTPUT_NAME "gmxpreprocess${GMX_LIBS_SUFFIX}" SOVERSION ${SOVERSION} INSTALL_NAME_DIR "${LIB_INSTALL_DIR}"
47     COMPILE_FLAGS "${OpenMP_C_FLAGS}")
48
49
50 if(GMX_GPU OR GMX_OPENMM) 
51     include_directories(${CMAKE_SOURCE_DIR}/src/gmxlib/gpu_utils)
52 endif()
53
54 if(GMX_OPENMM) 
55     include_directories(${OpenMM_INCLUDE_DIR})
56     link_directories(${OpenMM_LIBRARY_DIR}) 
57     # with this define no evn.var. is needed with OPENMM_PLUGIN_DIR
58     # if the same OpenMM installation is used for running and building 
59     add_definitions( -DOPENMM_PLUGIN_DIR="${OpenMM_PLUGIN_DIR}" ) 
60     file(TO_CMAKE_PATH ${OpenMM_PLUGIN_DIR} _path)
61     add_library(openmm_api_wrapper STATIC openmm_wrapper.cpp)
62     target_link_libraries(openmm_api_wrapper ${OpenMM_LIBRARIES})
63     set(GMX_OPENMM_LIBRARIES openmm_api_wrapper ${OpenMM_LIBRARIES})   
64 endif(GMX_OPENMM)
65
66 if(GMX_GPU OR GMX_OPENMM OR GMX_FORCE_CXX)
67     set_source_files_properties(main.c PROPERTIES LANGUAGE CXX)
68     if ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "Clang")
69         set_source_files_properties(main.c PROPERTIES COMPILE_FLAGS "-x c++")
70     endif()
71 endif()
72
73 if(GMX_FAHCORE)
74   add_library(fahcore ${MDRUN_SOURCES})
75 else(GMX_FAHCORE)
76
77 list(APPEND GMX_EXTRA_LIBRARIES gmxpreprocess md ${OpenMP_LINKER_FLAGS})
78
79 set(GMX_KERNEL_PROGRAMS
80     grompp tpbconv pdb2gmx g_protonate g_luck gmxdump g_x2top gmxcheck)
81
82 foreach(PROGRAM ${GMX_KERNEL_PROGRAMS})
83     add_executable(${PROGRAM} ${PROGRAM}.c main.c)
84     if (NOT ${PROGRAM} STREQUAL "g_luck")
85         gmx_add_man_page(${PROGRAM})
86     endif()
87     target_link_libraries(${PROGRAM} ${GMX_EXTRA_LIBRARIES})
88     set_target_properties(${PROGRAM} PROPERTIES OUTPUT_NAME "${PROGRAM}${GMX_BINARY_SUFFIX}")
89 endforeach()
90
91 add_executable(mdrun ${MDRUN_SOURCES} main.c)
92 gmx_add_man_page(mdrun)
93 target_link_libraries(mdrun ${GMX_EXTRA_LIBRARIES} ${GMX_OPENMM_LIBRARIES})
94 set_target_properties(mdrun PROPERTIES OUTPUT_NAME "mdrun${GMX_BINARY_SUFFIX}" COMPILE_FLAGS "${OpenMP_C_FLAGS}")
95
96 # this is to circumvent the following MSVC error: 
97 # warning LNK4098: defaultlib 'LIBCMT' conflicts with use of other libs
98 # fatal error LNK1169: one or more multiply defined symbols found
99 if(GMX_OPENMM AND MSVC)
100     set_target_properties(mdrun PROPERTIES LINK_FLAGS "/NODEFAULTLIB:LIBCMT")
101 endif()
102
103 # Construct component groups for installation; note that a component may
104 # belong to only one group
105 foreach(PROGRAM ${GMX_KERNEL_PROGRAMS})
106     set(CPACK_COMPONENT_${PROGRAM}_GROUP tools)
107 endforeach()
108 set(CPACK_COMPONENT_MDRUN_GROUP mdrun)
109
110 foreach(PROGRAM ${GMX_KERNEL_PROGRAMS} mdrun)
111     # Manage CPack component dependencies
112     set(CPACK_COMPONENT_${PROGRAM}_DEPENDS libraries libraries-gmxpreprocess)
113
114     # Create custom install-xxxx target
115     if (BUILD_SHARED_LIBS)
116     # If shared libraries are used, we need to install the libraries in
117     # addition to the mdrun binary.
118        add_custom_target(install-${PROGRAM}
119            COMMAND ${CMAKE_COMMAND} -DCOMPONENT=libraries
120                    -P ${CMAKE_BINARY_DIR}/cmake_install.cmake
121            COMMAND ${CMAKE_COMMAND} -DCOMPONENT=libraries-gmxpreprocess
122                    -P ${CMAKE_BINARY_DIR}/cmake_install.cmake
123            COMMAND ${CMAKE_COMMAND} -DCOMPONENT=${PROGRAM}
124                    -P ${CMAKE_BINARY_DIR}/cmake_install.cmake
125            COMMENT "Installing ${PROGRAM}")
126     else()
127        add_custom_target(install-${PROGRAM}
128            COMMAND ${CMAKE_COMMAND} -DCOMPONENT=${PROGRAM}
129                    -P ${CMAKE_BINARY_DIR}/cmake_install.cmake
130            COMMENT "Installing ${PROGRAM}")
131     endif()
132     add_dependencies(install-${PROGRAM} ${PROGRAM})
133
134     # Finally, trigger installation
135     install(
136       TARGETS ${PROGRAM}
137       COMPONENT ${PROGRAM}
138       DESTINATION ${BIN_INSTALL_DIR}
139       )
140 endforeach()
141
142 install(TARGETS gmxpreprocess DESTINATION ${LIB_INSTALL_DIR} COMPONENT libraries-gmxpreprocess)
143
144 if (INSTALL_CUDART_LIB) #can be set manual by user
145     if (GMX_OPENMM OR GMX_GPU)
146         foreach(CUDA_LIB ${CUDA_LIBRARIES})
147             string(REGEX MATCH "cudart" IS_CUDART ${CUDA_LIB})
148             if(IS_CUDART) #libcuda should not be installed
149                 #install also name-links (linker uses those)
150                 file(GLOB CUDA_LIBS ${CUDA_LIB}*)
151                 install(FILES ${CUDA_LIBS} DESTINATION
152                     ${LIB_INSTALL_DIR} COMPONENT libraries)
153             endif()
154         endforeach()
155     else()
156         message(WARNING "INSTALL_CUDART_LIB only makes sense with GMX_OPENMM or GMX_GPU")
157     endif()
158 endif ()
159 endif(GMX_FAHCORE)
160
161 configure_file(${CMAKE_CURRENT_SOURCE_DIR}/libgmxpreprocess.pc.cmakein ${CMAKE_CURRENT_BINARY_DIR}/libgmxpreprocess.pc @ONLY)
162 install(FILES ${CMAKE_CURRENT_BINARY_DIR}/libgmxpreprocess.pc
163         DESTINATION ${LIB_INSTALL_DIR}/pkgconfig
164         RENAME "libgmxpreprocess${GMX_LIBS_SUFFIX}.pc"
165         COMPONENT development)