From 98ad9b067954bfe92b72a38923da3d336858eb1b Mon Sep 17 00:00:00 2001 From: Stephen Gregoratto Date: Sun, 13 Aug 2023 23:06:20 +1000 Subject: [PATCH] Build with CMake. Tested building with SDL2 + Sokol on: - Windows with clang-cl 16 - GLEW/SDL2 built using vcpkg. - Arch Linux with the `sdl2`/`glew` packages. - macOS 13.5 with SDL2 via homebrew. - Emscripten using the Arch Linux `emscripten` package. - Mingw toolchain with the GLEW/SDL2 packages installed: - On Arch Linux with the mingw packages. - On Windows using MSYS2 with the ucrt packages. --- CMakeLists.txt | 216 ++++++++++++++ cmake/FindSDL2.cmake | 388 +++++++++++++++++++++++++ packaging/windows/wipeout.exe.manifest | 8 + packaging/windows/wipeout.ico | Bin 0 -> 766 bytes packaging/windows/wipeout.rc | 3 + 5 files changed, 615 insertions(+) create mode 100644 CMakeLists.txt create mode 100644 cmake/FindSDL2.cmake create mode 100644 packaging/windows/wipeout.exe.manifest create mode 100644 packaging/windows/wipeout.ico create mode 100644 packaging/windows/wipeout.rc diff --git a/CMakeLists.txt b/CMakeLists.txt new file mode 100644 index 0000000..48ed01c --- /dev/null +++ b/CMakeLists.txt @@ -0,0 +1,216 @@ +cmake_minimum_required(VERSION 3.13 FATAL_ERROR) +project(wipeout-rewrite) + +include(GNUInstallDirs) +include(CMakeDependentOption) +list(APPEND CMAKE_MODULE_PATH "${CMAKE_SOURCE_DIR}/cmake") + +if("${CMAKE_SYSTEM_NAME}" STREQUAL "Emscripten") + set(EMSCRIPTEN true) +endif() + +set(platform_options "SDL2" "Sokol") +set(PLATFORM "SDL2" CACHE STRING "Graphics platform to handle input/output") +set_property(CACHE PLATFORM PROPERTY STRINGS "${platform_options}") +if(NOT PLATFORM IN_LIST platform_options) + message(FATAL_ERROR "PLATFORM must be one of ${platform_options}") +endif() + +set(renderer_options "GL" "GLES2" "SOFTWARE") +set(gl_renderers "GL" "GLES2") +set(RENDERER "GL" CACHE STRING "Graphics rendering backend") +set_property(CACHE RENDERER PROPERTY STRINGS "${renderer_options}") +if(NOT RENDERER IN_LIST renderer_options) + message(FATAL_ERROR "RENDERER must be one of ${renderer_options}") +endif() +if(RENDERER IN_LIST gl_renderers) + set(using_gl true) +endif() + +cmake_dependent_option(USE_GLVND "Link against modern GLVND ABIs" OFF "using_gl;LINUX" ON) +cmake_dependent_option(MINIMAL_BUNDLE "Do not include music/movies for web builds" OFF "EMSCRIPTEN" OFF) + +find_package(OpenGL) +find_package(GLEW) +find_package(SDL2) + +set(common_src + src/wipeout/camera.c + src/wipeout/camera.h + src/wipeout/droid.c + src/wipeout/droid.h + src/wipeout/game.c + src/wipeout/game.h + src/wipeout/hud.c + src/wipeout/hud.h + src/wipeout/image.c + src/wipeout/image.h + src/wipeout/ingame_menus.c + src/wipeout/ingame_menus.h + src/wipeout/intro.c + src/wipeout/intro.h + src/wipeout/main_menu.c + src/wipeout/main_menu.h + src/wipeout/menu.c + src/wipeout/menu.h + src/wipeout/object.c + src/wipeout/object.h + src/wipeout/particle.c + src/wipeout/particle.h + src/wipeout/race.c + src/wipeout/race.h + src/wipeout/scene.c + src/wipeout/scene.h + src/wipeout/sfx.c + src/wipeout/sfx.h + src/wipeout/ship.c + src/wipeout/ship.h + src/wipeout/ship_ai.c + src/wipeout/ship_ai.h + src/wipeout/ship_player.c + src/wipeout/ship_player.h + src/wipeout/title.c + src/wipeout/title.h + src/wipeout/track.c + src/wipeout/track.h + src/wipeout/ui.c + src/wipeout/ui.h + src/wipeout/weapon.c + src/wipeout/weapon.h + src/input.c + src/input.h + src/mem.c + src/mem.h + src/platform.h + src/render.h + src/system.c + src/system.h + src/types.c + src/types.h + src/utils.c + src/utils.h + + packaging/windows/wipeout.exe.manifest + packaging/windows/wipeout.rc +) + +set(compile_opts + $<$:/W4> + $<$>:-Wall -Wextra> +) +set_source_files_properties("${common_src}" + PROPERTIES COMPILE_FLAGS "${compile_opts}" +) + +add_executable(wipeout WIN32 ${common_src}) +set_property(TARGET wipeout PROPERTY C_STANDARD 11) +target_include_directories(wipeout PRIVATE src) +target_compile_options(wipeout PRIVATE ${compile_opts}) + +if(WIN32) + target_compile_definitions(wipeout PRIVATE + # TODO(stephen): Why isn't this working? + "NOMINMAX" + "_USE_MATH_DEFINES" + "_CRT_SECURE_NO_WARNINGS" + ) +elseif(APPLE) + target_compile_definitions(wipeout PRIVATE + "_THREAD_SAFE" + "GL_SILENCE_DEPRECATION" + ) + target_link_libraries(wipeout PUBLIC "-framework Foundation") + set_source_files_properties(src/platform_sokol.c PROPERTIES COMPILE_FLAGS "-x objective-c") + if("${PLATFORM}" STREQUAL Sokol) + target_link_libraries(wipeout PUBLIC + "-framework Cocoa" + "-framework QuartzCore" + "-framework AudioToolbox" + ) + endif() +elseif(UNIX) + target_link_libraries(wipeout PUBLIC m) + if (PLATFORM STREQUAL "Sokol" AND LINUX) + find_package(Threads REQUIRED) + find_package(X11 REQUIRED) + find_package(ALSA REQUIRED) + target_link_libraries(wipeout PUBLIC + X11::X11 + X11::Xcursor + Threads::Threads + X11::Xi + dl + ALSA::ALSA + ) + endif() +elseif(EMSCRIPTEN) + # Emscripten's CMake modules don't define targets like the standard + # ones do, so we define them ourselves here. + add_library(GLEW::GLEW INTERFACE IMPORTED) + add_library(OpenGL::GL INTERFACE IMPORTED) + if (NOT TARGET SDL2::Main) + add_library(SDL2::Main INTERFACE IMPORTED) + endif() + set_target_properties(OpenGL::GL PROPERTIES + IMPORTED_LIBNAME "GL" + ) + set_target_properties(GLEW::GLEW PROPERTIES + IMPORTED_LIBNAME "GLEW" + ) + set_target_properties(SDL2::Main PROPERTIES + IMPORTED_LIBNAME "SDL2" + INTERFACE_COMPILE_OPTIONS "SHELL:-s USE_SDL=2" + INTERFACE_LINK_LIBRARIES "SHELL:-s USE_SDL=2" + ) + + target_link_options(wipeout PRIVATE + "SHELL:-s ALLOW_MEMORY_GROWTH=1" + "SHELL:-s ENVIRONMENT=web" + "SHELL:-s FORCE_FILESYSTEM" + "SHELL:--preload-file ${CMAKE_SOURCE_DIR}/wipeout/@/wipeout" + ) + if(MINIMAL_BUNDLE) + target_link_options(wipeout PRIVATE + "SHELL:--exclude-file ${CMAKE_SOURCE_DIR}/wipeout/music" + "SHELL:--exclude-file ${CMAKE_SOURCE_DIR}/intro.mpeg" + ) + endif() + + configure_file("${CMAKE_SOURCE_DIR}/src/wasm-index.html" "game.html" COPYONLY) +endif() + +if(using_gl) + target_compile_definitions(wipeout PRIVATE "RENDERER_GL") + target_sources(wipeout PRIVATE src/render_gl.c) + + target_include_directories(wipeout PUBLIC ${OPENGL_INCLUDE_DIR}) + if (USE_GLES2) + target_compile_definitions(wipeout PRIVATE "USE_GLES2") + if (TARGET OpenGL::GLES2) + target_link_libraries(wipeout PUBLIC OpenGL::GLES2) + endif() + endif() + + if(USE_GLVND AND TARGET OpenGL::OpenGL) + target_link_libraries(wipeout PUBLIC OpenGL::OpenGL) + else() + target_link_libraries(wipeout PUBLIC OpenGL::GL) + endif() + + if(NOT APPLE) + target_include_directories(wipeout PRIVATE ${GLEW_INCLUDE_DIRS}) + target_link_libraries(wipeout PRIVATE GLEW::GLEW) + endif() +elseif("${RENDERER}" STREQUAL "SOFTWARE") + target_compile_definitions(wipeout PRIVATE "RENDERER_SOFTWARE") + target_sources(wipeout PRIVATE src/render_software.c) +endif() + +if("${PLATFORM}" STREQUAL SDL2) + target_sources(wipeout PRIVATE src/platform_sdl.c) + target_link_libraries(wipeout PUBLIC SDL2::Main) +elseif("${PLATFORM}" STREQUAL Sokol) + target_sources(wipeout PRIVATE src/platform_sokol.c) +endif() + +install(TARGETS wipeout) diff --git a/cmake/FindSDL2.cmake b/cmake/FindSDL2.cmake new file mode 100644 index 0000000..8649c92 --- /dev/null +++ b/cmake/FindSDL2.cmake @@ -0,0 +1,388 @@ +# Distributed under the OSI-approved BSD 3-Clause License. See accompanying +# file Copyright.txt or https://cmake.org/licensing for details. + +# Copyright 2019 Amine Ben Hassouna +# Copyright 2000-2019 Kitware, Inc. and Contributors +# All rights reserved. + +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions +# are met: + +# * Redistributions of source code must retain the above copyright +# notice, this list of conditions and the following disclaimer. + +# * Redistributions in binary form must reproduce the above copyright +# notice, this list of conditions and the following disclaimer in the +# documentation and/or other materials provided with the distribution. + +# * Neither the name of Kitware, Inc. nor the names of Contributors +# may be used to endorse or promote products derived from this +# software without specific prior written permission. + +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +# HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +#[=======================================================================[.rst: +FindSDL2 +-------- + +Locate SDL2 library + +This module defines the following 'IMPORTED' targets: + +:: + + SDL2::Core + The SDL2 library, if found. + Libraries should link to SDL2::Core + + SDL2::Main + The SDL2main library, if found. + Applications should link to SDL2::Main instead of SDL2::Core + + + +This module will set the following variables in your project: + +:: + + SDL2_LIBRARIES, the name of the library to link against + SDL2_INCLUDE_DIRS, where to find SDL.h + SDL2_FOUND, if false, do not try to link to SDL2 + SDL2MAIN_FOUND, if false, do not try to link to SDL2main + SDL2_VERSION_STRING, human-readable string containing the version of SDL2 + + + +This module responds to the following cache variables: + +:: + + SDL2_PATH + Set a custom SDL2 Library path (default: empty) + + SDL2_NO_DEFAULT_PATH + Disable search SDL2 Library in default path. + If SDL2_PATH (default: ON) + Else (default: OFF) + + SDL2_INCLUDE_DIR + SDL2 headers path. + + SDL2_LIBRARY + SDL2 Library (.dll, .so, .a, etc) path. + + SDL2MAIN_LIBRAY + SDL2main Library (.a) path. + + SDL2_BUILDING_LIBRARY + This flag is useful only when linking to SDL2_LIBRARIES insead of + SDL2::Main. It is required only when building a library that links to + SDL2_LIBRARIES, because only applications need main() (No need to also + link to SDL2main). + If this flag is defined, then no SDL2main will be added to SDL2_LIBRARIES + and no SDL2::Main target will be created. + + +Don't forget to include SDLmain.h and SDLmain.m in your project for the +OS X framework based version. (Other versions link to -lSDL2main which +this module will try to find on your behalf.) Also for OS X, this +module will automatically add the -framework Cocoa on your behalf. + + +Additional Note: If you see an empty SDL2_LIBRARY in your project +configuration, it means CMake did not find your SDL2 library +(SDL2.dll, libsdl2.so, SDL2.framework, etc). Set SDL2_LIBRARY to point +to your SDL2 library, and configure again. Similarly, if you see an +empty SDL2MAIN_LIBRARY, you should set this value as appropriate. These +values are used to generate the final SDL2_LIBRARIES variable and the +SDL2::Core and SDL2::Main targets, but when these values are unset, +SDL2_LIBRARIES, SDL2::Core and SDL2::Main does not get created. + + +$SDL2DIR is an environment variable that would correspond to the +./configure --prefix=$SDL2DIR used in building SDL2. l.e.galup 9-20-02 + + + +Created by Amine Ben Hassouna: + Adapt FindSDL.cmake to SDL2 (FindSDL2.cmake). + Add cache variables for more flexibility: + SDL2_PATH, SDL2_NO_DEFAULT_PATH (for details, see doc above). + Mark 'Threads' as a required dependency for non-OSX systems. + Modernize the FindSDL2.cmake module by creating specific targets: + SDL2::Core and SDL2::Main (for details, see doc above). + + +Original FindSDL.cmake module: + Modified by Eric Wing. Added code to assist with automated building + by using environmental variables and providing a more + controlled/consistent search behavior. Added new modifications to + recognize OS X frameworks and additional Unix paths (FreeBSD, etc). + Also corrected the header search path to follow "proper" SDL + guidelines. Added a search for SDLmain which is needed by some + platforms. Added a search for threads which is needed by some + platforms. Added needed compile switches for MinGW. + +On OSX, this will prefer the Framework version (if found) over others. +People will have to manually change the cache value of SDL2_LIBRARY to +override this selection or set the SDL2_PATH variable or the CMake +environment CMAKE_INCLUDE_PATH to modify the search paths. + +Note that the header path has changed from SDL/SDL.h to just SDL.h +This needed to change because "proper" SDL convention is #include +"SDL.h", not . This is done for portability reasons +because not all systems place things in SDL/ (see FreeBSD). +#]=======================================================================] + +# Define options for searching SDL2 Library in a custom path + +set(SDL2_PATH "" CACHE STRING "Custom SDL2 Library path") + +set(_SDL2_NO_DEFAULT_PATH OFF) +if(SDL2_PATH) + set(_SDL2_NO_DEFAULT_PATH ON) +endif() + +set(SDL2_NO_DEFAULT_PATH ${_SDL2_NO_DEFAULT_PATH} + CACHE BOOL "Disable search SDL2 Library in default path") +unset(_SDL2_NO_DEFAULT_PATH) + +set(SDL2_NO_DEFAULT_PATH_CMD) +if(SDL2_NO_DEFAULT_PATH) + set(SDL2_NO_DEFAULT_PATH_CMD NO_DEFAULT_PATH) +endif() + +# Search for the SDL2 include directory +find_path(SDL2_INCLUDE_DIR SDL.h + HINTS + ENV SDL2DIR + ${SDL2_NO_DEFAULT_PATH_CMD} + PATH_SUFFIXES SDL2 + # path suffixes to search inside ENV{SDL2DIR} + include/SDL2 include + PATHS ${SDL2_PATH} + DOC "Where the SDL2 headers can be found" + ) + +set(SDL2_INCLUDE_DIRS "${SDL2_INCLUDE_DIR}") + +if(CMAKE_SIZEOF_VOID_P EQUAL 8) + set(VC_LIB_PATH_SUFFIX lib/x64) +else() + set(VC_LIB_PATH_SUFFIX lib/x86) +endif() + +# SDL-2.0 is the name used by FreeBSD ports... +# don't confuse it for the version number. +find_library(SDL2_LIBRARY + NAMES SDL2 SDL-2.0 + HINTS + ENV SDL2DIR + ${SDL2_NO_DEFAULT_PATH_CMD} + PATH_SUFFIXES lib ${VC_LIB_PATH_SUFFIX} + PATHS ${SDL2_PATH} + DOC "Where the SDL2 Library can be found" + ) + +set(SDL2_LIBRARIES "${SDL2_LIBRARY}") + +if(NOT SDL2_BUILDING_LIBRARY) + if(NOT SDL2_INCLUDE_DIR MATCHES ".framework") + # Non-OS X framework versions expect you to also dynamically link to + # SDL2main. This is mainly for Windows and OS X. Other (Unix) platforms + # seem to provide SDL2main for compatibility even though they don't + # necessarily need it. + + if(SDL2_PATH) + set(SDL2MAIN_LIBRARY_PATHS "${SDL2_PATH}") + endif() + + if(NOT SDL2_NO_DEFAULT_PATH) + set(SDL2MAIN_LIBRARY_PATHS + /sw + /opt/local + /opt/csw + /opt + "${SDL2MAIN_LIBRARY_PATHS}" + ) + endif() + + find_library(SDL2MAIN_LIBRARY + NAMES SDL2main + HINTS + ENV SDL2DIR + ${SDL2_NO_DEFAULT_PATH_CMD} + PATH_SUFFIXES lib ${VC_LIB_PATH_SUFFIX} + PATHS ${SDL2MAIN_LIBRARY_PATHS} + DOC "Where the SDL2main library can be found" + ) + unset(SDL2MAIN_LIBRARY_PATHS) + endif() +endif() + +# SDL2 may require threads on your system. +# The Apple build may not need an explicit flag because one of the +# frameworks may already provide it. +# But for non-OSX systems, I will use the CMake Threads package. +if(NOT APPLE) + find_package(Threads QUIET) + if(NOT Threads_FOUND) + set(SDL2_THREADS_NOT_FOUND "Could NOT find Threads (Threads is required by SDL2).") + if(SDL2_FIND_REQUIRED) + message(FATAL_ERROR ${SDL2_THREADS_NOT_FOUND}) + else() + if(NOT SDL2_FIND_QUIETLY) + message(STATUS ${SDL2_THREADS_NOT_FOUND}) + endif() + return() + endif() + unset(SDL2_THREADS_NOT_FOUND) + endif() +endif() + +# MinGW needs an additional link flag, -mwindows +# It's total link flags should look like -lmingw32 -lSDL2main -lSDL2 -mwindows +if(MINGW) + set(MINGW32_LIBRARY mingw32 "-mwindows" CACHE STRING "link flags for MinGW") +endif() + +if(SDL2_LIBRARY) + # For SDL2main + if(SDL2MAIN_LIBRARY AND NOT SDL2_BUILDING_LIBRARY) + list(FIND SDL2_LIBRARIES "${SDL2MAIN_LIBRARY}" _SDL2_MAIN_INDEX) + if(_SDL2_MAIN_INDEX EQUAL -1) + set(SDL2_LIBRARIES "${SDL2MAIN_LIBRARY}" ${SDL2_LIBRARIES}) + endif() + unset(_SDL2_MAIN_INDEX) + endif() + + # For OS X, SDL2 uses Cocoa as a backend so it must link to Cocoa. + # CMake doesn't display the -framework Cocoa string in the UI even + # though it actually is there if I modify a pre-used variable. + # I think it has something to do with the CACHE STRING. + # So I use a temporary variable until the end so I can set the + # "real" variable in one-shot. + if(APPLE) + set(SDL2_LIBRARIES ${SDL2_LIBRARIES} -framework Cocoa) + endif() + + # For threads, as mentioned Apple doesn't need this. + # In fact, there seems to be a problem if I used the Threads package + # and try using this line, so I'm just skipping it entirely for OS X. + if(NOT APPLE) + set(SDL2_LIBRARIES ${SDL2_LIBRARIES} ${CMAKE_THREAD_LIBS_INIT}) + endif() + + # For MinGW library + if(MINGW) + set(SDL2_LIBRARIES ${MINGW32_LIBRARY} ${SDL2_LIBRARIES}) + endif() + +endif() + +# Read SDL2 version +if(SDL2_INCLUDE_DIR AND EXISTS "${SDL2_INCLUDE_DIR}/SDL_version.h") + file(STRINGS "${SDL2_INCLUDE_DIR}/SDL_version.h" SDL2_VERSION_MAJOR_LINE REGEX "^#define[ \t]+SDL_MAJOR_VERSION[ \t]+[0-9]+$") + file(STRINGS "${SDL2_INCLUDE_DIR}/SDL_version.h" SDL2_VERSION_MINOR_LINE REGEX "^#define[ \t]+SDL_MINOR_VERSION[ \t]+[0-9]+$") + file(STRINGS "${SDL2_INCLUDE_DIR}/SDL_version.h" SDL2_VERSION_PATCH_LINE REGEX "^#define[ \t]+SDL_PATCHLEVEL[ \t]+[0-9]+$") + string(REGEX REPLACE "^#define[ \t]+SDL_MAJOR_VERSION[ \t]+([0-9]+)$" "\\1" SDL2_VERSION_MAJOR "${SDL2_VERSION_MAJOR_LINE}") + string(REGEX REPLACE "^#define[ \t]+SDL_MINOR_VERSION[ \t]+([0-9]+)$" "\\1" SDL2_VERSION_MINOR "${SDL2_VERSION_MINOR_LINE}") + string(REGEX REPLACE "^#define[ \t]+SDL_PATCHLEVEL[ \t]+([0-9]+)$" "\\1" SDL2_VERSION_PATCH "${SDL2_VERSION_PATCH_LINE}") + set(SDL2_VERSION_STRING ${SDL2_VERSION_MAJOR}.${SDL2_VERSION_MINOR}.${SDL2_VERSION_PATCH}) + unset(SDL2_VERSION_MAJOR_LINE) + unset(SDL2_VERSION_MINOR_LINE) + unset(SDL2_VERSION_PATCH_LINE) + unset(SDL2_VERSION_MAJOR) + unset(SDL2_VERSION_MINOR) + unset(SDL2_VERSION_PATCH) +endif() + +include(FindPackageHandleStandardArgs) + +FIND_PACKAGE_HANDLE_STANDARD_ARGS(SDL2 + REQUIRED_VARS SDL2_LIBRARY SDL2_INCLUDE_DIR + VERSION_VAR SDL2_VERSION_STRING) + +if(SDL2MAIN_LIBRARY) + FIND_PACKAGE_HANDLE_STANDARD_ARGS(SDL2main + REQUIRED_VARS SDL2MAIN_LIBRARY SDL2_INCLUDE_DIR + VERSION_VAR SDL2_VERSION_STRING) +endif() + + +mark_as_advanced(SDL2_PATH + SDL2_NO_DEFAULT_PATH + SDL2_LIBRARY + SDL2MAIN_LIBRARY + SDL2_INCLUDE_DIR + SDL2_BUILDING_LIBRARY) + + +# SDL2:: targets (SDL2::Core and SDL2::Main) +if(SDL2_FOUND) + + # SDL2::Core target + if(SDL2_LIBRARY AND NOT TARGET SDL2::Core) + add_library(SDL2::Core UNKNOWN IMPORTED) + set_target_properties(SDL2::Core PROPERTIES + IMPORTED_LOCATION "${SDL2_LIBRARY}" + INTERFACE_INCLUDE_DIRECTORIES "${SDL2_INCLUDE_DIR}") + + if(APPLE) + # For OS X, SDL2 uses Cocoa as a backend so it must link to Cocoa. + # For more details, please see above. + set_property(TARGET SDL2::Core APPEND PROPERTY + INTERFACE_LINK_OPTIONS -framework Cocoa) + else() + # For threads, as mentioned Apple doesn't need this. + # For more details, please see above. + set_property(TARGET SDL2::Core APPEND PROPERTY + INTERFACE_LINK_LIBRARIES Threads::Threads) + endif() + endif() + + # SDL2::Main target + # Applications should link to SDL2::Main instead of SDL2::Core + # For more details, please see above. + if(NOT SDL2_BUILDING_LIBRARY AND NOT TARGET SDL2::Main) + + if(SDL2_INCLUDE_DIR MATCHES ".framework" OR NOT SDL2MAIN_LIBRARY) + add_library(SDL2::Main INTERFACE IMPORTED) + set_property(TARGET SDL2::Main PROPERTY + INTERFACE_LINK_LIBRARIES SDL2::Core) + elseif(SDL2MAIN_LIBRARY) + # MinGW requires that the mingw32 library is specified before the + # libSDL2main.a static library when linking. + # The SDL2::MainInternal target is used internally to make sure that + # CMake respects this condition. + add_library(SDL2::MainInternal UNKNOWN IMPORTED) + set_property(TARGET SDL2::MainInternal PROPERTY + IMPORTED_LOCATION "${SDL2MAIN_LIBRARY}") + set_property(TARGET SDL2::MainInternal PROPERTY + INTERFACE_LINK_LIBRARIES SDL2::Core) + + add_library(SDL2::Main INTERFACE IMPORTED) + + if(MINGW) + # MinGW needs an additional link flag '-mwindows' and link to mingw32 + set_property(TARGET SDL2::Main PROPERTY + INTERFACE_LINK_LIBRARIES "mingw32" "-mwindows") + endif() + + set_property(TARGET SDL2::Main APPEND PROPERTY + INTERFACE_LINK_LIBRARIES SDL2::MainInternal) + endif() + + endif() +endif() \ No newline at end of file diff --git a/packaging/windows/wipeout.exe.manifest b/packaging/windows/wipeout.exe.manifest new file mode 100644 index 0000000..92c5193 --- /dev/null +++ b/packaging/windows/wipeout.exe.manifest @@ -0,0 +1,8 @@ + + + + + true/pm + + + \ No newline at end of file diff --git a/packaging/windows/wipeout.ico b/packaging/windows/wipeout.ico new file mode 100644 index 0000000000000000000000000000000000000000..9d3e7e93e4dc876fe683c37e33a4153c064552ed GIT binary patch literal 766 zcmeHDF%AMT4D%rdwlXnyyl33g@`HS-&tde~t=M-QIw3YDB%C^qn<%OZOp02sFzzSd zCY{A9F5-l