|
| 1 | +cmake_minimum_required(VERSION 3.0.0) |
| 2 | + |
| 3 | +#on OSX we have to explicitly set clang/clang++ |
| 4 | +#set (CMAKE_C_COMPILER clang) |
| 5 | +#set (CMAKE_CXX_COMPILER clang++) |
| 6 | + |
| 7 | +project(Project4-Rasterizer) |
| 8 | + |
| 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) |
| 17 | +if(${CMAKE_SYSTEM_NAME} MATCHES "Darwin") |
| 18 | + set(CMAKE_LIBRARY_PATH ${CMAKE_LIBRARY_PATH} ${EXTERNAL}/lib/osx) |
| 19 | +elseif(${CMAKE_SYSTEM_NAME} MATCHES "Linux") |
| 20 | + set(CMAKE_LIBRARY_PATH ${CMAKE_LIBRARY_PATH} ${EXTERNAL}/lib/linux /usr/lib64) |
| 21 | +elseif(WIN32) |
| 22 | + set(CMAKE_LIBRARY_PATH ${CMAKE_LIBRARY_PATH} ${EXTERNAL}/lib/win) |
| 23 | +endif() |
| 24 | + |
| 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 | + |
| 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) |
| 34 | +find_package(GLEW) |
| 35 | + |
| 36 | +set(CORELIBS ${GLFW_LIBRARY} ${GLUT_LIBRARY} ${OPENGL_LIBRARY} ${GLEW_LIBRARY}) |
| 37 | + |
| 38 | +#OSX-specific hacks/fixes |
| 39 | +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") |
| 51 | +endif() |
| 52 | + |
| 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}") |
| 58 | +endif() |
| 59 | + |
| 60 | +#Crucial magic for CUDA linking |
| 61 | +find_package(CUDA REQUIRED) |
| 62 | +set(CUDA_ATTACH_VS_BUILD_RULE_TO_CUDA_FILE ON) |
| 63 | + |
| 64 | +set(CUDA_SEPARABLE_COMPILATION ON) |
| 65 | + |
| 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}) |
0 commit comments