|
1
|
1 cmake_minimum_required(VERSION 3.10)
|
|
|
2
|
|
|
3 project(foosdk)
|
|
|
4
|
|
|
5 if(NOT WIN32)
|
|
|
6 message(FATAL_ERROR "This project requires WIN32 target.")
|
|
|
7 endif()
|
|
|
8
|
|
|
9 option(FOO_PPUI "Include libPPUI (adds usage of ATL/WTL)" ON)
|
|
|
10 option(FOO_SDK_HELPERS "Include SDK helpers (requires FOO_PPUI)" ON)
|
|
|
11 option(FOO_STATIC_STDLIB "Use static standard libraries" OFF)
|
|
|
12 option(FOO_SYSTEM_WTL "Use system WTL library" OFF)
|
|
|
13 option(FOO_SAMPLE "Build foo_sample component" OFF)
|
|
|
14
|
|
|
15 set(CMAKE_MODULE_PATH "${CMAKE_CURRENT_SOURCE_DIR}/cmake;${CMAKE_MODULE_PATH}")
|
|
|
16 set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /MP /wd4302 /wd4838 /wd4996 /d2notypeopt")
|
|
|
17
|
|
|
18 if(FOO_STATIC_STDLIB)
|
|
|
19 foreach(FLAGS CMAKE_CXX_FLAGS_DEBUG
|
|
|
20 CMAKE_CXX_FLAGS_RELEASE
|
|
|
21 CMAKE_CXX_FLAGS_MINSIZEREL
|
|
|
22 CMAKE_CXX_FLAGS_RELWITHDEBINFO)
|
|
|
23 string(REPLACE "/MD" "/MT" ${FLAGS} "${${FLAGS}}")
|
|
|
24 endforeach()
|
|
|
25 endif()
|
|
|
26
|
|
|
27 set(CMAKE_CXX_STANDARD 17)
|
|
|
28 set(WINVER 0x0601)
|
|
|
29
|
|
|
30 add_definitions(
|
|
|
31 -D_UNICODE -DUNICODE -DSTRICT -DWINVER=${WINVER} -D_WIN32_WINNT=${WINVER}
|
|
|
32 )
|
|
|
33
|
|
|
34 set(INCLUDE_WTL OFF)
|
|
|
35
|
|
|
36 if(FOO_PPUI)
|
|
|
37 if(FOO_SYSTEM_WTL)
|
|
|
38 find_package(Wtl REQUIRED)
|
|
|
39 target_include_directories(${WTL_INCLUDE_DIRS})
|
|
|
40 else()
|
|
|
41 set(WTL_INCLUDE_DIRS "wtl/Include")
|
|
|
42 set(INCLUDE_WTL ON)
|
|
|
43 endif()
|
|
|
44 endif()
|
|
|
45
|
|
|
46 function(option_dependency_check OPT1 OPT2)
|
|
|
47 if(${OPT1})
|
|
|
48 if(NOT ${OPT2})
|
|
|
49 message(SEND_ERROR "Option ${OPT1} requires option ${OPT2}")
|
|
|
50 endif()
|
|
|
51 endif()
|
|
|
52 endfunction()
|
|
|
53
|
|
|
54 option_dependency_check(FOO_SDK_HELPERS FOO_PPUI)
|
|
|
55 option_dependency_check(FOO_SAMPLE FOO_SDK_HELPERS)
|
|
|
56
|
|
|
57 include(FileLists)
|
|
|
58
|
|
|
59 if("${CMAKE_SIZEOF_VOID_P}" STREQUAL "8")
|
|
|
60 set(SHARED_LIBRARY sdk/foobar2000/shared/shared-x64.lib)
|
|
|
61 else()
|
|
|
62 set(SHARED_LIBRARY sdk/foobar2000/shared/shared-Win32.lib)
|
|
|
63 endif()
|
|
|
64
|
|
|
65 set(
|
|
|
66 LIB_SOURCES
|
|
|
67 ${PFC_SOURCES} ${PFC_HEADERS}
|
|
|
68 ${SDK_SOURCES} ${SDK_HEADERS}
|
|
|
69 ${COMPONENT_CLIENT_SOURCES}
|
|
|
70 )
|
|
|
71
|
|
|
72 if(INCLUDE_WTL)
|
|
|
73 set(LIB_SOURCES ${LIB_SOURCES} ${WTL_HEADERS})
|
|
|
74 endif()
|
|
|
75
|
|
|
76 if(FOO_SDK_HELPERS)
|
|
|
77 set(LIB_SOURCES ${LIB_SOURCES} ${SDK_HELPERS_SOURCES} ${SDK_HELPERS_HEADERS})
|
|
|
78 endif()
|
|
|
79
|
|
|
80 if(FOO_PPUI)
|
|
|
81 set(LIB_SOURCES ${LIB_SOURCES} ${PPUI_SOURCES} ${PPUI_HEADERS})
|
|
|
82 endif()
|
|
|
83
|
|
|
84 add_library(foosdk STATIC ${LIB_SOURCES})
|
|
|
85
|
|
|
86 target_include_directories(foosdk PUBLIC sdk)
|
|
|
87 target_include_directories(foosdk PUBLIC sdk/foobar2000)
|
|
|
88 target_include_directories(foosdk PUBLIC ${WTL_INCLUDE_DIRS})
|
|
|
89 target_link_libraries(foosdk PUBLIC "${CMAKE_CURRENT_SOURCE_DIR}/${SHARED_LIBRARY}")
|
|
|
90
|
|
|
91 if(FOO_SAMPLE)
|
|
|
92 add_library(foo_sample MODULE ${SAMPLE_SOURCES} ${SAMPLE_HEADERS})
|
|
|
93 target_link_libraries(foo_sample foosdk)
|
|
|
94 endif()
|
|
|
95
|
|
|
96 install(TARGETS foosdk ARCHIVE DESTINATION lib)
|
|
|
97 install(FILES "${CMAKE_CURRENT_SOURCE_DIR}/${SHARED_LIBRARY}" DESTINATION lib)
|
|
|
98
|
|
|
99 install(FILES ${SHARED_HEADERS} DESTINATION include/foobar2000/shared)
|
|
|
100 install(FILES ${PFC_HEADERS} DESTINATION include/pfc)
|
|
|
101 install(FILES ${SDK_HEADERS} DESTINATION include/foobar2000/SDK)
|
|
|
102
|
|
|
103 if(INCLUDE_WTL)
|
|
|
104 install(FILES ${WTL_HEADERS} DESTINATION include)
|
|
|
105 endif()
|
|
|
106
|
|
|
107 if(FOO_SDK_HELPERS)
|
|
|
108 install(FILES ${SDK_HELPERS_HEADERS} DESTINATION include/foobar2000/helpers)
|
|
|
109 endif()
|
|
|
110
|
|
|
111 if(FOO_PPUI)
|
|
|
112 install(FILES ${PPUI_HEADERS} DESTINATION include/libPPUI)
|
|
|
113 endif()
|