|
1 |
| -cmake_minimum_required(VERSION 3.0.0) |
| 1 | +cmake_minimum_required(VERSION 3.0) |
2 | 2 |
|
3 |
| -#on OSX we have to explicitly set clang/clang++ |
4 |
| -#set (CMAKE_C_COMPILER clang) |
5 |
| -#set (CMAKE_CXX_COMPILER clang++) |
| 3 | +project(cis565_rasterizer) |
6 | 4 |
|
7 |
| -project(Project4-Rasterizer) |
| 5 | +set(CMAKE_MODULE_PATH "${CMAKE_SOURCE_DIR}/cmake" ${CMAKE_MODULE_PATH}) |
8 | 6 |
|
9 |
| -set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} "${CMAKE_SOURCE_DIR}/cmake") |
10 |
| - |
11 |
| -#External libs location (alternatively, /usr/local or something) |
12 |
| -set(EXTERNAL "external") |
13 |
| - |
14 |
| -#Set up include and lib paths |
15 |
| -include_directories(${EXTERNAL}/include) |
16 |
| -include_directories(${EXTERNAL}/src) |
| 7 | +# Set up include and lib paths |
| 8 | +include_directories(.) |
| 9 | +include_directories("external") |
| 10 | +include_directories("external/include") |
17 | 11 | if(${CMAKE_SYSTEM_NAME} MATCHES "Darwin")
|
18 |
| - set(CMAKE_LIBRARY_PATH ${CMAKE_LIBRARY_PATH} ${EXTERNAL}/lib/osx) |
| 12 | + set(EXTERNAL_LIB_PATH "external/lib/osx") |
19 | 13 | elseif(${CMAKE_SYSTEM_NAME} MATCHES "Linux")
|
20 |
| - set(CMAKE_LIBRARY_PATH ${CMAKE_LIBRARY_PATH} ${EXTERNAL}/lib/linux /usr/lib64) |
| 14 | + set(EXTERNAL_LIB_PATH "external/lib/linux" "/usr/lib64") |
21 | 15 | elseif(WIN32)
|
22 |
| - set(CMAKE_LIBRARY_PATH ${CMAKE_LIBRARY_PATH} ${EXTERNAL}/lib/win) |
| 16 | + set(EXTERNAL_LIB_PATH "external/lib/win") |
23 | 17 | endif()
|
| 18 | +link_directories(${EXTERNAL_LIB_PATH}) |
| 19 | +list(APPEND CMAKE_LIBRARY_PATH "${EXTERNAL_LIB_PATH}") |
24 | 20 |
|
25 |
| -set(GLFW_INCLUDE_DIR ${EXTERNAL}/include) |
26 |
| -set(GLFW_LIBRARY_DIR ${CMAKE_LIBRARY_PATH}) |
27 |
| -set(GLEW_INCLUDE_DIR ${EXTERNAL}/include) |
28 |
| -set(GLEW_LIBRARY_DIR ${CMAKE_LIBRARY_PATH}) |
29 | 21 |
|
30 |
| -#Find up and set up core dependency libs |
31 |
| -find_library(GLFW_LIBRARY "glfw3" HINTS ${GLFW_LIBRARY_DIR}) |
32 |
| -find_package(GLUT) |
33 |
| -find_package(OpenGL) |
| 22 | +# Find up and set up core dependency libs |
| 23 | + |
| 24 | +set(GLFW_INCLUDE_DIR "external/include") |
| 25 | +set(GLFW_LIBRARY_DIR "${CMAKE_LIBRARY_PATH}") |
| 26 | +find_library(GLFW_LIBRARY "glfw3" HINTS "${GLFW_LIBRARY_DIR}") |
| 27 | + |
| 28 | +set(GLEW_INCLUDE_DIR "external/include") |
| 29 | +set(GLEW_LIBRARY_DIR "${CMAKE_LIBRARY_PATH}") |
| 30 | +add_definitions(-DGLEW_STATIC) |
34 | 31 | find_package(GLEW)
|
35 | 32 |
|
36 |
| -set(CORELIBS ${GLFW_LIBRARY} ${GLUT_LIBRARY} ${OPENGL_LIBRARY} ${GLEW_LIBRARY}) |
| 33 | +find_package(OpenGL) |
37 | 34 |
|
38 |
| -#OSX-specific hacks/fixes |
| 35 | +set(CORELIBS |
| 36 | + "${GLFW_LIBRARY}" |
| 37 | + "${OPENGL_LIBRARY}" |
| 38 | + "${GLEW_LIBRARY}" |
| 39 | + ) |
| 40 | + |
| 41 | +# Enable C++11 for host code |
| 42 | +set(CMAKE_CXX_STANDARD 11) |
| 43 | + |
| 44 | +# Set up different build configurations |
| 45 | +set(CMAKE_CONFIGURATION_TYPES Debug DebugFast Release) |
| 46 | +set(CUDA_PROPAGATE_HOST_FLAGS OFF) |
| 47 | +set(CMAKE_CXX_FLAGS_DEBUG "-O0 -g") |
| 48 | +set(CMAKE_CXX_FLAGS_DEBUGFAST "-O2 -g") |
| 49 | +set(CMAKE_CXX_FLAGS_RELEASE "-O3 -DNDEBUG") |
| 50 | +list(APPEND CUDA_NVCC_FLAGS_DEBUG -O0 -G -g) |
| 51 | +list(APPEND CUDA_NVCC_FLAGS_DEBUGFAST -O2 -g -lineinfo) |
| 52 | +list(APPEND CUDA_NVCC_FLAGS_RELEASE -O3) |
| 53 | + |
| 54 | +# OS X linker options |
39 | 55 | if(${CMAKE_SYSTEM_NAME} MATCHES "Darwin")
|
40 |
| - #Link IOKit because this is where we get GL stuff for OSX |
41 |
| - set(IOKIT "-framework IOKit") |
42 |
| - set(CORELIBS ${CORELIBS} ${IOKIT}) |
43 |
| - #Link against libstdc++ since CUDA doesn't support libc++ yet |
44 |
| - set(CUDA_NVCC_FLAGS "--compiler-options;-stdlib=libstdc++;") |
45 |
| - set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -stdlib=libstdc++") |
46 |
| -endif(${CMAKE_SYSTEM_NAME} MATCHES "Darwin") |
47 |
| - |
48 |
| -#Linux specific hacks/fixes |
49 |
| -if(${CMAKE_SYSTEM_NAME} MATCHES "Linux") |
50 |
| - set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -lX11 -lXxf86vm -lXrandr -lpthread -lXi") |
| 56 | + list(APPEND CORELIBS "-framework IOKit") |
| 57 | + list(APPEND CORELIBS "-framework Cocoa") |
| 58 | + list(APPEND CORELIBS "-framework CoreVideo") |
51 | 59 | endif()
|
52 | 60 |
|
53 |
| -#Compiler flag magic |
54 |
| -if(${CMAKE_SYSTEM_NAME} MATCHES "Linux" OR ${CMAKE_SYSTEM_NAME} MATCHES "Darwin") |
55 |
| - set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -O3 -m64 -msse2") |
56 |
| -elseif(WIN32) |
57 |
| - set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS}") |
| 61 | +# Linux linker options |
| 62 | +if(${CMAKE_SYSTEM_NAME} MATCHES "Linux") |
| 63 | + list(APPEND CMAKE_EXE_LINKER_FLAGS "-lX11 -lXxf86vm -lXrandr -lXi") |
58 | 64 | endif()
|
59 | 65 |
|
60 |
| -#Crucial magic for CUDA linking |
| 66 | +# CUDA linker options |
| 67 | +find_package(Threads REQUIRED) |
61 | 68 | find_package(CUDA REQUIRED)
|
62 | 69 | set(CUDA_ATTACH_VS_BUILD_RULE_TO_CUDA_FILE ON)
|
63 |
| - |
64 | 70 | set(CUDA_SEPARABLE_COMPILATION ON)
|
65 | 71 |
|
66 |
| -#Make NVCC run silently |
67 |
| -if(${CMAKE_SYSTEM_NAME} MATCHES "Linux" OR ${CMAKE_SYSTEM_NAME} MATCHES "Darwin") |
68 |
| - set(CUDA_NVCC_FLAGS "${CUDA_NVCC_FLAGS}-w;") |
69 |
| -endif() |
70 |
| - |
71 |
| -#Force Visual Studio to link against MT versions of libs |
72 |
| -if(MSVC) |
73 |
| - set(CompilerFlags |
74 |
| - CMAKE_CXX_FLAGS |
75 |
| - CMAKE_CXX_FLAGS_DEBUG |
76 |
| - CMAKE_CXX_FLAGS_RELEASE |
77 |
| - CMAKE_C_FLAGS |
78 |
| - CMAKE_C_FLAGS_DEBUG |
79 |
| - CMAKE_C_FLAGS_RELEASE |
80 |
| - ) |
81 |
| - foreach(CompilerFlag ${CompilerFlags}) |
82 |
| - string(REPLACE "/MD" "/MT" ${CompilerFlag} "${${CompilerFlag}}") |
83 |
| - endforeach() |
84 |
| - set(CUDA_NVCC_FLAGS_RELEASE ${CUDA_NVCC_FLAGS_RELEASE} "--compiler-options /MT; --linker-options /MT") |
85 |
| - set(CUDA_NVCC_FLAGS_DEBUG ${CUDA_NVCC_FLAGS_DEBUG} "--compiler-options /MT; --linker-options /MT") |
86 |
| -endif() |
87 |
| - |
88 |
| -#Add all source files. Headers don't need to be listed here since the compiler will find them; |
89 |
| -#we just need the actual files being fed directly to the compiler |
90 |
| -set(SOURCE_FILES "src/main.cpp") |
91 |
| -set(SOURCE_FILES ${SOURCE_FILES} "src/rasterizeKernels.cu") |
92 |
| -set(SOURCE_FILES ${SOURCE_FILES} "src/utilities.cpp") |
93 |
| -set(SOURCE_FILES ${SOURCE_FILES} "${EXTERNAL}/src/glslUtil/glslUtility.cpp") |
94 |
| -set(SOURCE_FILES ${SOURCE_FILES} "${EXTERNAL}/src/objUtil/obj.cpp") |
95 |
| -set(SOURCE_FILES ${SOURCE_FILES} "${EXTERNAL}/src/objUtil/objloader.cpp") |
96 |
| - |
97 |
| -cuda_add_executable(Project4-Rasterizer ${SOURCE_FILES} OPTIONS -arch=sm_20) |
98 |
| - |
99 |
| -target_link_libraries(Project4-Rasterizer ${CORELIBS}) |
| 72 | +#add_subdirectory(stream_compaction) # TODO: uncomment if using your own stream compaction |
| 73 | +add_subdirectory(src) |
| 74 | +add_subdirectory(util) |
| 75 | + |
| 76 | +cuda_add_executable(${CMAKE_PROJECT_NAME} |
| 77 | + "src/main.h" |
| 78 | + "src/main.cpp" |
| 79 | + ) |
| 80 | + |
| 81 | +target_link_libraries(${CMAKE_PROJECT_NAME} |
| 82 | + src |
| 83 | + util |
| 84 | + #stream_compaction # TODO: uncomment if using your own stream compaction |
| 85 | + ${CORELIBS} |
| 86 | + ) |
| 87 | + |
| 88 | +add_custom_command( |
| 89 | + TARGET ${CMAKE_PROJECT_NAME} |
| 90 | + POST_BUILD |
| 91 | + COMMAND ${CMAKE_COMMAND} -E copy_directory |
| 92 | + ${CMAKE_SOURCE_DIR}/shaders |
| 93 | + ${CMAKE_BINARY_DIR}/shaders |
| 94 | + ) |
0 commit comments