summaryrefslogtreecommitdiff
path: root/CMakeLists.txt
blob: af75a5b5068b4b99f325058a5d4f269a6547c601 (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
87
88
89
90
91
92
93
94
cmake_minimum_required(VERSION 3.0)
if(${CMAKE_VERSION} VERSION_GREATER_EQUAL "3.15")
    # this is for MSVC_RUNTIME_LIBRARY property below
    cmake_policy(SET CMP0091 NEW)
endif()
project(vdagent-win)

if(MSVC)
    if(${CMAKE_VERSION} VERSION_LESS "3.15")
        # compile MSVCRT into executable (link it statically)
        foreach(flag_var
            CMAKE_CXX_FLAGS CMAKE_CXX_FLAGS_DEBUG CMAKE_CXX_FLAGS_RELEASE
            CMAKE_CXX_FLAGS_MINSIZEREL CMAKE_CXX_FLAGS_RELWITHDEBINFO)
            if(${flag_var} MATCHES "/MD")
                string(REGEX REPLACE "/MD" "/MT" ${flag_var} "${${flag_var}}")
            endif(${flag_var} MATCHES "/MD")
        endforeach(flag_var)
    endif()

    # generate PDB files
    # see https://stackoverflow.com/questions/28178978/how-to-generate-pdb-files-for-release-build-with-cmake-flags/31264946
    set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} /Zi")
    set(CMAKE_EXE_LINKER_FLAGS_RELEASE "${CMAKE_EXE_LINKER_FLAGS_RELEASE} /DEBUG /OPT:REF /OPT:ICF" CACHE STRING "" FORCE)

    # find using vcpkg packages
    find_package(libpng CONFIG REQUIRED)
    find_path(PNG_INCLUDE_DIR NAMES png.h)

    set(PNG_LIBRARY png_static)
    set(ZLIB_LIBRARY)
    set(COMMSUPPW_LIBRARY comsuppw)
else(MSVC)
    set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -static -s")

    find_package(PNG REQUIRED)
    set(COMMSUPPW_LIBRARY)
endif(MSVC)

include_directories(common . spice-protocol ${PNG_INCLUDE_DIR})
add_definitions(-DUNICODE -D_UNICODE -DOLDMSVCRT -DWINVER=0x0601)

add_executable(vdagent WIN32
    common/vdcommon.cpp
    common/vdcommon.h
    common/vdlog.cpp
    common/vdlog.h
    vdagent/display_configuration.cpp
    vdagent/display_configuration.h
    vdagent/desktop_layout.cpp
    vdagent/desktop_layout.h
    vdagent/display_setting.cpp
    vdagent/display_setting.h
    vdagent/file_xfer.cpp
    vdagent/file_xfer.h
    vdagent/vdagent.cpp
    vdagent/as_user.cpp
    vdagent/as_user.h
    vdagent/image.cpp
    vdagent/image.h
    vdagent/imagepng.cpp
    vdagent/imagepng.h
    vdagent/shell.cpp
    vdagent/shell.h
    vdagent/vdagent.rc
)
target_link_libraries(vdagent
    ${PNG_LIBRARY}
    ${ZLIB_LIBRARY}
    wtsapi32
    uuid
    ole32
    oleaut32
    ${COMMSUPPW_LIBRARY}
)

add_executable(vdservice
    common/stdint.h
    common/vdcommon.cpp
    common/vdcommon.h
    common/vdlog.cpp
    common/vdlog.h
    vdservice/vdservice.cpp
    vdservice/vdservice.rc
)
target_link_libraries(vdservice
    wtsapi32
)

if(MSVC)
    # select static CRT without debugging (/MT option)
    if(${CMAKE_VERSION} VERSION_GREATER_EQUAL "3.15")
        set_property(TARGET vdagent vdservice PROPERTY MSVC_RUNTIME_LIBRARY "MultiThreaded")
    endif()
endif()