86 lines
		
	
	
		
			3.1 KiB
		
	
	
	
		
			CMake
		
	
	
	
	
	
			
		
		
	
	
			86 lines
		
	
	
		
			3.1 KiB
		
	
	
	
		
			CMake
		
	
	
	
	
	
# 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 ("$<$<CXX_COMPILER_ID:MSVC>:/utf-8>")
 | 
						|
add_compile_options ("$<$<CXX_COMPILER_ID:GNU>:-Wall;-Wextra>")
 | 
						|
add_compile_options ("$<$<CXX_COMPILER_ID:Clang>:-Wall;-Wextra>")
 | 
						|
add_link_options ("$<$<CXX_COMPILER_ID:GNU>:-static;-municode>")
 | 
						|
add_link_options ("$<$<CXX_COMPILER_ID:Clang>:-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)
 |