LIVE / CMakeLists.txt
Xu Ma
update
1c3c0d9
raw
history blame
4.72 kB
cmake_minimum_required(VERSION 3.12)
project(diffvg VERSION 0.0.1 DESCRIPTION "Differentiable Vector Graphics")
set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} "${CMAKE_SOURCE_DIR}/cmake/")
set(CMAKE_EXPORT_COMPILE_COMMANDS ON)
if(WIN32)
find_package(Python 3.6 COMPONENTS Development REQUIRED)
else()
find_package(Python 3.7 COMPONENTS Development REQUIRED)
endif()
add_subdirectory(pybind11)
option(DIFFVG_CUDA "Build diffvg with GPU code path?" ON)
if(DIFFVG_CUDA)
message(STATUS "Build with CUDA support")
find_package(CUDA 10 REQUIRED)
set(CMAKE_CUDA_STANDARD 11)
if(NOT WIN32)
# Hack: for some reason the line above doesn't work on some Linux systems.
set(CUDA_NVCC_FLAGS "${CUDA_NVCC_FLAGS} -std=c++11")
#set(CUDA_NVCC_FLAGS_DEBUG "-g -G")
endif()
else()
message(STATUS "Build without CUDA support")
find_package(Thrust REQUIRED)
endif()
# include_directories(${CMAKE_SOURCE_DIR}/pybind11/include)
include_directories(${PYTHON_INCLUDE_PATH})
find_package(PythonLibs REQUIRED)
include_directories(${PYTHON_INCLUDE_PATH})
include_directories(${PYTHON_INCLUDE_DIRS})
include_directories(pybind11/include)
if(DIFFVG_CUDA)
link_directories(${CUDA_LIBRARIES})
else()
include_directories(${THRUST_INCLUDE_DIR})
endif()
if(NOT MSVC)
# These compile definitions are not meaningful for MSVC
add_compile_options(-Wall -g -O3 -fvisibility=hidden -Wno-unknown-pragmas)
else()
add_compile_options(/Wall /Zi)
add_link_options(/DEBUG)
endif()
if(NOT DIFFVG_CUDA)
add_compile_options("-DTHRUST_DEVICE_SYSTEM=THRUST_DEVICE_SYSTEM_CPP")
endif()
set(SRCS atomic.h
color.h
cdf.h
cuda_utils.h
diffvg.h
edge_query.h
filter.h
matrix.h
parallel.h
pcg.h
ptr.h
sample_boundary.h
scene.h
shape.h
solve.h
vector.h
within_distance.h
winding_number.h
atomic.cpp
color.cpp
diffvg.cpp
parallel.cpp
scene.cpp
shape.cpp)
if(DIFFVG_CUDA)
add_compile_definitions(COMPILE_WITH_CUDA)
set_source_files_properties(
diffvg.cpp
scene.cpp
PROPERTIES CUDA_SOURCE_PROPERTY_FORMAT OBJ)
cuda_add_library(diffvg MODULE ${SRCS})
else()
add_library(diffvg MODULE ${SRCS})
endif()
if(APPLE)
# The "-undefined dynamic_lookup" is a hack for systems with
# multiple Python installed. If we link a particular Python version
# here, and we import it with a different Python version later.
# likely a segmentation fault.
# The solution for Linux Mac OS machines, as mentioned in
# https://github.com/pybind/pybind11/blob/master/tools/pybind11Tools.cmake
# is to not link against Python library at all and resolve the symbols
# at compile time.
set(DYNAMIC_LOOKUP "-undefined dynamic_lookup")
endif()
target_link_libraries(diffvg ${DYNAMIC_LOOKUP})
if(WIN32)
# See: https://pybind11.readthedocs.io/en/master/compiling.html#advanced-interface-library-target
target_link_libraries(diffvg pybind11::module)
set_target_properties(diffvg PROPERTIES PREFIX "${PYTHON_MODULE_PREFIX}"
SUFFIX "${PYTHON_MODULE_EXTENSION}")
endif()
set_target_properties(diffvg PROPERTIES SKIP_BUILD_RPATH FALSE)
set_target_properties(diffvg PROPERTIES BUILD_WITH_INSTALL_RPATH TRUE)
if(UNIX AND NOT APPLE)
set_target_properties(diffvg PROPERTIES INSTALL_RPATH "$ORIGIN")
elseif(APPLE)
set_target_properties(diffvg PROPERTIES INSTALL_RPATH "@loader_path")
endif()
set_property(TARGET diffvg PROPERTY CXX_STANDARD 11)
set_target_properties(diffvg PROPERTIES PREFIX "")
# Still enable assertion in release mode
string( REPLACE "/DNDEBUG" "" CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE}")
string( REPLACE "-DNDEBUG" "" CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE}")
string( REPLACE "/DNDEBUG" "" CMAKE_CXX_FLAGS_RELWITHDEBINFO "${CMAKE_CXX_FLAGS_RELWITHDEBINFO}")
string( REPLACE "-DNDEBUG" "" CMAKE_CXX_FLAGS_RELWITHDEBINFO "${CMAKE_CXX_FLAGS_RELWITHDEBINFO}")
string( REPLACE "/DNDEBUG" "" CMAKE_C_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE}")
string( REPLACE "-DNDEBUG" "" CMAKE_C_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE}")
string( REPLACE "/DNDEBUG" "" CMAKE_C_FLAGS_RELWITHDEBINFO "${CMAKE_CXX_FLAGS_RELWITHDEBINFO}")
string( REPLACE "-DNDEBUG" "" CMAKE_C_FLAGS_RELWITHDEBINFO "${CMAKE_CXX_FLAGS_RELWITHDEBINFO}")
if(NOT WIN32)
find_package(TensorFlow)
if(TensorFlow_FOUND)
add_subdirectory(pydiffvg_tensorflow/custom_ops)
else()
message(INFO " Building without TensorFlow support (not found)")
endif()
endif()