| 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() |
|
|