Skip to content

Commit 2795e98

Browse files
authored
Miscellaneous CMake improvements (#9)
2 parents cad27da + f83caed commit 2795e98

21 files changed

+173
-306
lines changed

Diff for: .github/workflows/ci.yml

+26
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
name: CI
2+
3+
on:
4+
pull_request:
5+
branches:
6+
- main
7+
paths-ignore:
8+
- '**.md'
9+
# Allows you to run this workflow manually from the Actions tab
10+
workflow_dispatch:
11+
12+
jobs:
13+
build:
14+
runs-on: ubuntu-latest
15+
16+
steps:
17+
- name: Check Out Repo
18+
uses: actions/checkout@v2
19+
20+
- name: Set up Docker Buildx
21+
uses: docker/setup-buildx-action@v1
22+
23+
- name: Build
24+
uses: docker/build-push-action@v2
25+
with:
26+
context: .

Diff for: CMakeLists.txt

+45-17
Original file line numberDiff line numberDiff line change
@@ -1,33 +1,61 @@
1-
cmake_minimum_required(VERSION 3.1...3.18)
2-
#
3-
if(${CMAKE_VERSION} VERSION_LESS 3.18)
4-
cmake_policy(VERSION ${CMAKE_MAJOR_VERSION}.${CMAKE_MINOR_VERSION})
5-
endif()
1+
cmake_minimum_required(VERSION 3.16..3.22)
62

73
# Set-up project
84
project(dlext LANGUAGES C CXX)
95

10-
include(FindHOOMD.cmake)
6+
# Try finding HOOMD first from the current environment
7+
find_package(HOOMD 2.6.0 QUIET)
8+
9+
set(PROJECT_MODULE_PATH "${CMAKE_CURRENT_SOURCE_DIR}/cmake/Modules")
10+
set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} ${PROJECT_MODULE_PATH})
11+
12+
if(NOT HOOMD_FOUND)
13+
find_package(HOOMD 2.6.0 REQUIRED)
14+
endif()
15+
16+
if(NOT HOOMD_INSTALL_PREFIX)
17+
set(HOOMD_INSTALL_PREFIX ${HOOMD_ROOT})
18+
endif()
19+
20+
if(NOT HOOMD_LIBRARIES)
21+
set(HOOMD_LIBRARIES HOOMD::_hoomd)
22+
endif()
1123

12-
set(CMAKE_MODULE_PATH ${CMAKE_CURRENT_SOURCE_DIR} ${CMAKE_MODULE_PATH})
24+
include(GNUInstallDirs)
25+
include("${PROJECT_MODULE_PATH}/FetchCPM.cmake")
26+
include("${PROJECT_MODULE_PATH}/FetchDLPack.cmake")
1327

1428
# Plugins must be built as shared libraries
1529
if(ENABLE_STATIC)
1630
message(SEND_ERROR "Plugins cannot be built against a statically compiled hoomd")
1731
endif()
18-
#
19-
set(BUILD_SHARED_LIBS on)
2032

2133
if(CMAKE_INSTALL_PREFIX_INITIALIZED_TO_DEFAULT)
22-
set(CMAKE_INSTALL_PREFIX ${HOOMD_ROOT} CACHE PATH "Installation prefix" FORCE)
34+
set(CMAKE_INSTALL_PREFIX ${HOOMD_INSTALL_PREFIX} CACHE PATH "" FORCE)
2335
endif()
2436

25-
set(PYTHON_MODULE_BASE_DIR ${CMAKE_INSTALL_PREFIX})
26-
message(STATUS "Install plugin to: " ${PYTHON_MODULE_BASE_DIR})
37+
set(CMAKE_INSTALL_RPATH_USE_LINK_PATH TRUE)
2738

28-
# Process subdirectories
29-
add_subdirectory(${PROJECT_NAME})
39+
message(STATUS "Install plugin to: " ${CMAKE_INSTALL_PREFIX})
3040

31-
if(BUILD_TESTING)
32-
add_subdirectory(test)
33-
endif()
41+
# Create the main library
42+
add_library(${PROJECT_NAME} SHARED "")
43+
44+
target_compile_features(${PROJECT_NAME} PRIVATE cxx_std_11)
45+
target_include_directories(${PROJECT_NAME} PUBLIC include)
46+
target_link_libraries(${PROJECT_NAME} PUBLIC ${HOOMD_LIBRARIES} dlpack::dlpack)
47+
48+
add_subdirectory(dlext)
49+
50+
# Install
51+
install(TARGETS ${PROJECT_NAME}
52+
DESTINATION ${HOOMD_ROOT}
53+
)
54+
55+
install(DIRECTORY include/
56+
DESTINATION "${CMAKE_INSTALL_INCLUDEDIR}/hoomd/${PROJECT_NAME}"
57+
FILES_MATCHING PATTERN "*.h"
58+
)
59+
60+
# Create python module
61+
add_subdirectory(python)

Diff for: Dockerfile

+1-1
Original file line numberDiff line numberDiff line change
@@ -2,4 +2,4 @@ FROM ssages/pysages-base:latest
22

33
COPY . hoomd-dlext
44
RUN cd hoomd-dlext && mkdir build && cd build && cmake .. && make install
5-
RUN python3 -c "import hoomd; import hoomd.dlext"
5+
RUN python3 -c "import hoomd; import hoomd.dlext"

Diff for: build.sh

+1-8
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,7 @@
11
#!/bin/bash
22

3-
#CUDA_PATH=/usr/lib/cuda-10.2/
43
PYTHON_EXECUTABLE=$(which python3)
54
HOOMD_ROOT=$(${PYTHON_EXECUTABLE} -c 'import site; print(site.getsitepackages()[0])')/hoomd/
65

7-
cmake -S . -B build \
8-
-DBUILD_TESTING=OFF \
9-
-DCOPY_HEADERS=ON \
10-
-DHOOMD_ROOT=${HOOMD_ROOT}
11-
#-DPYTHON_EXECUTABLE=${PYTHON_EXECUTABLE} \
12-
#-DCUDA_TOOLKIT_ROOT_DIR=${CUDA_PATH} \
13-
6+
cmake -S . -B build -DHOOMD_ROOT=${HOOMD_ROOT}
147
cmake --build build --target install

Diff for: cmake/Modules/FetchCPM.cmake

+21
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
set(CPM_DOWNLOAD_VERSION 0.34.2)
2+
3+
if(CPM_SOURCE_CACHE)
4+
# Expand relative path. This is important if the provided path contains a tilde (~)
5+
get_filename_component(CPM_SOURCE_CACHE ${CPM_SOURCE_CACHE} ABSOLUTE)
6+
set(CPM_DOWNLOAD_LOCATION "${CPM_SOURCE_CACHE}/cpm/CPM_${CPM_DOWNLOAD_VERSION}.cmake")
7+
elseif(DEFINED ENV{CPM_SOURCE_CACHE})
8+
set(CPM_DOWNLOAD_LOCATION "$ENV{CPM_SOURCE_CACHE}/cpm/CPM_${CPM_DOWNLOAD_VERSION}.cmake")
9+
else()
10+
set(CPM_DOWNLOAD_LOCATION "${CMAKE_BINARY_DIR}/cmake/CPM_${CPM_DOWNLOAD_VERSION}.cmake")
11+
endif()
12+
13+
if(NOT (EXISTS ${CPM_DOWNLOAD_LOCATION}))
14+
message(STATUS "Downloading CPM.cmake to ${CPM_DOWNLOAD_LOCATION}")
15+
file(DOWNLOAD
16+
https://github.com/cpm-cmake/CPM.cmake/releases/download/v${CPM_DOWNLOAD_VERSION}/CPM.cmake
17+
${CPM_DOWNLOAD_LOCATION}
18+
)
19+
endif()
20+
21+
include(${CPM_DOWNLOAD_LOCATION})

Diff for: cmake/Modules/FetchDLPack.cmake

+18
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
function(fetch_dlpack ver)
2+
CPMFindPackage(NAME DLPack
3+
VERSION ${ver}
4+
GIT_REPOSITORY https://github.com/dmlc/dlpack.git
5+
GIT_TAG v${ver}
6+
GIT_SHALLOW TRUE
7+
DOWNLOAD_ONLY TRUE
8+
)
9+
set(DLPack_SOURCE_DIR "${DLPack_SOURCE_DIR}" PARENT_SCOPE)
10+
endfunction()
11+
12+
if(NOT DLPack_SOURCE_DIR)
13+
set(DLPack_FALLBACK_VERSION 0.6)
14+
fetch_dlpack(${DLPack_FALLBACK_VERSION})
15+
endif()
16+
17+
set(BUILD_MOCK OFF CACHE BOOL "Do not build DLPack mock target" FORCE)
18+
add_subdirectory(${DLPack_SOURCE_DIR} "${PROJECT_BINARY_DIR}/extern/dlpack")
File renamed without changes.

Diff for: dlext/CMakeLists.txt

+5-69
Original file line numberDiff line numberDiff line change
@@ -1,72 +1,8 @@
1-
set(COMPONENT_NAME dlpack_extension)
1+
add_subdirectory(src)
22

3-
set(
4-
${COMPONENT_NAME}_sources
5-
SystemView.cc
6-
PyDLExt.cc
7-
Sampler.cc
8-
)
9-
10-
pybind11_add_module(${COMPONENT_NAME} SHARED ${${COMPONENT_NAME}_sources} NO_EXTRAS)
11-
12-
if(APPLE)
13-
set_target_properties(
14-
${COMPONENT_NAME} PROPERTIES INSTALL_RPATH "@loader_path/..;@loader_path"
15-
)
16-
else()
17-
set_target_properties(
18-
${COMPONENT_NAME} PROPERTIES INSTALL_RPATH "\$ORIGIN/..;\$ORIGIN"
19-
)
20-
endif()
21-
22-
# link the library to its dependencies
23-
target_link_libraries(${COMPONENT_NAME} PRIVATE ${HOOMD_LIBRARIES})
24-
25-
# if we are compiling with MPI support built in, set appropriate
26-
# compiler/linker flags
27-
if(ENABLE_MPI)
28-
if(MPI_COMPILE_FLAGS)
29-
set_target_properties(
30-
${COMPONENT_NAME} PROPERTIES COMPILE_FLAGS "${MPI_CXX_COMPILE_FLAGS}"
31-
)
32-
endif()
33-
if(MPI_LINK_FLAGS)
34-
set_target_properties(
35-
${COMPONENT_NAME} PROPERTIES LINK_FLAGS "${MPI_CXX_LINK_FLAGS}"
36-
)
37-
endif()
38-
endif()
39-
40-
fix_cudart_rpath(${COMPONENT_NAME})
3+
target_include_directories(${PROJECT_NAME} PUBLIC include)
414

42-
# install the library
43-
install(
44-
TARGETS ${COMPONENT_NAME}
45-
LIBRARY DESTINATION ${PYTHON_MODULE_BASE_DIR}/${PROJECT_NAME}
5+
install(DIRECTORY include/
6+
DESTINATION "${CMAKE_INSTALL_INCLUDEDIR}/hoomd/${PROJECT_NAME}"
7+
FILES_MATCHING PATTERN "*.h"
468
)
47-
48-
################ Python only modules
49-
# copy python modules to the build directory to make it a working python package
50-
MACRO(copy_file file)
51-
add_custom_command(
52-
OUTPUT ${file}
53-
DEPENDS ${file}
54-
POST_BUILD
55-
COMMAND ${CMAKE_COMMAND}
56-
ARGS -E copy ${CMAKE_CURRENT_SOURCE_DIR}/${file} ${CMAKE_CURRENT_BINARY_DIR}/${file}
57-
COMMENT "Copy hoomd/${COMPONENT_NAME}/${file}"
58-
)
59-
ENDMACRO()
60-
61-
set(
62-
files
63-
__init__.py
64-
)
65-
66-
install(FILES ${files} DESTINATION ${PYTHON_MODULE_BASE_DIR}/${PROJECT_NAME})
67-
68-
foreach(file ${files})
69-
copy_file(${file})
70-
endforeach()
71-
72-
add_custom_target(copy_${COMPONENT_NAME} ALL DEPENDS ${files})

0 commit comments

Comments
 (0)