From 1129aa6dfd2962d1a99d3a4e8e85e12ee85f99d1 Mon Sep 17 00:00:00 2001 From: loki Date: Wed, 1 Jan 2020 18:47:34 +0100 Subject: [PATCH] Compile on Windows --- CMakeLists.txt | 88 +++++++++++++++++++------------------------- FindFFmpeg.cmake | 6 +-- assets/sunshine.conf | 2 +- sunshine/main.cpp | 3 +- sunshine/nvhttp.cpp | 3 +- sunshine/process.cpp | 5 ++- sunshine/process.h | 4 ++ sunshine/stream.cpp | 4 +- sunshine/utility.h | 3 +- 9 files changed, 57 insertions(+), 61 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 8ffdac58..e8f27e50 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -4,62 +4,50 @@ project(Sunshine) # set up include-directories set(CMAKE_MODULE_PATH ${CMAKE_CURRENT_SOURCE_DIR}) + +find_package(Threads REQUIRED) +find_package(OpenSSL REQUIRED) +find_package(FFMpeg REQUIRED) +find_package(Boost COMPONENTS filesystem REQUIRED) + 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) - +if(WIN32) + set(PLATFORM_TARGET_FILES + sunshine/platform/windows.cpp) + set(PLATFORM_LIBRARIES + winmm + wsock32 + ws2_32) +else() + 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) +endif() 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 @@ -98,14 +86,11 @@ include_directories( ${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) + #list(APPEND SUNSHINE_COMPILE_OPTIONS -O0 -pedantic -ggdb3) + list(APPEND SUNSHINE_COMPILE_OPTIONS -O0) else() add_definitions(-DNDEBUG) list(APPEND SUNSHINE_COMPILE_OPTIONS -O3) @@ -117,6 +102,7 @@ list(APPEND SUNSHINE_EXTERNAL_LIBRARIES enet opus ${FFMPEG_LIBRARIES} + ${Boost_LIBRARIES} ${PLATFORM_LIBRARIES}) add_definitions(-DSUNSHINE_ASSETS_DIR="${CMAKE_CURRENT_SOURCE_DIR}/assets") diff --git a/FindFFmpeg.cmake b/FindFFmpeg.cmake index 25070e40..515d23ea 100644 --- a/FindFFmpeg.cmake +++ b/FindFFmpeg.cmake @@ -56,7 +56,7 @@ MACRO(FFMPEG_FIND varname shortname headername) ELSE() MESSAGE(STATUS "Found ${shortname} include dirs: ${${varname}_INCLUDE_DIR}") -# GET_DIRECTORY_PROPERTY(FFMPEG_PARENT DIRECTORY ${${varname}_INCLUDE_DIR} PARENT_DIRECTORY) + #GET_DIRECTORY_PROPERTY(FFMPEG_PARENT DIRECTORY ${${varname}_INCLUDE_DIR} PARENT_DIRECTORY) GET_FILENAME_COMPONENT(FFMPEG_PARENT ${${varname}_INCLUDE_DIR} PATH) MESSAGE(STATUS "Using FFMpeg dir parent as hint: ${FFMPEG_PARENT}") @@ -64,8 +64,8 @@ MACRO(FFMPEG_FIND varname shortname headername) FIND_LIBRARY(${varname}_LIBRARIES NAMES ${shortname} HINTS ${PC_${varname}_LIBDIR} ${PC_${varname}_LIBRARY_DIR} ${FFMPEG_PARENT}) ELSE() -# FIND_PATH(${varname}_LIBRARIES "${shortname}.dll.a" HINTS ${FFMPEG_PARENT}) - FILE(GLOB_RECURSE ${varname}_LIBRARIES "${FFMPEG_PARENT}/*${shortname}.lib") + FIND_PATH(${varname}_LIBRARIES "${shortname}.dll.a" HINTS ${FFMPEG_PARENT}) + # FILE(GLOB_RECURSE ${varname}_LIBRARIES "${FFMPEG_PARENT}/*${shortname}.lib") # GLOBing is very bad... but windows sux, this is the only thing that works ENDIF() diff --git a/assets/sunshine.conf b/assets/sunshine.conf index b5a0764e..ecc500fa 100644 --- a/assets/sunshine.conf +++ b/assets/sunshine.conf @@ -8,7 +8,7 @@ # cert = /dir/cert.pem # The name displayed by Moonlight -# sunshine_name = sunshine +sunshine_name = Sunshine # The origin of the remote endpoint address that is not denied for HTTP method /pin # Could be any of the following values: diff --git a/sunshine/main.cpp b/sunshine/main.cpp index b3e533ff..43d70344 100644 --- a/sunshine/main.cpp +++ b/sunshine/main.cpp @@ -2,6 +2,8 @@ // Created by loki on 5/30/19. // +#include "process.h" + #include #include #include @@ -9,7 +11,6 @@ #include "nvhttp.h" #include "stream.h" #include "config.h" -#include "process.h" #include "thread_pool.h" extern "C" { diff --git a/sunshine/nvhttp.cpp b/sunshine/nvhttp.cpp index 23c0e335..9017ce02 100644 --- a/sunshine/nvhttp.cpp +++ b/sunshine/nvhttp.cpp @@ -2,6 +2,8 @@ // Created by loki on 6/3/19. // +#include "process.h" + #include #include @@ -21,7 +23,6 @@ #include "stream.h" #include "nvhttp.h" #include "platform/common.h" -#include "process.h" #include "network.h" diff --git a/sunshine/process.cpp b/sunshine/process.cpp index a2a2b8bd..bd7633ac 100644 --- a/sunshine/process.cpp +++ b/sunshine/process.cpp @@ -2,6 +2,8 @@ // Created by loki on 12/14/19. // +#include "process.h" + #include #include #include @@ -9,7 +11,6 @@ #include #include -#include "process.h" #include "config.h" #include "utility.h" #include "platform/common.h" @@ -295,4 +296,4 @@ void refresh(const std::string &file_name) { proc = std::move(*proc_opt); } } -} \ No newline at end of file +} diff --git a/sunshine/process.h b/sunshine/process.h index 1c4e11da..0ee9cbe5 100644 --- a/sunshine/process.h +++ b/sunshine/process.h @@ -5,6 +5,10 @@ #ifndef SUNSHINE_PROCESS_H #define SUNSHINE_PROCESS_H +#ifndef __kernel_entry +#define __kernel_entry +#endif + #include #include diff --git a/sunshine/stream.cpp b/sunshine/stream.cpp index fc66143e..6042612b 100644 --- a/sunshine/stream.cpp +++ b/sunshine/stream.cpp @@ -1,6 +1,9 @@ // // Created by loki on 6/5/19. // + +#include "process.h" + #include #if ((BOOST_VERSION / 1000) >= 107) #define EXECUTOR(x) (x->get_executor()) @@ -32,7 +35,6 @@ extern "C" { #include "thread_safe.h" #include "crypto.h" #include "input.h" -#include "process.h" #define IDX_START_A 0 #define IDX_REQUEST_IDR_FRAME 0 diff --git a/sunshine/utility.h b/sunshine/utility.h index f74338a7..8c654bd2 100644 --- a/sunshine/utility.h +++ b/sunshine/utility.h @@ -568,7 +568,8 @@ struct endianness { defined(__ARMEB__) || \ defined(__THUMBEB__) || \ defined(__AARCH64EB__) || \ - defined(_MIBSEB) || defined(__MIBSEB) || defined(__MIBSEB__) + defined(_MIBSEB) || defined(__MIBSEB) || defined(__MIBSEB__) || \ + defined(WIN32) // It's a big-endian target architecture little = false, #elif defined(__BYTE_ORDER) && __BYTE_ORDER == __LITTLE_ENDIAN || \