Skip to content

Commit a1aeef0

Browse files
committed
Add Windows support
Update CMake to support Windows, add travis Windows builder
1 parent a6fe504 commit a1aeef0

9 files changed

+92
-59
lines changed

.github/build_windows.bat

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
call "C:\Program Files (x86)\Microsoft Visual Studio\2017\BuildTools\VC\Auxiliary\Build\vcvars64.bat"
2+
mkdir build
3+
cd build
4+
cmd.exe /c cmake -G "NMake Makefiles" ..
5+
cmake -G "NMake Makefiles" -DBUILD_TEST=TRUE ..
6+
nmake

.travis.yml

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -114,3 +114,12 @@ matrix:
114114
- mkdir build && cd build
115115
- cmake .. -DBUILD_TEST=TRUE -DBUILD_OPENSSL_PLATFORM=linux-generic32
116116
script: make
117+
118+
- name: "Windows MSVC"
119+
os: windows
120+
script:
121+
- choco install nasm strawberryperl
122+
- unset CC CC_FOR_BUILD CXX CXX_FOR_BUILD # We want to use MSVC
123+
- export "PATH=/c/Strawberry/perl/site/bin:/c/Strawberry/perl/bin:/c/Strawberry/c/bin:/c/Program Files/NASM:`pwd`/open-source/local/lib:`pwd`/open-source/local/bin:$PATH"
124+
- .github/build_windows.bat
125+
- cd build/tst && ./producer_test.exe --gtest_filter="-ProducerFunctionalityTest.stop_sending_frame_in_the_middle_of_streaming_offline_mode*"

CMake/Dependencies/libcurl-CMakeLists.txt

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,11 @@ set(CMAKE_ARGS
1717

1818
# By default use openssl
1919
if (USE_MBEDTLS)
20-
set(CMAKE_ARGS ${CMAKE_ARGS} -DCMAKE_USE_MBEDTLS=1)
20+
set(CMAKE_ARGS ${CMAKE_ARGS} -DCMAKE_USE_MBEDTLS=1 -DCURL_STATIC_CRT=1)
21+
endif()
22+
23+
if (WIN32)
24+
set(CMAKE_ARGS ${CMAKE_ARGS} -DCMAKE_USE_WINSSL=1 -DCURL_STATIC_CRT=1)
2125
endif()
2226

2327
ExternalProject_Add(project_libcurl

CMake/Dependencies/libjsmn-CMakeLists.txt

Lines changed: 3 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -2,20 +2,13 @@ cmake_minimum_required(VERSION 2.8)
22

33
project(libjsmn-download NONE)
44

5-
find_program(MAKE_EXE NAMES make)
6-
75
include(ExternalProject)
86
ExternalProject_Add(project_libjsmn
97
GIT_REPOSITORY https://github.com/zserge/jsmn.git
108
GIT_TAG v1.0.0
119
PREFIX ${CMAKE_CURRENT_BINARY_DIR}/build
12-
CONFIGURE_COMMAND ""
13-
BUILD_COMMAND ${MAKE_EXE} CFLAGS=-fPIC
14-
BUILD_IN_SOURCE TRUE
15-
INSTALL_COMMAND
16-
${CMAKE_COMMAND} -E make_directory ${OPEN_SRC_INSTALL_PREFIX}/lib &&
17-
${CMAKE_COMMAND} -E make_directory ${OPEN_SRC_INSTALL_PREFIX}/include &&
18-
${CMAKE_COMMAND} -E copy ${CMAKE_CURRENT_BINARY_DIR}/build/src/project_libjsmn/libjsmn.a ${OPEN_SRC_INSTALL_PREFIX}/lib &&
19-
${CMAKE_COMMAND} -E copy ${CMAKE_CURRENT_BINARY_DIR}/build/src/project_libjsmn/jsmn.h ${OPEN_SRC_INSTALL_PREFIX}/include
10+
PATCH_COMMAND git apply --ignore-whitespace ${CMAKE_SOURCE_DIR}/../../CMake/Dependencies/libjsmn-add-cmakelists.patch
11+
CMAKE_ARGS -DCMAKE_INSTALL_PREFIX=${OPEN_SRC_INSTALL_PREFIX}
12+
BUILD_ALWAYS TRUE
2013
TEST_COMMAND ""
2114
)
Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
diff --git a/CMakeLists.txt b/CMakeLists.txt
2+
new file mode 100644
3+
index 0000000..f4a1d44
4+
--- /dev/null
5+
+++ b/CMakeLists.txt
6+
@@ -0,0 +1,11 @@
7+
+cmake_minimum_required(VERSION 2.8)
8+
+project(jsmn C)
9+
+
10+
+
11+
+if("${CMAKE_C_COMPILER_ID}" MATCHES "GNU|Clang")
12+
+ set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fPIC")
13+
+endif()
14+
+
15+
+add_library(jsmn STATIC jsmn.h jsmn.c)
16+
+install(TARGETS jsmn DESTINATION lib)
17+
+install(FILES jsmn.h DESTINATION include)

CMake/Dependencies/libopenssl-CMakeLists.txt

Lines changed: 14 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -2,16 +2,20 @@ cmake_minimum_required(VERSION 2.8)
22

33
project(libopenssl-download NONE)
44

5-
find_program(MAKE_EXE NAMES make)
6-
7-
if (BUILD_STATIC)
8-
SET(OPENSSL_EXTRA ${OPENSSL_EXTRA} no-shared no-dso)
9-
endif()
10-
11-
if (DEFINED BUILD_OPENSSL_PLATFORM AND NOT BUILD_OPENSSL_PLATFORM STREQUAL OFF)
12-
SET(CONFIGURE_COMMAND ${CMAKE_CURRENT_BINARY_DIR}/build/src/project_libopenssl/Configure ${OPENSSL_EXTRA} --prefix=${OPEN_SRC_INSTALL_PREFIX} --openssldir=${OPEN_SRC_INSTALL_PREFIX} ${BUILD_OPENSSL_PLATFORM})
5+
if (WIN32)
6+
find_program(MAKE_EXE NAMES nmake)
7+
SET(CONFIGURE_COMMAND perl ${CMAKE_CURRENT_BINARY_DIR}/build/src/project_libopenssl/Configure VC-WIN64A no-asm --prefix=${OPEN_SRC_INSTALL_PREFIX} --openssldir=${OPEN_SRC_INSTALL_PREFIX})
138
else()
14-
SET(CONFIGURE_COMMAND ${CMAKE_CURRENT_BINARY_DIR}/build/src/project_libopenssl/config ${OPENSSL_EXTRA} --prefix=${OPEN_SRC_INSTALL_PREFIX} --openssldir=${OPEN_SRC_INSTALL_PREFIX})
9+
find_program(MAKE_EXE NAMES make)
10+
if (BUILD_STATIC)
11+
SET(OPENSSL_EXTRA ${OPENSSL_EXTRA} no-shared no-dso)
12+
endif()
13+
14+
if (DEFINED BUILD_OPENSSL_PLATFORM AND NOT BUILD_OPENSSL_PLATFORM STREQUAL OFF)
15+
SET(CONFIGURE_COMMAND ${CMAKE_CURRENT_BINARY_DIR}/build/src/project_libopenssl/Configure ${OPENSSL_EXTRA} --prefix=${OPEN_SRC_INSTALL_PREFIX} --openssldir=${OPEN_SRC_INSTALL_PREFIX} ${BUILD_OPENSSL_PLATFORM})
16+
else()
17+
SET(CONFIGURE_COMMAND ${CMAKE_CURRENT_BINARY_DIR}/build/src/project_libopenssl/config ${OPENSSL_EXTRA} --prefix=${OPEN_SRC_INSTALL_PREFIX} --openssldir=${OPEN_SRC_INSTALL_PREFIX})
18+
endif()
1519
endif()
1620

1721
include(ExternalProject)
@@ -20,7 +24,7 @@ ExternalProject_Add(project_libopenssl
2024
GIT_TAG OpenSSL_1_1_0l
2125
PREFIX ${CMAKE_CURRENT_BINARY_DIR}/build
2226
CONFIGURE_COMMAND ${CONFIGURE_COMMAND}
23-
BUILD_COMMAND ${MAKE_EXE} -j 4
27+
BUILD_COMMAND ${MAKE_EXE}
2428
BUILD_IN_SOURCE TRUE
2529
INSTALL_COMMAND ${MAKE_EXE} install_sw
2630
TEST_COMMAND ""

CMakeLists.txt

Lines changed: 27 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -123,17 +123,25 @@ else()
123123
endif()
124124

125125
if(BUILD_COMMON_CURL)
126-
pkg_check_modules(LIBCURL REQUIRED libcurl)
126+
if (OPEN_SRC_INSTALL_PREFIX)
127+
find_package(CURL REQUIRED PATHS ${OPEN_SRC_INSTALL_PREFIX})
128+
else()
129+
find_package(CURL REQUIRED)
130+
endif()
127131

128-
set(OPEN_SRC_INCLUDE_DIRS ${OPEN_SRC_INCLUDE_DIRS} ${LIBCURL_INCLUDE_DIRS})
129-
link_directories(${LIBCURL_LIBRARY_DIRS})
132+
set(OPEN_SRC_INCLUDE_DIRS ${OPEN_SRC_INCLUDE_DIRS} ${CURL_INCLUDE_DIRS})
133+
link_directories(${CURL_LIBRARY_DIRS})
130134
endif()
131135

132136
if (BUILD_COMMON_LWS)
137+
if (WIN32)
138+
find_package(LIBWEBSOCKETS REQUIRED PATHS ${OPEN_SRC_INSTALL_PREFIX})
139+
else()
133140
pkg_check_modules(LIBWEBSOCKET REQUIRED libwebsockets)
141+
endif()
134142

135-
set(OPEN_SRC_INCLUDE_DIRS ${OPEN_SRC_INCLUDE_DIRS} ${LIBWEBSOCKET_INCLUDE_DIRS})
136-
link_directories(${LIBWEBSOCKET_LIBRARY_DIRS})
143+
set(OPEN_SRC_INCLUDE_DIRS ${OPEN_SRC_INCLUDE_DIRS} ${LIBWEBSOCKETS_INCLUDE_DIRS})
144+
link_directories(${LIBWEBSOCKETS_LIBRARY_DIRS})
137145
endif()
138146

139147
find_package(Jsmn REQUIRED)
@@ -180,6 +188,10 @@ if("${CMAKE_C_COMPILER_ID}" MATCHES "GNU|Clang")
180188
endif()
181189
endif()
182190

191+
if(MSVC)
192+
add_definitions(-D_CRT_SECURE_NO_WARNINGS -D_CRT_NONSTDC_NO_WARNINGS -D_SILENCE_TR1_NAMESPACE_DEPRECATION_WARNING)
193+
endif()
194+
183195
file(GLOB KVS_COMMON_SOURCE_FILES_BASE "src/source/Common/*.c")
184196
file(GLOB KVS_COMMON_SOURCE_FILES_LWS "src/source/Common/Lws/*.c")
185197
file(GLOB KVS_COMMON_SOURCE_FILES_CURL "src/source/Common/Curl/*.c")
@@ -190,6 +202,7 @@ include_directories(${PIC_HEADERS})
190202
include_directories(${KINESIS_VIDEO_PRODUCER_C_SRC}/src/include)
191203
include_directories(${OPEN_SRC_INCLUDE_DIRS})
192204
include_directories(${KINESIS_VIDEO_OPEN_SOURCE_SRC}/include)
205+
include_directories(${KINESIS_VIDEO_OPEN_SOURCE_SRC}/local/include)
193206

194207
add_subdirectory(${KINESIS_VIDEO_PIC_SRC} ./kvspic EXCLUDE_FROM_ALL)
195208

@@ -217,8 +230,8 @@ if(BUILD_COMMON_LWS)
217230
${JSMN_LIBRARY}
218231
${OPENSSL_CRYPTO_LIBRARY}
219232
${OPENSSL_SSL_LIBRARY}
220-
${LIBWEBSOCKET_LIBRARIES}
221-
${LIBCURL_LIBRARIES}
233+
${LIBWEBSOCKETS_LIBRARIES}
234+
CURL::libcurl
222235
kvspicUtils)
223236
endif()
224237

@@ -228,29 +241,20 @@ target_compile_definitions(kvsCommonCurl PRIVATE KVS_BUILD_WITH_CURL ${CPRODUCER
228241
target_link_libraries(kvsCommonCurl
229242
${JSMN_LIBRARY}
230243
${PRODUCER_CRYPTO_LIBRARY}
231-
${LIBCURL_LIBRARIES})
232-
233-
add_library(cproducer SHARED ${PRODUCER_C_SOURCE_FILES})
244+
CURL::libcurl)
234245

235-
if (MINGW)
236-
# Use PRIVATE otherwise anything linking against cproducer will also link with pic again,
237-
# causing duplicate symbols
238-
target_link_libraries(cproducer PRIVATE
239-
kvspic
240-
kvsCommonCurl)
246+
if (WIN32)
247+
add_library(cproducer STATIC ${PRODUCER_C_SOURCE_FILES})
241248
else()
242-
target_link_libraries(cproducer
243-
kvspic
244-
kvsCommonCurl)
249+
add_library(cproducer SHARED ${PRODUCER_C_SOURCE_FILES})
245250
endif()
251+
target_link_libraries(cproducer PUBLIC kvspic kvsCommonCurl)
246252

247253
add_executable(kvsVideoOnlyStreamingSample ${KINESIS_VIDEO_PRODUCER_C_SRC}/samples/KvsVideoOnlyStreamingSample.c)
248-
target_link_libraries(kvsVideoOnlyStreamingSample
249-
cproducer)
254+
target_link_libraries(kvsVideoOnlyStreamingSample cproducer)
250255

251256
add_executable(kvsAacAudioVideoStreamingSample ${KINESIS_VIDEO_PRODUCER_C_SRC}/samples/KvsAacAudioVideoStreamingSample.c)
252-
target_link_libraries(kvsAacAudioVideoStreamingSample
253-
cproducer)
257+
target_link_libraries(kvsAacAudioVideoStreamingSample cproducer)
254258

255259
if (BUILD_TEST)
256260
add_subdirectory(tst)

tst/CMakeLists.txt

Lines changed: 9 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -5,25 +5,20 @@ project (producerTest)
55
set(CMAKE_CXX_STANDARD 11)
66
set(KINESIS_VIDEO_PRODUCER_C_SRC "${CMAKE_CURRENT_SOURCE_DIR}/..")
77

8-
set(THREADS_PREFER_PTHREAD_FLAG ON)
9-
find_package(Threads)
10-
set(EXE_LIBRARIES Threads::Threads ${CMAKE_DL_LIBS})
11-
12-
if(NOT ${CMAKE_SYSTEM_NAME} MATCHES "Darwin" AND NOT ${CMAKE_SYSTEM_NAME} MATCHES "Windows")
13-
set(EXE_LIBRARIES ${EXE_LIBRARIES} rt)
8+
if (OPEN_SRC_INSTALL_PREFIX)
9+
find_package(GTest REQUIRED PATHS ${OPEN_SRC_INSTALL_PREFIX})
10+
else()
11+
find_package(GTest REQUIRED)
1412
endif()
1513

16-
set(GTEST_ROOT $ENV{KVS_GTEST_ROOT})
17-
find_package(GTest REQUIRED)
14+
SET(GTEST_LIBNAME GTest::gtest)
15+
if (TARGET GTest::GTest)
16+
SET(GTEST_LIBNAME GTest::GTest)
17+
endif()
1818

1919
include_directories(${KINESIS_VIDEO_PRODUCER_C_SRC})
2020

2121
file(GLOB PRODUCER_TEST_SOURCE_FILES "*.cpp")
2222

2323
add_executable(producer_test ${PRODUCER_TEST_SOURCE_FILES})
24-
target_link_libraries(producer_test
25-
cproducer
26-
GTest::GTest
27-
GTest::Main
28-
${EXE_LIBRARIES}
29-
${Jsmn})
24+
target_link_libraries(producer_test cproducer ${GTEST_LIBNAME})

tst/ProducerFunctionalityTest.cpp

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -296,7 +296,8 @@ TEST_F(ProducerFunctionalityTest, create_client_repeated_create_stream_put_frame
296296
{
297297
UINT32 i, j, k;
298298
UINT32 totalFragments = 2;
299-
UINT32 totalFrames = totalFragments * TEST_FPS, streamCount = 10;
299+
UINT32 totalFrames = totalFragments * TEST_FPS;
300+
static const UINT32 streamCount = 10;
300301
TID threadIds[streamCount];
301302

302303
createDefaultProducerClient(FALSE, FUNCTIONALITY_TEST_CREATE_STREAM_TIMEOUT);

0 commit comments

Comments
 (0)