diff options
author | 3gg <3gg@shellblade.net> | 2024-05-04 16:51:29 -0700 |
---|---|---|
committer | 3gg <3gg@shellblade.net> | 2024-05-04 16:51:29 -0700 |
commit | 8222bfe56d4dabe8d92fc4b25ea1b0163b16f3e1 (patch) | |
tree | 763389e42276035ac134d94eb1dc32293b88d807 /src/contrib/SDL-2.30.2/docs/README-cmake.md |
Initial commit.
Diffstat (limited to 'src/contrib/SDL-2.30.2/docs/README-cmake.md')
-rw-r--r-- | src/contrib/SDL-2.30.2/docs/README-cmake.md | 163 |
1 files changed, 163 insertions, 0 deletions
diff --git a/src/contrib/SDL-2.30.2/docs/README-cmake.md b/src/contrib/SDL-2.30.2/docs/README-cmake.md new file mode 100644 index 0000000..cfd4066 --- /dev/null +++ b/src/contrib/SDL-2.30.2/docs/README-cmake.md | |||
@@ -0,0 +1,163 @@ | |||
1 | # CMake | ||
2 | |||
3 | (www.cmake.org) | ||
4 | |||
5 | SDL's build system was traditionally based on autotools. Over time, this | ||
6 | approach has suffered from several issues across the different supported | ||
7 | platforms. | ||
8 | To solve these problems, a new build system based on CMake was introduced. | ||
9 | It is developed in parallel to the legacy autotools build system, so users | ||
10 | can experiment with it without complication. | ||
11 | |||
12 | The CMake build system is supported on the following platforms: | ||
13 | |||
14 | * FreeBSD | ||
15 | * Linux | ||
16 | * Microsoft Visual C | ||
17 | * MinGW and Msys | ||
18 | * macOS, iOS, and tvOS, with support for XCode | ||
19 | * Android | ||
20 | * Emscripten | ||
21 | * RiscOS | ||
22 | * Playstation Vita | ||
23 | |||
24 | ## Building SDL | ||
25 | |||
26 | Assuming the source for SDL is located at `~/sdl` | ||
27 | ```sh | ||
28 | cd ~ | ||
29 | mkdir build | ||
30 | cd build | ||
31 | cmake ~/sdl | ||
32 | cmake --build . | ||
33 | ``` | ||
34 | |||
35 | This will build the static and dynamic versions of SDL in the `~/build` directory. | ||
36 | Installation can be done using: | ||
37 | |||
38 | ```sh | ||
39 | cmake --install . # '--install' requires CMake 3.15, or newer | ||
40 | ``` | ||
41 | |||
42 | ## Including SDL in your project | ||
43 | |||
44 | SDL can be included in your project in 2 major ways: | ||
45 | - using a system SDL library, provided by your (*nix) distribution or a package manager | ||
46 | - using a vendored SDL library: this is SDL copied or symlinked in a subfolder. | ||
47 | |||
48 | The following CMake script supports both, depending on the value of `MYGAME_VENDORED`. | ||
49 | |||
50 | ```cmake | ||
51 | cmake_minimum_required(VERSION 3.5) | ||
52 | project(mygame) | ||
53 | |||
54 | # Create an option to switch between a system sdl library and a vendored sdl library | ||
55 | option(MYGAME_VENDORED "Use vendored libraries" OFF) | ||
56 | |||
57 | if(MYGAME_VENDORED) | ||
58 | add_subdirectory(vendored/sdl EXCLUDE_FROM_ALL) | ||
59 | else() | ||
60 | # 1. Look for a SDL2 package, 2. look for the SDL2 component and 3. fail if none can be found | ||
61 | find_package(SDL2 REQUIRED CONFIG REQUIRED COMPONENTS SDL2) | ||
62 | |||
63 | # 1. Look for a SDL2 package, 2. Look for the SDL2maincomponent and 3. DO NOT fail when SDL2main is not available | ||
64 | find_package(SDL2 REQUIRED CONFIG COMPONENTS SDL2main) | ||
65 | endif() | ||
66 | |||
67 | # Create your game executable target as usual | ||
68 | add_executable(mygame WIN32 mygame.c) | ||
69 | |||
70 | # SDL2::SDL2main may or may not be available. It is e.g. required by Windows GUI applications | ||
71 | if(TARGET SDL2::SDL2main) | ||
72 | # It has an implicit dependency on SDL2 functions, so it MUST be added before SDL2::SDL2 (or SDL2::SDL2-static) | ||
73 | target_link_libraries(mygame PRIVATE SDL2::SDL2main) | ||
74 | endif() | ||
75 | |||
76 | # Link to the actual SDL2 library. SDL2::SDL2 is the shared SDL library, SDL2::SDL2-static is the static SDL libarary. | ||
77 | target_link_libraries(mygame PRIVATE SDL2::SDL2) | ||
78 | ``` | ||
79 | |||
80 | ### A system SDL library | ||
81 | |||
82 | For CMake to find SDL, it must be installed in [a default location CMake is looking for](https://cmake.org/cmake/help/latest/command/find_package.html#config-mode-search-procedure). | ||
83 | |||
84 | The following components are available, to be used as an argument of `find_package`. | ||
85 | |||
86 | | Component name | Description | | ||
87 | |----------------|--------------------------------------------------------------------------------------------| | ||
88 | | SDL2 | The SDL2 shared library, available through the `SDL2::SDL2` target [^SDL_TARGET_EXCEPTION] | | ||
89 | | SDL2-static | The SDL2 static library, available through the `SDL2::SDL2-static` target | | ||
90 | | SDL2main | The SDL2main static library, available through the `SDL2::SDL2main` target | | ||
91 | | SDL2test | The SDL2test static library, available through the `SDL2::SDL2test` target | | ||
92 | |||
93 | ### Using a vendored SDL | ||
94 | |||
95 | This only requires a copy of SDL in a subdirectory. | ||
96 | |||
97 | ## CMake configuration options for platforms | ||
98 | |||
99 | ### iOS/tvOS | ||
100 | |||
101 | CMake 3.14+ natively includes support for iOS and tvOS. SDL binaries may be built | ||
102 | using Xcode or Make, possibly among other build-systems. | ||
103 | |||
104 | When using a recent version of CMake (3.14+), it should be possible to: | ||
105 | |||
106 | - build SDL for iOS, both static and dynamic | ||
107 | - build SDL test apps (as iOS/tvOS .app bundles) | ||
108 | - generate a working SDL_config.h for iOS (using SDL_config.h.cmake as a basis) | ||
109 | |||
110 | To use, set the following CMake variables when running CMake's configuration stage: | ||
111 | |||
112 | - `CMAKE_SYSTEM_NAME=<OS>` (either `iOS` or `tvOS`) | ||
113 | - `CMAKE_OSX_SYSROOT=<SDK>` (examples: `iphoneos`, `iphonesimulator`, `iphoneos12.4`, `/full/path/to/iPhoneOS.sdk`, | ||
114 | `appletvos`, `appletvsimulator`, `appletvos12.4`, `/full/path/to/AppleTVOS.sdk`, etc.) | ||
115 | - `CMAKE_OSX_ARCHITECTURES=<semicolon-separated list of CPU architectures>` (example: "arm64;armv7s;x86_64") | ||
116 | |||
117 | |||
118 | #### Examples | ||
119 | |||
120 | - for iOS-Simulator, using the latest, installed SDK: | ||
121 | |||
122 | ```bash | ||
123 | cmake ~/sdl -DCMAKE_SYSTEM_NAME=iOS -DCMAKE_OSX_SYSROOT=iphonesimulator -DCMAKE_OSX_ARCHITECTURES=x86_64 | ||
124 | ``` | ||
125 | |||
126 | - for iOS-Device, using the latest, installed SDK, 64-bit only | ||
127 | |||
128 | ```bash | ||
129 | cmake ~/sdl -DCMAKE_SYSTEM_NAME=iOS -DCMAKE_OSX_SYSROOT=iphoneos -DCMAKE_OSX_ARCHITECTURES=arm64 | ||
130 | ``` | ||
131 | |||
132 | - for iOS-Device, using the latest, installed SDK, mixed 32/64 bit | ||
133 | |||
134 | ```cmake | ||
135 | cmake ~/sdl -DCMAKE_SYSTEM_NAME=iOS -DCMAKE_OSX_SYSROOT=iphoneos -DCMAKE_OSX_ARCHITECTURES="arm64;armv7s" | ||
136 | ``` | ||
137 | |||
138 | - for iOS-Device, using a specific SDK revision (iOS 12.4, in this example): | ||
139 | |||
140 | ```cmake | ||
141 | cmake ~/sdl -DCMAKE_SYSTEM_NAME=iOS -DCMAKE_OSX_SYSROOT=iphoneos12.4 -DCMAKE_OSX_ARCHITECTURES=arm64 | ||
142 | ``` | ||
143 | |||
144 | - for iOS-Simulator, using the latest, installed SDK, and building SDL test apps (as .app bundles): | ||
145 | |||
146 | ```cmake | ||
147 | cmake ~/sdl -DSDL_TESTS=1 -DCMAKE_SYSTEM_NAME=iOS -DCMAKE_OSX_SYSROOT=iphonesimulator -DCMAKE_OSX_ARCHITECTURES=x86_64 | ||
148 | ``` | ||
149 | |||
150 | - for tvOS-Simulator, using the latest, installed SDK: | ||
151 | |||
152 | ```cmake | ||
153 | cmake ~/sdl -DCMAKE_SYSTEM_NAME=tvOS -DCMAKE_OSX_SYSROOT=appletvsimulator -DCMAKE_OSX_ARCHITECTURES=x86_64 | ||
154 | ``` | ||
155 | |||
156 | - for tvOS-Device, using the latest, installed SDK: | ||
157 | |||
158 | ```cmake | ||
159 | cmake ~/sdl -DCMAKE_SYSTEM_NAME=tvOS -DCMAKE_OSX_SYSROOT=appletvos -DCMAKE_OSX_ARCHITECTURES=arm64` | ||
160 | ``` | ||
161 | |||
162 | |||
163 | [^SDL_TARGET_EXCEPTION]: `SDL2::SDL2` can be an ALIAS to a static `SDL2::SDL2-static` target for multiple reasons. | ||