a mega cool windows xp app
1cmake_minimum_required(VERSION 3.16)
2project(ShortwaveApp CXX)
3
4# Generate compile_commands.json for editor support
5set(CMAKE_EXPORT_COMPILE_COMMANDS ON)
6
7# Target Windows XP compatibility
8add_definitions(-DWINVER=0x0501)
9add_definitions(-D_WIN32_WINNT=0x0501)
10add_definitions(-D_WIN32_WINNT_WIN2K=0x0500)
11add_definitions(-DMINGW_HAS_SECURE_API=1)
12
13# Disable threading to avoid mcfgthread dependency
14add_compile_options(-fno-threadsafe-statics)
15add_compile_options(-D_GLIBCXX_HAS_GTHREADS=0)
16
17if(MINGW)
18 set(WIN32_ICON shortwave.rc)
19endif()
20
21add_executable(ShortwaveApp WIN32 main.cpp ${WIN32_ICON})
22
23# Add BASS library from libs directory
24target_include_directories(ShortwaveApp PRIVATE ${CMAKE_CURRENT_SOURCE_DIR})
25target_link_libraries(ShortwaveApp user32 gdi32 winmm wininet ${CMAKE_CURRENT_SOURCE_DIR}/libs/bass.lib)
26
27# Include current directory for headers
28target_include_directories(ShortwaveApp PRIVATE ${CMAKE_CURRENT_SOURCE_DIR})
29
30# Minimal static linking and avoid threading dependencies
31target_link_options(ShortwaveApp PRIVATE
32 -static-libgcc
33 -static-libstdc++
34 -static
35 -Wl,--subsystem,windows:5.01
36)
37
38# Configurable output directory
39if(DEFINED OUTPUT_DIR)
40 set_target_properties(ShortwaveApp PROPERTIES
41 RUNTIME_OUTPUT_DIRECTORY "${OUTPUT_DIR}"
42 RUNTIME_OUTPUT_DIRECTORY_DEBUG "${OUTPUT_DIR}"
43 RUNTIME_OUTPUT_DIRECTORY_RELEASE "${OUTPUT_DIR}"
44 )
45endif()
46
47set_target_properties(ShortwaveApp PROPERTIES
48 OUTPUT_NAME "Shortwave"
49)
50
51# Configurable output directory
52if(DEFINED OUTPUT_DIR)
53 set_target_properties(ShortwaveApp PROPERTIES
54 RUNTIME_OUTPUT_DIRECTORY "${OUTPUT_DIR}"
55 RUNTIME_OUTPUT_DIRECTORY_DEBUG "${OUTPUT_DIR}"
56 RUNTIME_OUTPUT_DIRECTORY_RELEASE "${OUTPUT_DIR}"
57 )
58endif()