summaryrefslogtreecommitdiff
path: root/CMakeLists.txt
blob: 7616dcc960fefd059b97784b48ad0c194cb7d845 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
cmake_minimum_required(VERSION 3.13)

set(ENV{CUDAHOSTCXX} "g++-5")
project(opengltest LANGUAGES C CXX)

set(CMAKE_CXX_STANDARD 14)
set(LIB_DIR "${CMAKE_CURRENT_SOURCE_DIR}/libraries")

include (CheckLanguage)

check_language(CUDA)
if(CMAKE_CUDA_COMPILER)
    enable_language(CUDA)
else()
    message(STATUS "No CUDA support on this system. Compiling CPU version.")
endif()

find_package(OpenGL REQUIRED)
find_package(CUDA)

add_executable(${PROJECT_NAME} main.cpp)

# GLFW
find_package(PkgConfig REQUIRED)
pkg_search_module(GLFW REQUIRED glfw3)
include_directories(${GLFW_INCLUDE_DIRS})
target_link_libraries(${PROJECT_NAME} ${GLFW_STATIC_LIBRARIES})


# GLAD
set(GLAD_DIR "${LIB_DIR}/glad")
set(GLAD_NAME "glad")
add_library(${GLAD_NAME} "${GLAD_DIR}/src/glad.c")
target_include_directories(${GLAD_NAME} PRIVATE "${GLAD_DIR}/include")
target_include_directories(${PROJECT_NAME} PRIVATE "${GLAD_DIR}/include")
target_link_libraries(${PROJECT_NAME} ${GLAD_NAME} "${CMAKE_DL_LIBS}")


# stb_image
target_include_directories(${PROJECT_NAME} PRIVATE "${LIB_DIR}/stb_image")


# shader
target_include_directories(${PROJECT_NAME} PRIVATE "${CMAKE_CURRENT_SOURCE_DIR}/learnopengl")


# Point
set(POINT_LIB "point_lib")
set(POINT_DIR "${LIB_DIR}/point")
add_library(${POINT_LIB} "${POINT_DIR}/Point.cpp")
target_link_libraries(${PROJECT_NAME} ${POINT_LIB})
target_include_directories(${PROJECT_NAME} PRIVATE ${POINT_DIR})


# Canvas
set(CANVAS_LIB "canvas_lib")
add_library(${CANVAS_LIB} Canvas/Canvas.cpp Canvas/Canvas.h)

target_include_directories(${CANVAS_LIB} PRIVATE ${POINT_DIR})
target_include_directories(${CANVAS_LIB} PRIVATE "${GLAD_DIR}/include")
target_include_directories(${CANVAS_LIB} PRIVATE "${CMAKE_CURRENT_SOURCE_DIR}/learnopengl")

target_link_libraries(${PROJECT_NAME} ${CANVAS_LIB})
target_include_directories(${PROJECT_NAME} PRIVATE "Canvas/")


if(${CUDA_FOUND})
    set(GENERATE_CANVAS_LIB "generate_canvas_lib_cuda")

    cuda_add_library(${GENERATE_CANVAS_LIB} STATIC Canvas/gpu/CalculateCanvas.cu Canvas/gpu/CalculateCanvas.h)
    target_compile_features(${GENERATE_CANVAS_LIB} PUBLIC cxx_std_11)
    set_target_properties(${GENERATE_CANVAS_LIB} PROPERTIES CUDA_SEPARABLE_COMPILATION ON)

    target_include_directories(${CANVAS_LIB} PRIVATE "Canvas/gpu")
else()
    set(GENERATE_CANVAS_LIB "generate_canvas_lib")

    add_library(${GENERATE_CANVAS_LIB} Canvas/cpu/CalculateCanvas.cpp Canvas/cpu/CalculateCanvas.h)
    target_compile_features(${GENERATE_CANVAS_LIB} PUBLIC cxx_std_11)

    target_include_directories(${CANVAS_LIB} PRIVATE "Canvas/cpu")
endif()

target_include_directories(${GENERATE_CANVAS_LIB} PRIVATE ${POINT_DIR})

target_link_libraries(${CANVAS_LIB} ${GENERATE_CANVAS_LIB})