141 lines
4.6 KiB
CMake
141 lines
4.6 KiB
CMake
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()
|