CMakeLists.txt 4.81 KB
Newer Older
1
2
3
4
5
6
7
8
9
10
11
12
13
14
# Generate and install examples.
#
# This is boilerplate code for generating a set of executables, one per
# .cpp file in an "examples" subdirectory. 
#
# For IDEs that can deal with PROJECT_LABEL properties (at least
# Visual Studio) the projects for building each of these adhoc
# executables will be labeled "Example - TheExampleName" if a file
# TheExampleName.cpp is found in this directory.
#
# We check the BUILD_TESTING_{SHARED,STATIC} variables to determine
# whether to build dynamically linked, statically linked, or both
# versions of the executable.

Michael Sherman's avatar
Michael Sherman committed
15

16
17
18
SET(OpenMM_CWRAPPER "OpenMMCWrapper")
SET(OpenMM_FWRAPPER "OpenMMFortranWrapper")
SET(OpenMM_FMODULE  "OpenMMFortranModule")
Michael Sherman's avatar
Michael Sherman committed
19

20
21
22
23
24
25
26
27
28
29
30
31
# CWrapper is always a static library but you need a different
# one if you want to link with the OpenMM static library.
SET(CWRAPPER_FOR_SHARED ${OpenMM_CWRAPPER})
SET(CWRAPPER_FOR_STATIC ${OpenMM_CWRAPPER}_static)

# Visual Studio will add "_d" to target names automatically
# but on Unix or Cygwin we have to add the suffix manually
IF (UNIX AND CMAKE_BUILD_TYPE MATCHES Debug)
    SET(CWRAPPER_FOR_SHARED ${CWRAPPER_FOR_SHARED}_d)
    SET(CWRAPPER_FOR_STATIC ${CWRAPPER_FOR_STATIC}_d)
ENDIF (UNIX AND CMAKE_BUILD_TYPE MATCHES Debug)

32
33
34
SET(CPP_EXAMPLES HelloArgon HelloSodiumChloride HelloEthane HelloWaterBox)
SET(C_EXAMPLES HelloArgonInC HelloSodiumChlorideInC)
SET(F_EXAMPLES HelloArgonInFortran HelloSodiumChlorideInFortran)
Michael Sherman's avatar
Michael Sherman committed
35

36
37
38
SET(BUILD_TESTING_SHARED 1)
SET(BUILD_TESTING_STATIC 1)

39
40
ADD_LIBRARY(${CWRAPPER_FOR_SHARED} 
		    ${OpenMM_CWRAPPER}.cpp ${OpenMM_FWRAPPER}.cpp ${OpenMM_CWRAPPER}.h)
41
42
43
44
45
SET_TARGET_PROPERTIES(${CWRAPPER_FOR_SHARED}
		PROPERTIES
		  PROJECT_LABEL "C Bindings")
TARGET_LINK_LIBRARIES(${CWRAPPER_FOR_SHARED} ${SHARED_TARGET})
		
46
47
ADD_LIBRARY(${CWRAPPER_FOR_STATIC}
		    ${OpenMM_CWRAPPER}.cpp ${OpenMM_FWRAPPER}.cpp ${OpenMM_CWRAPPER}.h)
48
49
50
51
52
53
54
55
56
SET_TARGET_PROPERTIES(${CWRAPPER_FOR_STATIC}
		PROPERTIES
		  COMPILE_FLAGS "-DOPENMM_USE_STATIC_LIBRARIES"
		  PROJECT_LABEL "C Bindings for static OpenMM")
		  
INSTALL_TARGETS(/lib RUNTIME_DIRECTORY /lib ${CWRAPPER_FOR_SHARED})
INSTALL_TARGETS(/lib RUNTIME_DIRECTORY /lib ${CWRAPPER_FOR_STATIC})


57
FOREACH(EX_ROOT ${CPP_EXAMPLES})
58
59
    IF (BUILD_TESTING_SHARED)
        # Link with shared library
60
        ADD_EXECUTABLE(${EX_ROOT} ${EX_ROOT}.cpp)
61
62
63
64
65
66
67
68
69
        SET_TARGET_PROPERTIES(${EX_ROOT}
		PROPERTIES
	      PROJECT_LABEL "Example - ${EX_ROOT}")
        TARGET_LINK_LIBRARIES(${EX_ROOT} ${SHARED_TARGET})
    ENDIF (BUILD_TESTING_SHARED)

    IF (BUILD_TESTING_STATIC)
        # Link with static library
        SET(EX_STATIC ${EX_ROOT}Static)
70
        ADD_EXECUTABLE(${EX_STATIC} ${EX_ROOT}.cpp)
71
72
73
74
75
76
77
        SET_TARGET_PROPERTIES(${EX_STATIC}
		PROPERTIES
		COMPILE_FLAGS "-DOPENMM_USE_STATIC_LIBRARIES"
		PROJECT_LABEL "Example - ${EX_STATIC}")
        TARGET_LINK_LIBRARIES(${EX_STATIC} ${STATIC_TARGET})
    ENDIF (BUILD_TESTING_STATIC)

78
    INSTALL(FILES ${EX_ROOT}.cpp DESTINATION examples)
79

80
ENDFOREACH(EX_ROOT ${CPP_EXAMPLES})
Michael Sherman's avatar
Michael Sherman committed
81

82
FOREACH(EX_ROOT ${C_EXAMPLES})
Michael Sherman's avatar
Michael Sherman committed
83
84
    IF (BUILD_TESTING_SHARED)
        # Link with shared library
85
86
87
		# We need at least one .cpp here to get CMake to include
		# C++ libraries on the link line.
        ADD_EXECUTABLE(${EX_ROOT} ${EX_ROOT}.c Empty.cpp)
Michael Sherman's avatar
Michael Sherman committed
88
89
90
        SET_TARGET_PROPERTIES(${EX_ROOT}
		PROPERTIES
	      PROJECT_LABEL "Example C - ${EX_ROOT}")
91
        TARGET_LINK_LIBRARIES(${EX_ROOT} ${CWRAPPER_FOR_SHARED} ${SHARED_TARGET})
Michael Sherman's avatar
Michael Sherman committed
92
93
    ENDIF (BUILD_TESTING_SHARED)

94
95
96
    IF (BUILD_TESTING_STATIC)
        # Link with static library
        SET(EX_STATIC ${EX_ROOT}Static)
97
98
99
		# We need at least one .cpp here to get CMake to include
		# C++ libraries on the static link line.
        ADD_EXECUTABLE(${EX_STATIC} ${EX_ROOT}.c Empty.cpp)
100
101
102
103
        SET_TARGET_PROPERTIES(${EX_STATIC}
		PROPERTIES
		COMPILE_FLAGS "-DOPENMM_USE_STATIC_LIBRARIES"
		PROJECT_LABEL "Example C - ${EX_STATIC}")
104
        TARGET_LINK_LIBRARIES(${EX_STATIC} ${CWRAPPER_FOR_STATIC} ${STATIC_TARGET})
105
106
107
108
    ENDIF (BUILD_TESTING_STATIC)

    INSTALL(FILES ${EX_ROOT}.c DESTINATION examples)

109
ENDFOREACH(EX_ROOT ${C_EXAMPLES})
Michael Sherman's avatar
Michael Sherman committed
110

111
112
FOREACH(EX_ROOT ${F_EXAMPLES})
    INSTALL(FILES ${EX_ROOT}.f90 DESTINATION examples)
113
ENDFOREACH(EX_ROOT ${F_EXAMPLES})
Michael Sherman's avatar
Michael Sherman committed
114

115
116
INSTALL(FILES ${OpenMM_CWRAPPER}.h ${OpenMM_CWRAPPER}.cpp ${OpenMM_FWRAPPER}.cpp
		DESTINATION examples)
117
INSTALL(FILES ${OpenMM_FMODULE}.f90 DESTINATION examples)
Michael Sherman's avatar
Michael Sherman committed
118

119
INSTALL(FILES README.txt DESTINATION examples)
120
INSTALL(FILES Makefile NMakefile DESTINATION examples)
121
122
123
124
125
126
127

INSTALL(FILES HelloArgonVS8/HelloArgon.vcproj 
		      HelloArgonVS8/HelloArgon.sln 
	    DESTINATION examples/VisualStudio2005)
INSTALL(FILES HelloArgonInCVS8/HelloArgonInC.vcproj 
		      HelloArgonInCVS8/HelloArgonInC.sln 
	    DESTINATION examples/VisualStudio2005)
128
129
INSTALL(FILES HelloOpenMM.ppt 
        DESTINATION examples)