-
Notifications
You must be signed in to change notification settings - Fork 2
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Browse files
Browse the repository at this point in the history
- Loading branch information
Raimondas Galvelis
committed
Apr 2, 2020
0 parents
commit f63e477
Showing
51 changed files
with
15,681 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,32 @@ | ||
# Prerequisites | ||
*.d | ||
|
||
# Compiled Object files | ||
*.slo | ||
*.lo | ||
*.o | ||
*.obj | ||
|
||
# Precompiled Headers | ||
*.gch | ||
*.pch | ||
|
||
# Compiled Dynamic libraries | ||
*.so | ||
*.dylib | ||
*.dll | ||
|
||
# Fortran module files | ||
*.mod | ||
*.smod | ||
|
||
# Compiled Static libraries | ||
*.lai | ||
*.la | ||
*.a | ||
*.lib | ||
|
||
# Executables | ||
*.exe | ||
*.out | ||
*.app |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,156 @@ | ||
#--------------------------------------------------- | ||
# OpenMM NeuralNetwork Plugin | ||
#---------------------------------------------------- | ||
|
||
CMAKE_MINIMUM_REQUIRED(VERSION 3.5) | ||
|
||
# We need to know where OpenMM is installed so we can access the headers and libraries. | ||
SET(OPENMM_DIR "/usr/local/openmm" CACHE PATH "Where OpenMM is installed") | ||
INCLUDE_DIRECTORIES("${OPENMM_DIR}/include") | ||
LINK_DIRECTORIES("${OPENMM_DIR}/lib" "${OPENMM_DIR}/lib/plugins") | ||
|
||
# We need to know where TensorFlow is installed so we can access the headers and libraries. | ||
SET(TENSORFLOW_DIR "/usr/local" CACHE PATH "Where TensorFlow is installed") | ||
INCLUDE_DIRECTORIES("${TENSORFLOW_DIR}/include/tensorflow/c") | ||
LINK_DIRECTORIES("${TENSORFLOW_DIR}/lib") | ||
|
||
# Specify the C++ version we are building for. | ||
SET (CMAKE_CXX_STANDARD 11) | ||
|
||
# Set flags for linking on mac | ||
IF(APPLE) | ||
SET (CMAKE_INSTALL_NAME_DIR "@rpath") | ||
SET(EXTRA_COMPILE_FLAGS "-msse2 -stdlib=libc++") | ||
ENDIF(APPLE) | ||
|
||
# Select where to install | ||
IF(${CMAKE_INSTALL_PREFIX_INITIALIZED_TO_DEFAULT}) | ||
IF(WIN32) | ||
SET(CMAKE_INSTALL_PREFIX "$ENV{ProgramFiles}/OpenMM" CACHE PATH "Where to install the plugin" FORCE) | ||
ELSE(WIN32) | ||
SET(CMAKE_INSTALL_PREFIX "/usr/local/openmm" CACHE PATH "Where to install the plugin" FORCE) | ||
ENDIF(WIN32) | ||
ENDIF(${CMAKE_INSTALL_PREFIX_INITIALIZED_TO_DEFAULT}) | ||
|
||
# Put all the tests and libraries in a single output directory. | ||
IF(NOT EXECUTABLE_OUTPUT_PATH) | ||
SET(EXECUTABLE_OUTPUT_PATH ${PROJECT_BINARY_DIR} | ||
CACHE INTERNAL "Single output directory for building all executables.") | ||
ENDIF() | ||
IF(NOT LIBRARY_OUTPUT_PATH) | ||
SET(LIBRARY_OUTPUT_PATH ${PROJECT_BINARY_DIR} | ||
CACHE INTERNAL "Single output directory for building all libraries.") | ||
ENDIF() | ||
SET(${PROJECT_NAME}_EXECUTABLE_DIR ${EXECUTABLE_OUTPUT_PATH}/${CMAKE_CFG_INTDIR}) | ||
SET(${PROJECT_NAME}_LIBRARY_DIR ${LIBRARY_OUTPUT_PATH}/${CMAKE_CFG_INTDIR}) | ||
|
||
# The source is organized into subdirectories, but we handle them all from | ||
# this CMakeLists file rather than letting CMake visit them as SUBDIRS. | ||
SET(NN_PLUGIN_SOURCE_SUBDIRS openmmapi serialization) | ||
|
||
# Set the library name | ||
SET(NN_LIBRARY_NAME OpenMMNN) | ||
SET(SHARED_NN_TARGET ${NN_LIBRARY_NAME}) | ||
|
||
# These are all the places to search for header files which are to be part of the API. | ||
SET(API_INCLUDE_DIRS "openmmapi/include" "openmmapi/include/internal") | ||
|
||
# Locate header files. | ||
SET(API_INCLUDE_FILES) | ||
FOREACH(dir ${API_INCLUDE_DIRS}) | ||
FILE(GLOB fullpaths ${dir}/*.h) | ||
SET(API_INCLUDE_FILES ${API_INCLUDE_FILES} ${fullpaths}) | ||
ENDFOREACH(dir) | ||
|
||
# Collect up source files | ||
SET(SOURCE_FILES) # empty | ||
SET(SOURCE_INCLUDE_FILES) | ||
FOREACH(subdir ${NN_PLUGIN_SOURCE_SUBDIRS}) | ||
FILE(GLOB src_files ${CMAKE_CURRENT_SOURCE_DIR}/${subdir}/src/*.cpp) | ||
FILE(GLOB incl_files ${CMAKE_CURRENT_SOURCE_DIR}/${subdir}/src/*.h) | ||
SET(SOURCE_FILES ${SOURCE_FILES} ${src_files}) #append | ||
SET(SOURCE_INCLUDE_FILES ${SOURCE_INCLUDE_FILES} ${incl_files}) | ||
|
||
## Make sure we find these locally before looking in OpenMM/include if | ||
## OpenMM was previously installed there. | ||
INCLUDE_DIRECTORIES(BEFORE ${CMAKE_CURRENT_SOURCE_DIR}/${subdir}/include) | ||
ENDFOREACH(subdir) | ||
|
||
# Create the library. | ||
|
||
ADD_LIBRARY(${SHARED_NN_TARGET} SHARED ${SOURCE_FILES} ${SOURCE_INCLUDE_FILES} ${API_INCLUDE_FILES}) | ||
SET_TARGET_PROPERTIES(${SHARED_NN_TARGET} | ||
PROPERTIES COMPILE_FLAGS "-DNN_BUILDING_SHARED_LIBRARY ${EXTRA_COMPILE_FLAGS}" | ||
LINK_FLAGS "${EXTRA_COMPILE_FLAGS}") | ||
TARGET_LINK_LIBRARIES(${SHARED_NN_TARGET} OpenMM) | ||
TARGET_LINK_LIBRARIES(${SHARED_NN_TARGET} tensorflow) | ||
INSTALL_TARGETS(/lib RUNTIME_DIRECTORY /lib ${SHARED_NN_TARGET}) | ||
|
||
# install headers | ||
FILE(GLOB API_ONLY_INCLUDE_FILES "openmmapi/include/*.h") | ||
INSTALL (FILES ${API_ONLY_INCLUDE_FILES} DESTINATION include) | ||
FILE(GLOB API_ONLY_INCLUDE_FILES_INTERNAL "openmmapi/include/internal/*.h") | ||
INSTALL (FILES ${API_ONLY_INCLUDE_FILES_INTERNAL} DESTINATION include/internal) | ||
|
||
# Enable testing | ||
|
||
ENABLE_TESTING() | ||
ADD_SUBDIRECTORY(serialization/tests) | ||
|
||
# Copy test files to the build directory. | ||
|
||
file(GLOB_RECURSE TEST_FILES RELATIVE "${CMAKE_SOURCE_DIR}" | ||
"${CMAKE_SOURCE_DIR}/tests/*.pb" | ||
) | ||
file(MAKE_DIRECTORY ${CMAKE_BINARY_DIR}/tests) | ||
set(COPIED_TEST_FILES) | ||
foreach(TEST_FILE ${TEST_FILES}) | ||
set(infile "${CMAKE_SOURCE_DIR}/${TEST_FILE}") | ||
set(outfile "${CMAKE_BINARY_DIR}/${TEST_FILE}") | ||
add_custom_command( | ||
OUTPUT "${outfile}" | ||
COMMAND "${CMAKE_COMMAND}" -E copy_if_different "${infile}" "${outfile}" | ||
DEPENDS "${infile}" | ||
COMMENT "CMake-copying file ${infile} to ${outfile}") | ||
set(COPIED_TEST_FILES ${COPIED_TEST_FILES} "${outfile}") | ||
endforeach() | ||
add_custom_target(CopyTestFiles ALL DEPENDS ${COPIED_TEST_FILES}) | ||
|
||
# Build the implementations for different platforms | ||
|
||
ADD_SUBDIRECTORY(platforms/reference) | ||
|
||
SET(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} "${CMAKE_SOURCE_DIR}") | ||
FIND_PACKAGE(OpenCL QUIET) | ||
IF(OPENCL_FOUND) | ||
SET(NN_BUILD_OPENCL_LIB ON CACHE BOOL "Build implementation for OpenCL") | ||
ELSE(OPENCL_FOUND) | ||
SET(NN_BUILD_OPENCL_LIB OFF CACHE BOOL "Build implementation for OpenCL") | ||
ENDIF(OPENCL_FOUND) | ||
IF(NN_BUILD_OPENCL_LIB) | ||
ADD_SUBDIRECTORY(platforms/opencl) | ||
ENDIF(NN_BUILD_OPENCL_LIB) | ||
|
||
FIND_PACKAGE(CUDA QUIET) | ||
IF(CUDA_FOUND) | ||
SET(NN_BUILD_CUDA_LIB ON CACHE BOOL "Build implementation for CUDA") | ||
ELSE(CUDA_FOUND) | ||
SET(NN_BUILD_CUDA_LIB OFF CACHE BOOL "Build implementation for CUDA") | ||
ENDIF(CUDA_FOUND) | ||
IF(NN_BUILD_CUDA_LIB) | ||
ADD_SUBDIRECTORY(platforms/cuda) | ||
ENDIF(NN_BUILD_CUDA_LIB) | ||
|
||
# Build the Python API | ||
|
||
FIND_PROGRAM(PYTHON_EXECUTABLE python) | ||
FIND_PROGRAM(SWIG_EXECUTABLE swig) | ||
IF(PYTHON_EXECUTABLE AND SWIG_EXECUTABLE) | ||
SET(NN_BUILD_PYTHON_WRAPPERS ON CACHE BOOL "Build wrappers for Python") | ||
ELSE(PYTHON_EXECUTABLE AND SWIG_EXECUTABLE) | ||
SET(NN_BUILD_PYTHON_WRAPPERS OFF CACHE BOOL "Build wrappers for Python") | ||
ENDIF(PYTHON_EXECUTABLE AND SWIG_EXECUTABLE) | ||
IF(NN_BUILD_PYTHON_WRAPPERS) | ||
ADD_SUBDIRECTORY(python) | ||
ENDIF(NN_BUILD_PYTHON_WRAPPERS) | ||
|
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,95 @@ | ||
|
||
### OPENCL_INCLUDE_DIR ### | ||
# Try OPENCL_DIR variable before looking elsewhere | ||
find_path(OPENCL_INCLUDE_DIR | ||
NAMES OpenCL/opencl.h CL/opencl.h | ||
PATHS $ENV{OPENCL_DIR} | ||
PATH_SUFFIXES "include" | ||
NO_DEFAULT_PATH | ||
) | ||
# Next look in environment variables set by OpenCL SDK installations | ||
find_path(OPENCL_INCLUDE_DIR | ||
NAMES OpenCL/opencl.h CL/opencl.h | ||
PATHS | ||
$ENV{CUDA_PATH} | ||
$ENV{AMDAPPSDKROOT} | ||
PATH_SUFFIXES "include" | ||
NO_DEFAULT_PATH | ||
) | ||
# On Macs, look inside the platform SDK | ||
if(DEFINED CMAKE_OSX_SYSROOT) | ||
find_path(OPENCL_INCLUDE_DIR | ||
NAMES opencl.h opencl.h | ||
PATHS | ||
"${CMAKE_OSX_SYSROOT}/System/Library/Frameworks/OpenCL.framework/Headers" | ||
NO_DEFAULT_PATH | ||
) | ||
endif(DEFINED CMAKE_OSX_SYSROOT) | ||
# As a last resort, look in default system areas followed by other possible locations | ||
find_path(OPENCL_INCLUDE_DIR | ||
NAMES OpenCL/opencl.h CL/opencl.h | ||
PATHS | ||
"C:/CUDA" | ||
"/usr/local/cuda" | ||
"/usr/local/streamsdk" | ||
"/usr" | ||
PATH_SUFFIXES "include" | ||
) | ||
|
||
### OPENCL_LIBRARY ### | ||
if("${CMAKE_SYSTEM_NAME}" MATCHES "Linux") | ||
if("${CMAKE_SYSTEM_PROCESSOR}" STREQUAL "x86_64") | ||
set(path_suffixes "lib/x86_64") | ||
else("${CMAKE_SYSTEM_PROCESSOR}" STREQUAL "x86_64") | ||
set(path_suffixes "lib/x86") | ||
endif("${CMAKE_SYSTEM_PROCESSOR}" STREQUAL "x86_64") | ||
elseif(MSVC) | ||
if(CMAKE_CL_64) | ||
set(path_suffixes "lib/x64" "lib/x86_64") | ||
else(CMAKE_CL_64) | ||
set(path_suffixes "lib/Win32" "lib/x86") | ||
endif(CMAKE_CL_64) | ||
else(MSVC) | ||
set(path_suffixes "lib") | ||
endif("${CMAKE_SYSTEM_NAME}" MATCHES "Linux") | ||
# Try OPENCL_DIR variable before looking elsewhere | ||
find_library(OPENCL_LIBRARY | ||
NAMES OpenCL | ||
PATHS | ||
$ENV{OPENCL_DIR} | ||
${OPENCL_LIB_SEARCH_PATH} | ||
PATH_SUFFIXES ${path_suffixes} | ||
NO_DEFAULT_PATH | ||
) | ||
# Next look in environment variables set by OpenCL SDK installations | ||
find_library(OPENCL_LIBRARY | ||
NAMES OpenCL | ||
PATHS | ||
$ENV{CUDA_PATH} | ||
$ENV{AMDAPPSDKROOT} | ||
PATH_SUFFIXES ${path_suffixes} | ||
NO_DEFAULT_PATH | ||
) | ||
# As a last resort, look in default system areas followed by other possible locations | ||
find_library(OPENCL_LIBRARY | ||
NAMES OpenCL | ||
PATHS | ||
"C:/CUDA" | ||
"/usr/local/cuda" | ||
"/usr/local/streamsdk" | ||
"/usr" | ||
PATH_SUFFIXES ${path_suffixes} "lib" | ||
) | ||
|
||
include(FindPackageHandleStandardArgs) | ||
find_package_handle_standard_args(OPENCL DEFAULT_MSG OPENCL_LIBRARY OPENCL_INCLUDE_DIR) | ||
|
||
if(OPENCL_FOUND) | ||
set(OPENCL_LIBRARIES ${OPENCL_LIBRARY}) | ||
mark_as_advanced(CLEAR OPENCL_INCLUDE_DIR) | ||
mark_as_advanced(CLEAR OPENCL_LIBRARY) | ||
else(OPENCL_FOUND) | ||
set(OPENCL_LIBRARIES) | ||
mark_as_advanced(OPENCL_INCLUDE_DIR) | ||
mark_as_advanced(OPENCL_LIBRARY) | ||
endif(OPENCL_FOUND) |
Oops, something went wrong.