initial commit
This commit is contained in:
140
CMakeLists.txt
Normal file
140
CMakeLists.txt
Normal file
@@ -0,0 +1,140 @@
|
||||
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()
|
Reference in New Issue
Block a user