Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
195 changes: 96 additions & 99 deletions CMakeLists.txt
Original file line number Diff line number Diff line change
@@ -1,140 +1,137 @@
cmake_minimum_required(VERSION 3.12)
cmake_minimum_required(VERSION 3.18)

project(diffvg VERSION 0.0.1 DESCRIPTION "Differentiable Vector Graphics")
project(diffvg VERSION 0.0.1 DESCRIPTION "Differentiable Vector Graphics" LANGUAGES CXX)

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)
find_package(Python 3.6 COMPONENTS Interpreter Development.Module REQUIRED)
else()
find_package(Python 3.7 COMPONENTS Development REQUIRED)
find_package(Python 3.7 COMPONENTS Interpreter Development.Module REQUIRED)
endif()
#add_subdirectory(pybind11)
find_package(pybind11 CONFIG REQUIRED)
find_package(Protobuf REQUIRED)

# Check if compiling on macOS to disable CUDA by default
if(APPLE)
option(DIFFVG_CUDA "Build diffvg with GPU code path?" OFF)
else()
option(DIFFVG_CUDA "Build diffvg with GPU code path?" ON)
endif()
add_subdirectory(pybind11)

option(DIFFVG_CUDA "Build diffvg with GPU code path?" ON)
#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()
enable_language(CUDA)
find_package(CUDAToolkit 10 REQUIRED)
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)
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
bindings.cpp
)

add_library(diffvg MODULE ${SRCS})

target_include_directories(diffvg PRIVATE
${Python_INCLUDE_DIRS}
${Protobuf_INCLUDE_DIRS}
)


if(DIFFVG_CUDA)
link_directories(${CUDA_LIBRARIES})
else()
include_directories(${THRUST_INCLUDE_DIR})
endif()
set(CMAKE_CXX_STANDARD 17)
set(CMAKE_CXX_STANDARD_REQUIRED ON)
set(CMAKE_CUDA_STANDARD 17)
set(CMAKE_CUDA_STANDARD_REQUIRED ON)

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()
target_compile_definitions(diffvg PRIVATE COMPILE_WITH_CUDA)

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)
PROPERTIES LANGUAGE CUDA
)

set_target_properties(diffvg PROPERTIES
CUDA_ARCHITECTURES native
)

cuda_add_library(diffvg MODULE ${SRCS})
target_link_libraries(diffvg PRIVATE CUDA::cudart)
else()
add_library(diffvg MODULE ${SRCS})
target_include_directories(diffvg PRIVATE ${THRUST_INCLUDE_DIR})
target_compile_definitions(diffvg PRIVATE THRUST_DEVICE_SYSTEM=THRUST_DEVICE_SYSTEM_CPP)
endif()

if(NOT MSVC)
target_compile_options(diffvg PRIVATE -Wall -g -O3 -fvisibility=hidden -Wno-unknown-pragmas)
else()
target_compile_options(diffvg PRIVATE /Wall /Zi)
target_link_options(diffvg PRIVATE /DEBUG)
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")
target_link_options(diffvg PRIVATE -undefined dynamic_lookup)
endif()

target_link_libraries(diffvg ${DYNAMIC_LOOKUP})
target_link_libraries(diffvg PRIVATE pybind11::module)

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}")
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)
set_target_properties(diffvg PROPERTIES
SKIP_BUILD_RPATH FALSE
BUILD_WITH_INSTALL_RPATH TRUE
PREFIX ""
CXX_STANDARD 17
CXX_STANDARD_REQUIRED YES
)

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()
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_C_FLAGS_RELEASE}")
string(REPLACE "-DNDEBUG" "" CMAKE_C_FLAGS_RELEASE "${CMAKE_C_FLAGS_RELEASE}")
string(REPLACE "/DNDEBUG" "" CMAKE_C_FLAGS_RELWITHDEBINFO "${CMAKE_C_FLAGS_RELWITHDEBINFO}")
string(REPLACE "-DNDEBUG" "" CMAKE_C_FLAGS_RELWITHDEBINFO "${CMAKE_C_FLAGS_RELWITHDEBINFO}")
8 changes: 8 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -32,6 +32,14 @@ pip install torch-tools
pip install visdom
python setup.py install
```

Note for windows:
If you encounter a diffvg modulenotfounderror with pydiffvg bind in `render_pythorch.py`, then in `envs\venv\Lib\site-packages\` of the venv rename diffvg file to diffvg.pyd

if using windows env with intel processors you might then run into:
OMP: Error #15: Initializing libiomp5md.dll, but found `libiomp5md.dll` already initialized.

This can be fixed by removing the libiomp5md.dll file that can be found in `envs\venv\Lib\site-packages\torch\lib`
# Install using poetry

## prerequisite
Expand Down
Loading