# The last version with Windows XP support is 3.13, we want to keep that cmake_minimum_required (VERSION 3.10) file (READ ../xK-version project_version) configure_file (../xK-version xK-version.tag COPYONLY) string (STRIP "${project_version}" project_version) # This is an entirely separate CMake project--the main executables only build # on Windows within Cygwin, and this Windows executable only builds on Linux # cross-compiled, so you'd want to build them independently anyway. project (xW VERSION "${project_version}" DESCRIPTION "Win32 frontend for xC" LANGUAGES CXX) set (CMAKE_CXX_STANDARD 17) add_definitions (-DUNICODE -D_UNICODE) add_compile_options ("$<$:/utf-8>") add_compile_options ("$<$:-Wall;-Wextra>") add_compile_options ("$<$:-Wall;-Wextra>") add_link_options ("$<$:-static;-municode>") add_link_options ("$<$:-static;-municode>") set (project_config ${PROJECT_BINARY_DIR}/config.h) configure_file (${PROJECT_SOURCE_DIR}/config.h.in ${project_config}) include_directories (${PROJECT_SOURCE_DIR} ${PROJECT_BINARY_DIR}) # Produce a beep sample if (NOT ${CMAKE_VERSION} VERSION_LESS 3.18.0) set (find_program_REQUIRE REQUIRED) endif () find_program (sox_EXECUTABLE sox ${find_program_REQUIRE}) add_custom_command (OUTPUT beep.wav COMMAND ${sox_EXECUTABLE} -b 16 -Dr 44100 -n beep.wav synth 0.1 0 25 triangle 800 vol 0.5 fade t 0 -0 0.005 pad 0 0.05 COMMENT "Generating a beep sample" VERBATIM) # Rasterize SVG icons set (root "${PROJECT_SOURCE_DIR}/..") set (CMAKE_MODULE_PATH ${root}/liberty/cmake) include (IconUtils) set (icon_ico_list) foreach (icon xW xW-highlighted) set (icon_png_list) foreach (icon_size 16 32 48) icon_to_png (${icon} ${PROJECT_SOURCE_DIR}/${icon}.svg ${icon_size} ${PROJECT_BINARY_DIR}/icons icon_png) list (APPEND icon_png_list ${icon_png}) endforeach () icon_to_png (${icon} ${PROJECT_SOURCE_DIR}/${icon}.svg 256 ${PROJECT_BINARY_DIR}/icons icon_png) set (icon_ico ${PROJECT_BINARY_DIR}/${icon}.ico) icon_for_win32 (${icon_ico} "${icon_png_list}" "${icon_png}") list (APPEND icon_ico_list ${icon_ico}) endforeach () set_property (SOURCE xW.rc APPEND PROPERTY OBJECT_DEPENDS ${icon_ico_list} beep.wav) # Build the main executable and link it find_program (awk_EXECUTABLE awk ${find_program_REQUIRE}) add_custom_command (OUTPUT xC-proto.cpp COMMAND ${CMAKE_COMMAND} -E env LC_ALL=C ${awk_EXECUTABLE} -f ${root}/liberty/tools/lxdrgen.awk -f ${root}/liberty/tools/lxdrgen-cpp.awk -v PrefixCamel=Relay ${root}/xC.lxdr > xC-proto.cpp DEPENDS ${root}/liberty/tools/lxdrgen.awk ${root}/liberty/tools/lxdrgen-cpp.awk ${root}/xC.lxdr COMMENT "Generating xC relay protocol code" VERBATIM) add_custom_target (xC-proto DEPENDS ${PROJECT_BINARY_DIR}/xC-proto.cpp) add_executable (xW WIN32 xW.cpp xW.rc xW.manifest ${project_config} ${root}/liberty/tools/lxdrgen-cpp-win32.cpp) target_link_libraries (xW comctl32 ws2_32 winmm) add_dependencies (xW xC-proto) # At least with MinGW, this is a fully independent portable executable install (TARGETS xW DESTINATION .) set (CPACK_GENERATOR ZIP) include (CPack)