# # Include CUDA related files. # # INCLUDE(${FINDCUDA_DIR}/FindCuda.cmake) INCLUDE_DIRECTORIES(${CUDA_INCLUDE}) LINK_DIRECTORIES(${CUDA_TARGET_LINK}) FOREACH(subdir ${OPENMM_SOURCE_SUBDIRS}) FILE(GLOB src_files ${CMAKE_SOURCE_DIR}/platforms/cuda/${subdir}/src/*.cu ${CMAKE_SOURCE_DIR}/platforms/cuda/${subdir}/src/*/*.cu) SET(SOURCE_FILES ${SOURCE_FILES} ${src_files}) CUDA_INCLUDE_DIRECTORIES(BEFORE ${CMAKE_SOURCE_DIR}/platforms/cuda/${subdir}/include) CUDA_INCLUDE_DIRECTORIES(BEFORE ${CMAKE_SOURCE_DIR}/platforms/cuda/${subdir}/src) ENDFOREACH(subdir) CUDA_INCLUDE_DIRECTORIES(BEFORE ${CMAKE_SOURCE_DIR}/jama/include) IF (UNIX AND CMAKE_BUILD_TYPE MATCHES Debug) SET(MAIN_OPENMM_LIB ${OPENMM_LIBRARY_NAME}_d) ELSE (UNIX AND CMAKE_BUILD_TYPE MATCHES Debug) SET(MAIN_OPENMM_LIB ${OPENMM_LIBRARY_NAME}) ENDIF (UNIX AND CMAKE_BUILD_TYPE MATCHES Debug) IF(APPLE AND CMAKE_OSX_ARCHITECTURES AND CMAKE_OSX_ARCHITECTURES MATCHES .*i386.* AND CMAKE_OSX_ARCHITECTURES MATCHES .*x86_64.*) # NVCC doesn't know how to build universal binaries, so we need to build two separate versions. SET(BASE_FLAGS ${CUDA_NVCC_FLAGS}) SET(CMAKE_OSX_ARCHITECTURES i386) SET(CUDA_NVCC_FLAGS ${BASE_FLAGS} -m32) CUDA_ADD_LIBRARY("${SHARED_TARGET}32" SHARED ${SOURCE_FILES} ${SOURCE_INCLUDE_FILES} ${API_ABS_INCLUDE_FILES}) TARGET_LINK_LIBRARIES(${SHARED_TARGET}32 ${MAIN_OPENMM_LIB} ${CUFFT_TARGET_LINK}) SET_TARGET_PROPERTIES(${SHARED_TARGET}32 PROPERTIES COMPILE_FLAGS "-DOPENMMCUDA_BUILDING_SHARED_LIBRARY") SET(CMAKE_OSX_ARCHITECTURES x86_64) SET(CUDA_NVCC_FLAGS ${BASE_FLAGS} -m64) CUDA_ADD_LIBRARY(${SHARED_TARGET} SHARED ${SOURCE_FILES} ${SOURCE_INCLUDE_FILES} ${API_ABS_INCLUDE_FILES}) TARGET_LINK_LIBRARIES(${SHARED_TARGET} ${MAIN_OPENMM_LIB} ${CUFFT_TARGET_LINK}) SET_TARGET_PROPERTIES(${SHARED_TARGET} PROPERTIES COMPILE_FLAGS "-DOPENMMCUDA_BUILDING_SHARED_LIBRARY") ADD_DEPENDENCIES(${SHARED_TARGET} "{SHARED_TARGET}32") # Join them into a single universal binary. ADD_CUSTOM_COMMAND( TARGET ${SHARED_TARGET} POST_BUILD COMMAND /usr/bin/lipo lib${SHARED_TARGET}.dylib lib${SHARED_TARGET}32.dylib -create -output lib${SHARED_TARGET}.dylib WORKING_DIRECTORY ${CMAKE_BINARY_DIR} COMMENT "Creating universal binary") ELSE(APPLE AND CMAKE_OSX_ARCHITECTURES AND CMAKE_OSX_ARCHITECTURES MATCHES .*i386.* AND CMAKE_OSX_ARCHITECTURES MATCHES .*x86_64.*) CUDA_ADD_LIBRARY(${SHARED_TARGET} SHARED ${SOURCE_FILES} ${SOURCE_INCLUDE_FILES} ${API_ABS_INCLUDE_FILES}) TARGET_LINK_LIBRARIES(${SHARED_TARGET} ${MAIN_OPENMM_LIB} ${CUFFT_TARGET_LINK}) SET_TARGET_PROPERTIES(${SHARED_TARGET} PROPERTIES COMPILE_FLAGS "-DOPENMMCUDA_BUILDING_SHARED_LIBRARY") ENDIF(APPLE AND CMAKE_OSX_ARCHITECTURES AND CMAKE_OSX_ARCHITECTURES MATCHES .*i386.* AND CMAKE_OSX_ARCHITECTURES MATCHES .*x86_64.*) INSTALL_TARGETS(/lib/plugins RUNTIME_DIRECTORY /lib/plugins ${SHARED_TARGET})