From e3daca37aa134a6885c8ae5c508c3d7f7bfc600a Mon Sep 17 00:00:00 2001 From: skal Date: Sat, 31 Jan 2026 13:57:51 +0100 Subject: Add Windows cross-compilation support (MinGW) and emulation (Wine) --- CMakeLists.txt | 87 ++++++++++++++++++++++++++++++++++++++++++++-------------- 1 file changed, 67 insertions(+), 20 deletions(-) (limited to 'CMakeLists.txt') diff --git a/CMakeLists.txt b/CMakeLists.txt index 410ebc1..d25065c 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -24,20 +24,58 @@ endif() set(CMAKE_CXX_STANDARD 17) set(CMAKE_CXX_STANDARD_REQUIRED ON) -# Find wgpu-native (system install) -find_library(WGPU_LIBRARY NAMES wgpu_native libwgpu_native REQUIRED) -find_path(WGPU_INCLUDE_DIR NAMES webgpu.h PATH_SUFFIXES webgpu-headers REQUIRED) - -include_directories( - src - third_party - ${WGPU_INCLUDE_DIR} - third_party/glfw3webgpu -) +if (DEMO_CROSS_COMPILE_WIN32) + # --- Windows Cross-Compilation Configuration --- + add_definitions(-DDEMO_CROSS_COMPILE_WIN32) + set(WINDOWS_DEPS_DIR "${CMAKE_CURRENT_SOURCE_DIR}/third_party/windows") + + # WGPU-Native + # We use the headers from the fetched deps + set(WGPU_INCLUDE_DIR "${WINDOWS_DEPS_DIR}/include/webgpu") + # Link against the import library + set(WGPU_LIBRARY "${WINDOWS_DEPS_DIR}/lib/libwgpu_native.dll.a") + + # GLFW 3.4 + set(GLFW3_INCLUDE_DIR "${WINDOWS_DEPS_DIR}/include") + set(GLFW3_LIBRARY "${WINDOWS_DEPS_DIR}/lib/libglfw3.a") + + include_directories( + src + third_party + ${WGPU_INCLUDE_DIR} + ${GLFW3_INCLUDE_DIR} + third_party/glfw3webgpu + ) + + # Link libraries + # ws2_32 is winsock, required by some deps + set(DEMO_LIBS + ${GLFW3_LIBRARY} + ${WGPU_LIBRARY} + -lgdi32 -lws2_32 -luser32 -lkernel32 -lshell32 -ladvapi32 -ldwmapi + ) + + # Statically link C/C++ runtime to avoid needing extra DLLs + set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -static-libgcc -static-libstdc++") + +else() + # --- Native Build Configuration --- + + # Find wgpu-native (system install) + find_library(WGPU_LIBRARY NAMES wgpu_native libwgpu_native REQUIRED) + find_path(WGPU_INCLUDE_DIR NAMES webgpu.h PATH_SUFFIXES webgpu-headers REQUIRED) + + include_directories( + src + third_party + ${WGPU_INCLUDE_DIR} + third_party/glfw3webgpu + ) -find_package(glfw3 REQUIRED) + find_package(glfw3 REQUIRED) -set(DEMO_LIBS glfw ${WGPU_LIBRARY}) + set(DEMO_LIBS glfw ${WGPU_LIBRARY}) +endif() # Platform-specific dependencies if (APPLE) @@ -52,15 +90,24 @@ if (APPLE) "-framework Cocoa" "-framework QuartzCore" ) +elseif (DEMO_CROSS_COMPILE_WIN32) + # Windows deps already handled above else() # Assume Linux/other POSIX-like systems might need these list(APPEND DEMO_LIBS pthread m dl) endif() -# Asset Packing Tool (Always needed for build) -add_executable(asset_packer - tools/asset_packer.cc -) +# Asset Packing Tool +if (DEFINED ASSET_PACKER_PATH) + # Use externally provided tool (e.g., for cross-compilation) + set(ASSET_PACKER_CMD ${ASSET_PACKER_PATH}) + set(ASSET_PACKER_DEPENDS ${ASSET_PACKER_PATH}) +else() + # Build tool as part of the project + add_executable(asset_packer tools/asset_packer.cc) + set(ASSET_PACKER_CMD $) + set(ASSET_PACKER_DEPENDS asset_packer) +endif() # Configure DEMO asset generation set(DEMO_ASSETS_TXT_PATH ${CMAKE_CURRENT_SOURCE_DIR}/assets/final/demo_assets.txt) @@ -70,8 +117,8 @@ set(GENERATED_DEMO_ASSETS_DATA_CC ${CMAKE_CURRENT_BINARY_DIR}/src/assets_data.cc add_custom_command( OUTPUT ${GENERATED_DEMO_ASSETS_H} ${GENERATED_DEMO_ASSETS_DATA_CC} COMMAND ${CMAKE_COMMAND} -E make_directory ${CMAKE_CURRENT_BINARY_DIR}/src - COMMAND $ ${DEMO_ASSETS_TXT_PATH} ${GENERATED_DEMO_ASSETS_H} ${GENERATED_DEMO_ASSETS_DATA_CC} - DEPENDS asset_packer ${DEMO_ASSETS_TXT_PATH} + COMMAND ${ASSET_PACKER_CMD} ${DEMO_ASSETS_TXT_PATH} ${GENERATED_DEMO_ASSETS_H} ${GENERATED_DEMO_ASSETS_DATA_CC} + DEPENDS ${ASSET_PACKER_DEPENDS} ${DEMO_ASSETS_TXT_PATH} COMMENT "Generating demo assets.h and assets_data.cc" ) @@ -87,8 +134,8 @@ set(GENERATED_TEST_ASSETS_DATA_CC ${CMAKE_CURRENT_BINARY_DIR}/src/test_assets_da add_custom_command( OUTPUT ${GENERATED_TEST_ASSETS_H} ${GENERATED_TEST_ASSETS_DATA_CC} COMMAND ${CMAKE_COMMAND} -E make_directory ${CMAKE_CURRENT_BINARY_DIR}/src - COMMAND $ ${TEST_ASSETS_TXT_PATH} ${GENERATED_TEST_ASSETS_H} ${GENERATED_TEST_ASSETS_DATA_CC} - DEPENDS asset_packer ${TEST_ASSETS_TXT_PATH} + COMMAND ${ASSET_PACKER_CMD} ${TEST_ASSETS_TXT_PATH} ${GENERATED_TEST_ASSETS_H} ${GENERATED_TEST_ASSETS_DATA_CC} + DEPENDS ${ASSET_PACKER_DEPENDS} ${TEST_ASSETS_TXT_PATH} COMMENT "Generating test assets.h and assets_data.cc" ) -- cgit v1.2.3