Skip to content

Commit 5cdb5cf

Browse files
committed
Support building on Windows
Add travis builder
1 parent 5080cba commit 5cdb5cf

12 files changed

+154
-73
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
@@ -103,3 +103,12 @@ matrix:
103103
- sudo apt-get -q update
104104
- sudo apt-get -y install gcc-4.4
105105
- export CC=gcc-4.4 && mkdir build && cd build && cmake .. -DBUILD_TEST=TRUE -DBUILD_GSTREAMER_PLUGIN=TRUE -DBUILD_JNI=TRUE
106+
107+
- name: "Windows MSVC"
108+
os: windows
109+
script:
110+
- choco install nasm strawberryperl
111+
- unset CC CC_FOR_BUILD CXX CXX_FOR_BUILD # We want to use MSVC
112+
- 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"
113+
- .github/build_windows.bat
114+
- cd build/tst && ./producerTest.exe

CMake/Dependencies/libcurl-CMakeLists.txt

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,10 @@ if (USE_MBEDTLS)
2020
set(CMAKE_ARGS ${CMAKE_ARGS} -DCMAKE_USE_MBEDTLS=1)
2121
endif()
2222

23+
if (WIN32)
24+
set(CMAKE_ARGS ${CMAKE_ARGS} -DCMAKE_USE_WINSSL=1 -DCURL_STATIC_CRT=1)
25+
endif()
26+
2327
ExternalProject_Add(project_libcurl
2428
GIT_REPOSITORY https://github.com/curl/curl.git
2529
GIT_TAG curl-7_68_0

CMake/Dependencies/libjsmn-CMakeLists.txt

Lines changed: 4 additions & 11 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 ""
21-
)
14+
)
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/liblog4cplus-CMakeLists.txt

Lines changed: 21 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -11,13 +11,24 @@ endif()
1111

1212

1313
include(ExternalProject)
14-
ExternalProject_Add(project_log4cplus
15-
GIT_REPOSITORY https://github.com/log4cplus/log4cplus
16-
GIT_TAG REL_1_2_2
17-
PREFIX ${CMAKE_CURRENT_BINARY_DIR}/build
18-
CONFIGURE_COMMAND ${CONFIGURE_COMMAND}
19-
BUILD_COMMAND ${MAKE_EXE}
20-
BUILD_IN_SOURCE TRUE
21-
INSTALL_COMMAND ${MAKE_EXE} install
22-
TEST_COMMAND ""
23-
)
14+
15+
if (WIN32)
16+
ExternalProject_Add(project_log4cplus
17+
GIT_REPOSITORY https://github.com/log4cplus/log4cplus
18+
GIT_TAG REL_1_2_2
19+
PREFIX ${CMAKE_CURRENT_BINARY_DIR}/build
20+
TEST_COMMAND ""
21+
CMAKE_ARGS -DCMAKE_INSTALL_PREFIX=${OPEN_SRC_INSTALL_PREFIX} -DLOG4CPLUS_BUILD_TESTING=0 -DLOG4CPLUS_BUILD_LOGGINGSERVER=0 -DUNICODE=0
22+
)
23+
else()
24+
ExternalProject_Add(project_log4cplus
25+
GIT_REPOSITORY https://github.com/log4cplus/log4cplus
26+
GIT_TAG REL_1_2_2
27+
PREFIX ${CMAKE_CURRENT_BINARY_DIR}/build
28+
CONFIGURE_COMMAND ${CONFIGURE_COMMAND}
29+
BUILD_COMMAND ${MAKE_EXE}
30+
BUILD_IN_SOURCE TRUE
31+
INSTALL_COMMAND ${MAKE_EXE} install
32+
TEST_COMMAND ""
33+
)
34+
endif()

CMake/Dependencies/libopenssl-CMakeLists.txt

Lines changed: 15 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -2,25 +2,29 @@ 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)
1822
ExternalProject_Add(project_libopenssl
1923
GIT_REPOSITORY https://github.com/openssl/openssl.git
20-
GIT_TAG OpenSSL_1_1_1g
24+
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 ""

CMake/FindJsmn.cmake

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
find_path(JSMN_INCLUDE_DIRS jsmn.h)
2+
3+
find_library(JSMN_LIBRARY jsmn)
4+
5+
include(FindPackageHandleStandardArgs)
6+
find_package_handle_standard_args(JSMN DEFAULT_MSG
7+
JSMN_LIBRARY JSMN_INCLUDE_DIRS)
8+
9+
mark_as_advanced(JSMN_LIBRARY JSMN_INCLUDE_DIRS)

CMakeLists.txt

Lines changed: 54 additions & 34 deletions
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,8 @@ get_filename_component(ROOT "${CMAKE_CURRENT_SOURCE_DIR}" ABSOLUTE)
3333
if(BUILD_STATIC)
3434
set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -static")
3535
set(LINKAGE STATIC)
36+
elseif(WIN32)
37+
set(LINKAGE STATIC)
3638
else()
3739
set(LINKAGE SHARED)
3840
endif()
@@ -64,49 +66,66 @@ if(BUILD_DEPENDENCIES)
6466
file(MAKE_DIRECTORY ${KINESIS_VIDEO_OPEN_SOURCE_SRC}/local)
6567
endif()
6668

67-
set(OPEN_SRC_INSTALL_PREFIX ${KINESIS_VIDEO_OPEN_SOURCE_SRC}/local)
68-
set(ENV{PKG_CONFIG_PATH} "$ENV{PKG_CONFIG_PATH}:${OPEN_SRC_INSTALL_PREFIX}/lib/pkgconfig")
69-
set(ENV{PATH} "$ENV{PATH}:${OPEN_SRC_INSTALL_PREFIX}/bin")
70-
set(CMAKE_PREFIX_PATH ${CMAKE_PREFIX_PATH} ${OPEN_SRC_INSTALL_PREFIX})
71-
72-
message(STATUS "Begin building dependencies.")
69+
if (NOT OPEN_SRC_INSTALL_PREFIX)
70+
set(OPEN_SRC_INSTALL_PREFIX ${KINESIS_VIDEO_OPEN_SOURCE_SRC}/local)
71+
set(ENV{PKG_CONFIG_PATH}
72+
"$ENV{PKG_CONFIG_PATH}:${OPEN_SRC_INSTALL_PREFIX}/lib/pkgconfig")
73+
set(CMAKE_PREFIX_PATH ${CMAKE_PREFIX_PATH} ${OPEN_SRC_INSTALL_PREFIX})
74+
set(ENV{PATH} "$ENV{PATH}:${OPEN_SRC_INSTALL_PREFIX}/bin")
75+
endif()
7376

74-
build_dependency(openssl -DBUILD_STATIC=${BUILD_STATIC} -DBUILD_OPENSSL_PLATFORM=${BUILD_OPENSSL_PLATFORM})
75-
build_dependency(curl -DBUILD_STATIC=${BUILD_STATIC} -DUSE_OPENSSL=${USE_OPENSSL} -DUSE_MBEDTLS=${USE_MBEDTLS})
7677

77-
build_dependency(jsmn)
78-
build_dependency(autoconf)
79-
build_dependency(automake)
80-
build_dependency(log4cplus)
78+
message(STATUS "Begin building dependencies.")
8179

82-
if(BUILD_TEST)
83-
build_dependency(gtest)
80+
if (NOT WIN32)
81+
build_dependency(autoconf)
82+
build_dependency(automake)
8483
endif()
84+
build_dependency(log4cplus)
8585

8686
message(STATUS "Finished building dependencies.")
8787
endif()
8888

89+
set(BUILD_COMMON_LWS
90+
FALSE
91+
CACHE BOOL "Build ProducerC without LWS Support" FORCE)
92+
set(BUILD_COMMON_CURL
93+
TRUE
94+
CACHE BOOL "Build ProducerC with CURL Support" FORCE)
95+
add_subdirectory(${KINESIS_VIDEO_PRODUCER_C_SRC} ./kvscproducer EXCLUDE_FROM_ALL)
96+
97+
8998
############# find dependent libraries ############
9099
find_package(Threads)
91100
find_package(PkgConfig REQUIRED)
92-
find_package(OpenSSL REQUIRED)
93101

94-
pkg_check_modules(LIBCURL REQUIRED libcurl)
102+
find_package(OpenSSL REQUIRED)
103+
set(OPEN_SRC_INCLUDE_DIRS ${OPEN_SRC_INCLUDE_DIRS} ${OPENSSL_INCLUDE_DIRS})
95104

96-
set(OPEN_SRC_INCLUDE_DIRS ${OPEN_SRC_INCLUDE_DIRS} ${LIBCURL_INCLUDE_DIRS})
97-
link_directories(${LIBCURL_LIBRARY_DIRS})
105+
if (OPEN_SRC_INSTALL_PREFIX)
106+
find_package(CURL REQUIRED PATHS ${OPEN_SRC_INSTALL_PREFIX})
107+
else()
108+
find_package(CURL REQUIRED)
109+
endif()
98110

99-
set(OPEN_SRC_INCLUDE_DIRS ${OPENSSL_INCLUDE_DIR} ${CURL_INCLUDE_DIRS})
111+
set(OPEN_SRC_INCLUDE_DIRS ${OPEN_SRC_INCLUDE_DIRS} ${CURL_INCLUDE_DIRS})
112+
link_directories(${CURL_LIBRARY_DIRS})
100113

101-
find_library(
102-
Log4cplus
103-
NAMES log4cplus REQUIRED
104-
PATHS ${OPEN_SRC_INSTALL_PREFIX}/lib)
114+
if (WIN32)
115+
find_package(Log4cplus
116+
NAMES log4cplus REQUIRED
117+
PATHS ${OPEN_SRC_INSTALL_PREFIX}/lib)
118+
else()
119+
find_library(Log4cplus
120+
NAMES log4cplus REQUIRED
121+
PATHS ${OPEN_SRC_INSTALL_PREFIX}/lib)
122+
endif()
105123

124+
set(OPEN_SRC_INCLUDE_DIRS ${OPEN_SRC_INCLUDE_DIRS} ${LOG4CPLUS_INCLUDE_DIRS})
125+
link_directories(${LOG4CPLUS_LIBRARY_DIRS})
106126

107-
find_library(Jsmn
108-
NAMES jsmn REQUIRED
109-
PATHS ${OPEN_SRC_INSTALL_PREFIX}/lib)
127+
find_library(Jsmn REQUIRED)
128+
set(OPEN_SRC_INCLUDE_DIRS ${OPEN_SRC_INCLUDE_DIRS} ${JSMN_INCLUDE_DIRS})
110129

111130
############# Enable Sanitizers ############
112131
if("${CMAKE_C_COMPILER_ID}" MATCHES "GNU|Clang")
@@ -137,6 +156,10 @@ if("${CMAKE_C_COMPILER_ID}" MATCHES "GNU|Clang")
137156
endif()
138157
endif()
139158

159+
if(MSVC)
160+
add_definitions(-D_CRT_SECURE_NO_WARNINGS -D_CRT_NONSTDC_NO_WARNINGS -D_SILENCE_TR1_NAMESPACE_DEPRECATION_WARNING)
161+
endif()
162+
140163
############# Build Targets ############
141164
file(GLOB PRODUCER_CPP_SOURCE_FILES "src/*.cpp" "src/common/*.cpp" "src/credential-providers/*.cpp")
142165
file(GLOB GST_PLUGIN_SOURCE_FILES "src/gstreamer/*.cpp" "src/gstreamer/Util/*.cpp")
@@ -152,13 +175,10 @@ include_directories(${KINESIS_VIDEO_PRODUCER_CPP_SRC}/src/common)
152175
include_directories(${KINESIS_VIDEO_PRODUCER_CPP_SRC}/src/JNI/include)
153176
include_directories(${KINESIS_VIDEO_PRODUCER_C_SRC}/src/include)
154177

155-
set(BUILD_COMMON_LWS
156-
FALSE
157-
CACHE BOOL "Build ProducerC without LWS Support" FORCE)
158-
set(BUILD_COMMON_CURL
159-
TRUE
160-
CACHE BOOL "Build ProducerC with CURL Support" FORCE)
161-
add_subdirectory(${KINESIS_VIDEO_PRODUCER_C_SRC} ./kvscproducer EXCLUDE_FROM_ALL)
178+
if (WIN32)
179+
SET(JSMN_LIBRARY "../../open-source/local/lib/jsmn")
180+
SET(Log4cplus "log4cplus::log4cplus")
181+
endif()
162182

163183
add_library(KinesisVideoProducer ${LINKAGE} ${PRODUCER_CPP_SOURCE_FILES})
164184
target_link_libraries(
@@ -171,7 +191,7 @@ target_link_libraries(
171191
cproducer
172192
${OPENSSL_SSL_LIBRARY}
173193
${OPENSSL_CRYPTO_LIBRARY}
174-
${Jsmn}
194+
${JSMN_LIBRARY}
175195
${Log4cplus}
176196
${LIBCURL_LIBRARIES})
177197

0 commit comments

Comments
 (0)