diff --git a/.github/workflows/windows.yml b/.github/workflows/windows.yml new file mode 100644 index 00000000..357dc3c2 --- /dev/null +++ b/.github/workflows/windows.yml @@ -0,0 +1,21 @@ +name: Windows + +on: + workflow_dispatch: + push: + branches: [ master ] + pull_request: + branches: [ master ] + +jobs: + build: + runs-on: windows-latest + name: build + steps: + - uses: actions/checkout@v3 + - name: configure + run: cmake -Bbuild -DUSE_ASYNC:BOOL=OFF + - name: make + run: cmake --build build + - name: make check + run: ctest --test-dir build -Ttest -C Debug -j1 --output-on-failure diff --git a/cmake/config.cmake b/cmake/config.cmake index 11942fba..5e1d47b5 100644 --- a/cmake/config.cmake +++ b/cmake/config.cmake @@ -7,4 +7,8 @@ option(USE_LIBPCAUDIO "Use libPcAudio for sound output" ${HAVE_LIBPCAUDIO}) option(USE_KLATT "Use klatt for speech synthesis" ON) option(USE_SPEECHPLAYER "Use speech-player for speech synthesis" ON) -option(USE_ASYNC "Support asynchronous speech synthesis" ON) +if (HAVE_PTHREAD) + option(USE_ASYNC "Support asynchronous speech synthesis" ON) +else() + set(USE_ASYNC OFF) +endif() diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index d1288955..654d7fa0 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -10,11 +10,16 @@ set_target_properties(espeak-ng-bin PROPERTIES OUTPUT_NAME espeak-ng) target_link_libraries( espeak-ng-bin PRIVATE espeak-ng espeak-ng-config ) -add_custom_target( - speak-ng ALL - ${CMAKE_COMMAND} -E create_symlink espeak-ng ${CMAKE_CURRENT_BINARY_DIR}/speak-ng - COMMENT "Link espeak-ng to speak-ng" - DEPENDS espeak-ng-bin -) +if (MSVC) + target_sources(espeak-ng-bin PRIVATE compat/getopt.c) +endif() +if (NOT WIN32) + add_custom_target( + speak-ng ALL + ${CMAKE_COMMAND} -E create_symlink espeak-ng ${CMAKE_CURRENT_BINARY_DIR}/speak-ng + COMMENT "Link espeak-ng to speak-ng" + DEPENDS espeak-ng-bin + ) +endif() install(TARGETS espeak-ng-bin) install(DIRECTORY include/espeak include/espeak-ng TYPE INCLUDE) diff --git a/src/libespeak-ng/CMakeLists.txt b/src/libespeak-ng/CMakeLists.txt index c23eda4d..d3d68f7f 100644 --- a/src/libespeak-ng/CMakeLists.txt +++ b/src/libespeak-ng/CMakeLists.txt @@ -38,23 +38,28 @@ add_library(espeak-ng espeak_api.c ) -target_compile_options(espeak-ng PRIVATE - "-fPIC" - "-fvisibility=hidden" - "-fno-exceptions" - "-fwrapv" +if (NOT MSVC) + target_compile_options(espeak-ng PRIVATE + "-fPIC" + "-fvisibility=hidden" + "-fno-exceptions" + "-fwrapv" - "-pedantic" + "-pedantic" - "-Wunused-parameter" - "-Wunused" - "-Wuninitialized" - "-Wreturn-type" - "-Wmissing-prototypes" - "-Wint-conversion" - "-Wimplicit" -) -target_compile_definitions(espeak-ng PRIVATE "LIBESPEAK_NG_EXPORT") + "-Wunused-parameter" + "-Wunused" + "-Wuninitialized" + "-Wreturn-type" + "-Wmissing-prototypes" + "-Wint-conversion" + "-Wimplicit" + ) +endif() +target_compile_definitions(espeak-ng PRIVATE "LIBESPEAK_NG_EXPORT=1") +if (NOT BUILD_SHARED_LIBS) + target_compile_definitions(espeak-ng INTERFACE "LIBESPEAK_NG_EXPORT=1") +endif() if (USE_ASYNC) target_sources(espeak-ng PRIVATE @@ -91,7 +96,10 @@ if (HAVE_LIBPCAUDIO AND USE_LIBPCAUDIO) target_include_directories(espeak-ng PRIVATE ${PCAUDIO_INC}) endif() -target_link_libraries(espeak-ng PRIVATE espeak-ng-config ucd m) +target_link_libraries(espeak-ng PRIVATE espeak-ng-config ucd) +if (NOT MSVC) + target_link_libraries(espeak-ng PRIVATE m) +endif() target_link_libraries(espeak-ng PUBLIC espeak-include) install(TARGETS espeak-ng LIBRARY) diff --git a/src/speechPlayer/CMakeLists.txt b/src/speechPlayer/CMakeLists.txt index c80cc519..ed92589c 100644 --- a/src/speechPlayer/CMakeLists.txt +++ b/src/speechPlayer/CMakeLists.txt @@ -4,5 +4,7 @@ add_library(speechPlayer STATIC src/speechWaveGenerator.cpp ) target_include_directories(speechPlayer PUBLIC include) -target_compile_options(speechPlayer PRIVATE "-fPIC") +if(NOT MSVC) + target_compile_options(speechPlayer PRIVATE "-fPIC") +endif() install(TARGETS speechPlayer ARCHIVE)