Skip to content
Snippets Groups Projects
Commit 5ca28647 authored by Mark Winter's avatar Mark Winter
Browse files

Use cmake for build

parent 44130f71
No related branches found
No related tags found
No related merge requests found
......@@ -24,27 +24,16 @@ Thumbs.db
*.ilk
*.log
*.sbr
obj/
_ReSharper*/
[Tt]est[Rr]esult*
src/c/Intermediate/*
src/c/Output/*
src/c/ipch/*
src/c/packages.config
src/c/packages/
bin/Release_x64/CudaImageProccessing.lib
src/c/CudaImageProccessing.sdf
src/c/CudaMex.mexw64
src/MATLAB/cudart32_55.dll
src/MATLAB/cudart64_55.dll
src/c/CudaImageProccessing.opensdf
src/c/CudaImageProccessing.sdf
src/c/CudaImageProccessing.v11.suo
*.asv
*.~
*.VC.db
*.opendb
# Ignore CMake cache and build directiories (assume build*/)
CmakeCache.txt
build*/
**/CMakeFiles
# Ignore pycache folder
**/__pycache__/
......
cmake_minimum_required(VERSION 3.15.0)
cmake_policy(VERSION 3.15)
project(HydraImageProcessor LANGUAGES C CXX CUDA)
set(HYDRA_MODULE_NAME "HIP")
# NOTE: Use CUDACXX (gcc/clang) or -T cuda=<cuda_toolkit> (vs)
# TODO: Try to make selection simpler with cmake 3.17's FindCUDAToolkit?
find_package(CUDA REQUIRED)
find_package(OpenMP REQUIRED)
find_package(Matlab)
find_package(Python COMPONENTS Development NumPy)
# Setup backend Hydra CUDA library (static) for cuda building
add_subdirectory(src/c/Cuda)
# Setup MEX interface if Matlab was found
if ( Matlab_FOUND )
add_subdirectory(src/c/Mex)
endif()
# Setup Python interface if Python3 found
if ( Python_FOUND )
add_subdirectory(src/c/Python)
endif()
# Setup backend Hydra CUDA library (static) for cuda building
add_library(HydraCudaLib STATIC "")
target_compile_features(HydraCudaLib PRIVATE cxx_std_11 cuda_std_11)
target_link_libraries(HydraCudaLib PRIVATE OpenMP::OpenMP_CXX)
# Set a variable to turn on/off PROCESS_MUTEX support
set(USE_PROCESS_MUTEX ON CACHE BOOL "Use process-level mutex to guard GPU calls")
# Complie compute architectures
# NOTE: Comment out some of these to speed up builds if you know your hardware capabilities
string(APPEND CMAKE_CUDA_FLAGS " -gencode=arch=compute_30,code=sm_30")
string(APPEND CMAKE_CUDA_FLAGS " -gencode=arch=compute_35,code=sm_35")
string(APPEND CMAKE_CUDA_FLAGS " -gencode=arch=compute_50,code=sm_50")
string(APPEND CMAKE_CUDA_FLAGS " -gencode=arch=compute_52,code=sm_52")
string(APPEND CMAKE_CUDA_FLAGS " -gencode=arch=compute_60,code=sm_60")
string(APPEND CMAKE_CUDA_FLAGS " -gencode=arch=compute_61,code=sm_61")
string(APPEND CMAKE_CUDA_FLAGS " -gencode=arch=compute_70,code=compute_70")
set_target_properties(HydraCudaLib
PROPERTIES
POSITION_INDEPENDENT_CODE ON
CUDA_SEPARABLE_COMPILATION ON
CUDA_RESOLVE_DEVICE_SYMBOLS ON)
target_sources(HydraCudaLib
PUBLIC
BufferConversions.h
CHelpers.h
CommandLineProgress.h
CudaDeviceInfo.h
CudaDeviceStats.h
CudaUtilities.h
CWrapperAutogen.h
CWrappers.h
Defines.h
ImageChunk.h
ImageView.h
KernelGenerators.h
Vec.h
PRIVATE
CudaAddTwoImages.cuh
CudaClosure.cuh
CudaDeviceCount.cuh
CudaDeviceImages.cuh
CudaElementWiseDifference.cuh
CudaEntropyFilter.cuh
CudaGaussian.cuh
CudaGetMinMax.cuh
CudaHighPassFilter.cuh
CudaIdentityFilter.cuh
CudaImageContainer.cuh
CudaImageContainerClean.cuh
CudaLoG.cuh
CudaMaxFilter.cuh
CudaMeanAndVariance.cuh
CudaMeanFilter.cuh
CudaMedianFilter.cuh
CudaMemoryStats.cuh
CudaMinFilter.cuh
CudaMinMax.cuh
CudaMultiplySum.cuh
CudaNLMeans.cuh
CudaOpener.cuh
CudaStdFilter.cuh
CudaSum.cuh
CudaVarFilter.cuh
CudaWienerFilter.cuh
ImageDimensions.cuh
Kernel.cuh
KernelIterator.cuh
SeparableMultiplySum.cuh
CHelpers.cpp
CudaDeviceInfo.cpp
CudaDeviceStats.cpp
CudaUtilities.cpp
GaussianKernel.cpp
ImageChunk.cpp
LoGKernel.cpp
CWrapperAutogen.cu
CWrappers.cu
Kernel.cu
KernelIterator.cu
)
target_include_directories(HydraCudaLib
PUBLIC
$<INSTALL_INTERFACE:include>
$<BUILD_INTERFACE:${CMAKE_CURRENT_LIST_DIR}>
$<BUILD_INTERFACE:${CMAKE_CURRENT_LIST_DIR}/..>
PRIVATE
${CMAKE_CUDA_TOOLKIT_INCLUDE_DIRECTORIES}
)
# Setup MEX interface if Matlab was found
add_library(HydraMex MODULE "")
# Require c++11 and set build definition to MEX_BUILD
target_compile_features(HydraMex PRIVATE cxx_std_11)
target_compile_definitions(HydraMex PRIVATE MEX_BUILD)
# Set USE_PROCESS_MUTEX if cmake variable is set
if ( USE_PROCESS_MUTEX )
target_compile_definitions(HydraMex PRIVATE USE_PROCESS_MUTEX)
endif()
# Link against Matlab libraries
target_link_libraries(HydraMex PRIVATE HydraCudaLib ${Matlab_MX_LIBRARY} ${Matlab_MEX_LIBRARY})
# Change output library name to Hydra.mex<plaform>
set_target_properties(HydraMex
PROPERTIES
OUTPUT_NAME ${HYDRA_MODULE_NAME}
PREFIX ""
SUFFIX .${Matlab_MEX_EXTENSION}
POSITION_INDEPENDENT_CODE ON
)
# Setup Matlab include directories
target_include_directories(HydraMex PRIVATE ${Matlab_INCLUDE_DIRS})
# Setup src include directories
target_include_directories(HydraMex
PRIVATE
$<INSTALL_INTERFACE:include>
$<BUILD_INTERFACE:${CMAKE_CURRENT_LIST_DIR}>
$<BUILD_INTERFACE:${CMAKE_CURRENT_LIST_DIR}/..>
$<BUILD_INTERFACE:${CMAKE_CURRENT_LIST_DIR}/../ScriptCmds>
)
# Include module definition file for Windows
if ( WIN32 )
target_sources(HydraMex PRIVATE HydraMex.def)
endif()
target_sources(HydraMex
PRIVATE
MexArgConverter.h
MexIncludes.h
MexTypes.h
../mph/const_string.h
../mph/integer_sequence.h
../mph/preproc_helper.h
../mph/qualifier_helpers.h
../mph/tuple_helpers.h
../ScriptCmds/ArgConverter.h
../ScriptCmds/GenCommands.h
../ScriptCmds/HydraConfig.h
../ScriptCmds/LinkageTraitTfms.h
../ScriptCmds/ScopedProcessMutex.h
../ScriptCmds/ScriptCommand.h
../ScriptCmds/ScriptCommandDefines.h
../ScriptCmds/ScriptCommandImpl.h
../ScriptCmds/ScriptCommandModule.h
../ScriptCmds/ScriptCommands.h
../ScriptCmds/ScriptHelpers.h
../ScriptCmds/ScriptIncludes.h
../ScriptCmds/ScriptioMaps.h
../ScriptCmds/ScriptTraits.h
../ScriptCmds/ScriptTraitTfms.h
../ScriptCmds/Commands/ScrCmdCheckConfig.h
../ScriptCmds/Commands/ScrCmdClosure.h
../ScriptCmds/Commands/ScrCmdDeviceCount.h
../ScriptCmds/Commands/ScrCmdDeviceStats.h
../ScriptCmds/Commands/ScrCmdElementWiseDifference.h
../ScriptCmds/Commands/ScrCmdEntropyFilter.h
../ScriptCmds/Commands/ScrCmdGaussian.h
../ScriptCmds/Commands/ScrCmdGetMinMax.h
../ScriptCmds/Commands/ScrCmdHelp.h
../ScriptCmds/Commands/ScrCmdHighPassFilter.h
../ScriptCmds/Commands/ScrCmdIdentityFilter.h
../ScriptCmds/Commands/ScrCmdInfo.h
../ScriptCmds/Commands/ScrCmdLoG.h
../ScriptCmds/Commands/ScrCmdMaxFilter.h
../ScriptCmds/Commands/ScrCmdMeanFilter.h
../ScriptCmds/Commands/ScrCmdMedianFilter.h
../ScriptCmds/Commands/ScrCmdMinFilter.h
../ScriptCmds/Commands/ScrCmdMultiplySum.h
../ScriptCmds/Commands/ScrCmdNLMeans.h
../ScriptCmds/Commands/ScrCmdOpener.h
../ScriptCmds/Commands/ScrCmdStdFilter.h
../ScriptCmds/Commands/ScrCmdSum.h
../ScriptCmds/Commands/ScrCmdVarFilter.h
../ScriptCmds/Commands/ScrCmdWienerFilter.h
../ScriptCmds/ScopedProcessMutex.cpp
MexCommandModule.cpp
HydraMexModule.cpp
)
File moved
File moved
# Setup MEX interface if Matlab was found
add_library(HydraPy MODULE "")
# Require c++11 and set build definition to PY_BUILD
target_compile_features(HydraPy PRIVATE cxx_std_11)
target_compile_definitions(HydraPy PRIVATE PY_BUILD)
# Set USE_PROCESS_MUTEX if cmake variable is set
if ( USE_PROCESS_MUTEX )
target_compile_definitions(HydraPy PRIVATE USE_PROCESS_MUTEX)
endif()
# Link against Python and NumPy libraries
target_link_libraries(HydraPy PRIVATE HydraCudaLib Python::Python Python::NumPy)
# Change output library name to Hydra.<dll/so/dylib>
set_target_properties(HydraPy
PROPERTIES
OUTPUT_NAME ${HYDRA_MODULE_NAME}
PREFIX ""
POSITION_INDEPENDENT_CODE ON
)
# On windows specifically set the suffix to .pyd
if ( WIN32 )
set_target_properties(HydraPy PROPERTIES SUFFIX .pyd)
endif()
# Setup Python/NumPy include directories
target_include_directories(HydraPy PRIVATE Python::Python Python::NumPy)
# Setup src include directories
target_include_directories(HydraPy
PRIVATE
$<INSTALL_INTERFACE:include>
$<BUILD_INTERFACE:${CMAKE_CURRENT_LIST_DIR}>
$<BUILD_INTERFACE:${CMAKE_CURRENT_LIST_DIR}/..>
$<BUILD_INTERFACE:${CMAKE_CURRENT_LIST_DIR}/../ScriptCmds>
$<BUILD_INTERFACE:${CMAKE_CURRENT_LIST_DIR}/../external>
)
target_sources(HydraPy
PRIVATE
PyArgConverter.h
PyIncludes.h
PyTypes.h
../mph/const_string.h
../mph/integer_sequence.h
../mph/preproc_helper.h
../mph/qualifier_helpers.h
../mph/tuple_helpers.h
../ScriptCmds/ArgConverter.h
../ScriptCmds/GenCommands.h
../ScriptCmds/HydraConfig.h
../ScriptCmds/LinkageTraitTfms.h
../ScriptCmds/ScopedProcessMutex.h
../ScriptCmds/ScriptCommand.h
../ScriptCmds/ScriptCommandDefines.h
../ScriptCmds/ScriptCommandImpl.h
../ScriptCmds/ScriptCommandModule.h
../ScriptCmds/ScriptCommands.h
../ScriptCmds/ScriptHelpers.h
../ScriptCmds/ScriptIncludes.h
../ScriptCmds/ScriptioMaps.h
../ScriptCmds/ScriptTraits.h
../ScriptCmds/ScriptTraitTfms.h
../ScriptCmds/Commands/ScrCmdCheckConfig.h
../ScriptCmds/Commands/ScrCmdClosure.h
../ScriptCmds/Commands/ScrCmdDeviceCount.h
../ScriptCmds/Commands/ScrCmdDeviceStats.h
../ScriptCmds/Commands/ScrCmdElementWiseDifference.h
../ScriptCmds/Commands/ScrCmdEntropyFilter.h
../ScriptCmds/Commands/ScrCmdGaussian.h
../ScriptCmds/Commands/ScrCmdGetMinMax.h
../ScriptCmds/Commands/ScrCmdHelp.h
../ScriptCmds/Commands/ScrCmdHighPassFilter.h
../ScriptCmds/Commands/ScrCmdIdentityFilter.h
../ScriptCmds/Commands/ScrCmdInfo.h
../ScriptCmds/Commands/ScrCmdLoG.h
../ScriptCmds/Commands/ScrCmdMaxFilter.h
../ScriptCmds/Commands/ScrCmdMeanFilter.h
../ScriptCmds/Commands/ScrCmdMedianFilter.h
../ScriptCmds/Commands/ScrCmdMinFilter.h
../ScriptCmds/Commands/ScrCmdMultiplySum.h
../ScriptCmds/Commands/ScrCmdNLMeans.h
../ScriptCmds/Commands/ScrCmdOpener.h
../ScriptCmds/Commands/ScrCmdStdFilter.h
../ScriptCmds/Commands/ScrCmdSum.h
../ScriptCmds/Commands/ScrCmdVarFilter.h
../ScriptCmds/Commands/ScrCmdWienerFilter.h
../ScriptCmds/ScopedProcessMutex.cpp
HydraPyModule.cpp
PyCommandModule.cpp
)
File moved
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment