cmake_minimum_required(VERSION 2.8) project(Sunshine) # set up include-directories set(CMAKE_MODULE_PATH ${CMAKE_CURRENT_SOURCE_DIR}) add_subdirectory(Simple-Web-Server) add_subdirectory(moonlight-common-c/enet) find_package(X11 REQUIRED) set(PLATFORM_TARGET_FILES sunshine/platform/linux.cpp sunshine/platform/linux_evdev.cpp) set(PLATFORM_LIBRARIES Xfixes Xtst xcb xcb-shm xcb-xfixes ${X11_LIBRARIES} evdev pulse pulse-simple) set(PLATFORM_INCLUDE_DIRS ${X11_INCLUDE_DIR} /usr/include/libevdev-1.0) set(SUNSHINE_TARGET_FILES moonlight-common-c/reedsolomon/rs.c moonlight-common-c/reedsolomon/rs.h moonlight-common-c/src/AudioStream.c moonlight-common-c/src/ByteBuffer.c moonlight-common-c/src/ByteBuffer.h moonlight-common-c/src/Connection.c moonlight-common-c/src/ControlStream.c moonlight-common-c/src/FakeCallbacks.c moonlight-common-c/src/Input.h moonlight-common-c/src/InputStream.c moonlight-common-c/src/Limelight.h moonlight-common-c/src/Limelight-internal.h moonlight-common-c/src/LinkedBlockingQueue.c moonlight-common-c/src/LinkedBlockingQueue.h moonlight-common-c/src/Misc.c moonlight-common-c/src/Platform.c moonlight-common-c/src/Platform.h moonlight-common-c/src/PlatformSockets.c moonlight-common-c/src/PlatformSockets.h moonlight-common-c/src/PlatformThreads.h moonlight-common-c/src/RtpFecQueue.c moonlight-common-c/src/RtpFecQueue.h moonlight-common-c/src/RtpReorderQueue.c moonlight-common-c/src/RtpReorderQueue.h moonlight-common-c/src/RtspConnection.c moonlight-common-c/src/Rtsp.h moonlight-common-c/src/RtspParser.c moonlight-common-c/src/SdpGenerator.c moonlight-common-c/src/SimpleStun.c moonlight-common-c/src/VideoDepacketizer.c moonlight-common-c/src/Video.h moonlight-common-c/src/VideoStream.c sunshine/utility.h sunshine/uuid.h sunshine/config.h sunshine/config.cpp sunshine/main.cpp sunshine/main.h sunshine/crypto.cpp sunshine/crypto.h sunshine/nvhttp.cpp sunshine/nvhttp.h sunshine/stream.cpp sunshine/stream.h sunshine/video.cpp sunshine/video.h sunshine/thread_safe.h sunshine/input.cpp sunshine/input.h sunshine/audio.cpp sunshine/audio.h sunshine/platform/common.h sunshine/process.cpp sunshine/process.h sunshine/network.cpp sunshine/network.h sunshine/move_by_copy.h sunshine/task_pool.h sunshine/thread_pool.h ${PLATFORM_TARGET_FILES}) include_directories( ${CMAKE_CURRENT_SOURCE_DIR} ${CMAKE_CURRENT_SOURCE_DIR}/Simple-Web-Server ${CMAKE_CURRENT_SOURCE_DIR}/moonlight-common-c/enet/include ${CMAKE_CURRENT_SOURCE_DIR}/moonlight-common-c/reedsolomon ${FFMPEG_INCLUDE_DIRS} ${PLATFORM_INCLUDE_DIRS} ) find_package(Threads REQUIRED) find_package(OpenSSL REQUIRED) find_package(FFmpeg REQUIRED) list(APPEND SUNSHINE_COMPILE_OPTIONS -fPIC -Wall -Wno-missing-braces -Wno-maybe-uninitialized -Wno-sign-compare) string(TOUPPER ${CMAKE_BUILD_TYPE} BUILD_TYPE) if("x${BUILD_TYPE}" STREQUAL "xDEBUG") list(APPEND SUNSHINE_COMPILE_OPTIONS -O0 -pedantic -ggdb3) else() add_definitions(-DNDEBUG) list(APPEND SUNSHINE_COMPILE_OPTIONS -O3) endif() list(APPEND SUNSHINE_EXTERNAL_LIBRARIES ${CMAKE_THREAD_LIBS_INIT} ${OPENSSL_LIBRARIES} enet opus ${FFMPEG_LIBRARIES} ${PLATFORM_LIBRARIES}) add_definitions(-DSUNSHINE_ASSETS_DIR="${CMAKE_CURRENT_SOURCE_DIR}/assets") add_executable(sunshine ${SUNSHINE_TARGET_FILES}) target_link_libraries(sunshine ${SUNSHINE_EXTERNAL_LIBRARIES}) target_compile_definitions(sunshine PUBLIC ${SUNSHINE_DEFINITIONS}) set_target_properties(sunshine PROPERTIES CXX_STANDARD 17) target_compile_options(sunshine PRIVATE ${SUNSHINE_COMPILE_OPTIONS})