premake/projects/SDL2.lua
author Sam Lantinga <slouken@libsdl.org>
Sat, 02 Jan 2016 10:10:34 -0800
changeset 9998 f67cf37e9cd4
parent 9876 1496e502e51d
child 10346 53f48bdf161f
permissions -rwxr-xr-x
Updated copyright to 2016
     1 -- Copyright (C) 1997-2016 Sam Lantinga <slouken@libsdl.org>
     2 --
     3 -- This software is provided 'as-is', without any express or implied
     4 -- warranty.  In no event will the authors be held liable for any damages
     5 -- arising from the use of this software.
     6 --
     7 -- Permission is granted to anyone to use this software for any purpose,
     8 -- including commercial applications, and to alter it and redistribute it
     9 -- freely.
    10 --
    11 -- Meta-build system using premake created and maintained by
    12 -- Benjamin Henning <b.henning@digipen.edu>
    13 
    14 --[[
    15 SDL2.lua
    16 
    17 	This file provides the project definition for the entire SDL2 library, on all
    18 	platforms supported by the meta-build system. That includes Windows, MinGW,
    19 	Cygwin, Mac OS X, iOS, and Linux. This project is responsible for setting up
    20 	the source trees and the complicated dependencies required to build the
    21 	final SDL2 library. In order to simplify this process, the library is split
    22 	into several different segments. Each segment focuses on a different
    23 	dependency and series of configurations which are thrown into the generated
    24 	config header file, used to build this project.
    25 ]]
    26 
    27 SDL_project "SDL2"
    28 	 SDL_isos "windows|mingw" -- all other bindings should be a shared library
    29 		SDL_kind "SharedLib"
    30 	SDL_isos "macosx|ios" -- macosx employs a static linking
    31 		SDL_kind "StaticLib"
    32 	-- the way premake generates project dependencies and how that affects linkage
    33 	-- makes it difficult to use shared libraries on Linux. Cygwin has issues
    34 	-- binding to GetProcAddress, so a static library is an easy fix.
    35 	SDL_isos "linux|cygwin"
    36 		SDL_kind "StaticLib"
    37 
    38 	SDL_language "C++"
    39 	SDL_sourcedir "../src"
    40 	-- primary platforms
    41 	SDL_isos "ios"
    42 		SDL_platforms { "iOS" }
    43 	SDL_isnotos "ios"
    44 		SDL_platforms { "native" }
    45 	-- additional platforms
    46 	SDL_isos "macosx"
    47 		SDL_platforms { "universal" }
    48 	SDL_isos "windows|mingw"
    49 		SDL_defines { "_WINDOWS" }
    50 
    51 	-- Following is the dependency tree for SDL2
    52 	-- (no SDL_os call means platform-independent)
    53 
    54 	-- The core and minimal of the SDL2 library. This will not quite build
    55 	-- standalone, but it's doable with a bit of tweaking to build this using the
    56 	-- minimal configuration header. This is a good start to adding SDL support to
    57 	-- new platforms.
    58 	SDL_config
    59 	{
    60 		["SDL_AUDIO_DRIVER_DISK"] = 1,
    61 		["SDL_AUDIO_DRIVER_DUMMY"] = 1,
    62 		["SDL_VIDEO_DRIVER_DUMMY"] = 1
    63 	}
    64 	SDL_paths
    65 	{
    66 		"/",
    67 		"/atomic/",
    68 		"/audio/",
    69 		"/audio/disk/",
    70 		"/audio/dummy/",
    71 		"/cpuinfo/",
    72 		"/dynapi/",
    73 		"/events/",
    74 		"/file/",
    75 		"/haptic/",
    76 		"/joystick/",
    77 		"/power/",
    78 		"/render/",
    79 		"/render/software/",
    80 		"/stdlib/",
    81 		"/thread/",
    82 		"/timer/",
    83 		"/video/",
    84 		"/video/dummy/"
    85 	}
    86 
    87 	-- SDL2 on Windows
    88 	SDL_dependency "windows"
    89 		SDL_os "windows|mingw"
    90 		SDL_links { "imm32", "oleaut32", "winmm", "version" }
    91 		-- these are the links that Visual Studio includes by default
    92 		SDL_links { "kernel32", "user32", "gdi32", "winspool",
    93 			"comdlg32", "advapi32", "shell32", "ole32",
    94 			"oleaut32", "uuid", "odbc32", "odbccp32" }
    95 		SDL_config
    96 		{
    97 			["SDL_LOADSO_WINDOWS"] = 1,
    98 			["SDL_THREAD_WINDOWS"] = 1,
    99 			["SDL_TIMER_WINDOWS"] = 1,
   100 			["SDL_VIDEO_DRIVER_WINDOWS"] = 1,
   101 			["SDL_POWER_WINDOWS"] = 1,
   102 			["SDL_AUDIO_DRIVER_WINMM"] = 1,
   103 			["SDL_FILESYSTEM_WINDOWS"] = 1
   104 		}
   105 		SDL_paths
   106 		{
   107 			"/audio/winmm/",
   108 			"/core/windows/",
   109 			"/libm/",
   110 			"/loadso/windows/",
   111 			"/power/windows/",
   112 			"/thread/windows/",
   113 			"/timer/windows/",
   114 			"/video/windows/",
   115 			"/filesystem/windows/"
   116 		}
   117 		SDL_files
   118 		{
   119 			-- these files have to be specified uniquely to avoid double
   120 			-- and incorrect linking
   121 			"/thread/generic/SDL_syscond.c",
   122 			"/thread/generic/SDL_sysmutex_c.h"
   123 		}
   124 
   125 	-- DirectX dependency
   126 	SDL_dependency "directx"
   127 		SDL_os "windows|mingw"
   128 		SDL_depfunc "DirectX"
   129 		SDL_config
   130 		{
   131 			["SDL_AUDIO_DRIVER_DSOUND"] = 1,
   132 			["SDL_AUDIO_DRIVER_XAUDIO2"] = 1,
   133 			["SDL_JOYSTICK_DINPUT"] = 1,
   134 			["SDL_HAPTIC_DINPUT"] = 1,
   135 			["SDL_VIDEO_RENDER_D3D"] = 1
   136 		}
   137 		SDL_paths
   138 		{
   139 			"/audio/directsound/",
   140 			"/audio/xaudio2/",
   141 			"/render/direct3d/",
   142 			-- these two depend on Xinput
   143 			"/haptic/windows/",
   144 			"/joystick/windows/",
   145 		}
   146 	-- in case DirectX was not found
   147 	SDL_dependency "notdirectx"
   148 		SDL_os "windows|mingw"
   149 		SDL_notdepfunc "DirectX"
   150 		SDL_config
   151 		{
   152 			-- enable dummy systems (same as disabling them)
   153 			["SDL_HAPTIC_DUMMY"] = 1,
   154 			["SDL_JOYSTICK_DUMMY"] = 1
   155 		}
   156 		SDL_paths
   157 		{
   158 			-- since we don't have Xinput
   159 			"/haptic/dummy/",
   160 			"/joystick/dummy/",
   161 		}
   162 
   163 	-- OpenGL dependency
   164 	SDL_dependency "opengl"
   165 		SDL_depfunc "OpenGL"
   166 		SDL_config
   167 		{
   168 			["SDL_VIDEO_OPENGL"] = 1,
   169 			["SDL_VIDEO_RENDER_OGL"] = 1
   170 		}
   171 		SDL_paths { "/render/opengl/" }
   172 	-- WGL dependency for OpenGL on Windows
   173 	SDL_dependency "opengl-windows"
   174 		SDL_os "windows|mingw"
   175 		SDL_depfunc "OpenGL"
   176 		SDL_config { ["SDL_VIDEO_OPENGL_WGL"] = 1 }
   177 	-- GLX dependency for OpenGL on Linux
   178 	SDL_dependency "opengl-linux"
   179 		SDL_os "linux"
   180 		SDL_depfunc "OpenGL"
   181 		SDL_config { ["SDL_VIDEO_OPENGL_GLX"] = 1 }
   182 
   183 	-- SDL2 on Mac OS X
   184 	SDL_dependency "macosx"
   185 		SDL_os "macosx"
   186 		SDL_config
   187 		{
   188 			["SDL_AUDIO_DRIVER_COREAUDIO"] = 1,
   189 			["SDL_JOYSTICK_IOKIT"] = 1,
   190 			["SDL_HAPTIC_IOKIT"] = 1,
   191 			["SDL_LOADSO_DLOPEN"] = 1,
   192 			["SDL_THREAD_PTHREAD"] = 1,
   193 			["SDL_THREAD_PTHREAD_RECURSIVE_MUTEX"] = 1,
   194 			["SDL_TIMER_UNIX"] = 1,
   195 			["SDL_VIDEO_DRIVER_COCOA"] = 1,
   196 			["SDL_POWER_MACOSX"] = 1,
   197 			["SDL_FILESYSTEM_COCOA"] = 1
   198 		}
   199 		SDL_paths
   200 		{
   201 			"/audio/coreaudio/",
   202 			"/file/cocoa/",
   203 			"/haptic/darwin/",
   204 			"/joystick/darwin/",
   205 			"/loadso/dlopen/",
   206 			"/power/macosx/",
   207 			"/render/opengl/",
   208 			"/thread/pthread/",
   209 			"/timer/unix/",
   210 			"/video/cocoa/",
   211 			"/video/x11/",
   212 			"/filesystem/cocoa/"
   213 		}
   214 		SDL_links
   215 		{
   216 			"CoreVideo.framework",
   217 			"AudioToolbox.framework",
   218 			"AudioUnit.framework",
   219 			"Cocoa.framework",
   220 			"CoreAudio.framework",
   221 			"IOKit.framework",
   222 			"Carbon.framework",
   223 			"ForceFeedback.framework",
   224 			"CoreFoundation.framework"
   225 		}
   226 
   227 	-- Linux dependency: DLOpen
   228 	SDL_dependency "linux-dlopen"
   229 		SDL_os "linux"
   230 		SDL_depfunc "DLOpen"
   231 		SDL_paths { "/loadso/dlopen/" }
   232 		SDL_config { ["SDL_LOADSO_DLOPEN"] = 1 }
   233 	-- Linux dependency: ALSA
   234 	SDL_dependency "linux-alsa"
   235 		SDL_os "linux"
   236 		SDL_depfunc "ALSA"
   237 		SDL_paths { "/audio/alsa/" }
   238 		SDL_config
   239 		{
   240 			["SDL_AUDIO_DRIVER_ALSA"] = 1,
   241 			["SDL_AUDIO_DRIVER_ALSA_DYNAMIC"] = '"libasound.so"'
   242 		}
   243 	-- Linux dependency: PulseAudio
   244 	SDL_dependency "linux-pulseaudio"
   245 		SDL_os "linux"
   246 		SDL_depfunc "PulseAudio"
   247 		SDL_paths { "/audio/pulseaudio/" }
   248 		SDL_config
   249 		{
   250 			["SDL_AUDIO_DRIVER_PULSEAUDIO"] = 1,
   251 			["SDL_AUDIO_DRIVER_PULSEAUDIO_DYNAMIC"] = '"libpulse-simple.so"'
   252 		}
   253 	-- Linux dependency: ESD
   254 	SDL_dependency "linux-esd"
   255 		SDL_os "linux"
   256 		SDL_depfunc "ESD"
   257 		SDL_paths { "/audio/esd/" }
   258 		SDL_config
   259 		{
   260 			["SDL_AUDIO_DRIVER_ESD"] = 1,
   261 			["SDL_AUDIO_DRIVER_ESD_DYNAMIC"] = '"libesd.so"'
   262 		}
   263 	-- Linux dependency: NAS
   264 	SDL_dependency "linux-nas"
   265 		SDL_os "linux"
   266 		SDL_depfunc "NAS"
   267 		SDL_paths { "/audio/nas/" }
   268 		SDL_config
   269 		{
   270 			["SDL_AUDIO_DRIVER_NAS"] = 1,
   271 			["SDL_AUDIO_DRIVER_NAS_DYNAMIC"] = '"libaudio.so"'
   272 		}
   273 	-- Linux dependency: OSS
   274 	SDL_dependency "linux-oss"
   275 		SDL_os "linux"
   276 		SDL_depfunc "OSS"
   277 		SDL_paths { "/audio/dsp/" }
   278 		SDL_config { ["SDL_AUDIO_DRIVER_OSS"] = 1 }
   279 	-- Linux dependency: X11
   280 	SDL_dependency "linux-x11"
   281 		SDL_os "linux"
   282 		SDL_depfunc "X11"
   283 		SDL_paths { "/video/x11/" }
   284 		SDL_config
   285 		{
   286 			["SDL_VIDEO_DRIVER_X11"] = 1,
   287 			["SDL_VIDEO_DRIVER_X11_DYNAMIC"] = '"libX11.so"',
   288 			["SDL_VIDEO_DRIVER_X11_DYNAMIC_XEXT"] = '"libXext.so"',
   289 			["SDL_VIDEO_DRIVER_X11_DYNAMIC_XCURSOR"] = '"libXcursor.so"',
   290 			["SDL_VIDEO_DRIVER_X11_DYNAMIC_XINERAMA"] = '"libXinerama.so"',
   291 			["SDL_VIDEO_DRIVER_X11_DYNAMIC_XINPUT2"] = '"libXi.so"',
   292 			["SDL_VIDEO_DRIVER_X11_DYNAMIC_XRANDR"] = '"libXrandr.so"',
   293 			["SDL_VIDEO_DRIVER_X11_DYNAMIC_XSS"] = '"libXss.so"',
   294 			["SDL_VIDEO_DRIVER_X11_DYNAMIC_XVIDMODE"] = '"libXxf86vm.so"',
   295 			["SDL_VIDEO_DRIVER_X11_XCURSOR"] = 1,
   296 			["SDL_VIDEO_DRIVER_X11_XDBE"] = 1,
   297 			["SDL_VIDEO_DRIVER_X11_XINERAMA"] = 1,
   298 			["SDL_VIDEO_DRIVER_X11_XINPUT2"] = 1,
   299 			["SDL_VIDEO_DRIVER_X11_XINPUT2_SUPPORTS_MULTITOUCH"] = 1,
   300 			["SDL_VIDEO_DRIVER_X11_XRANDR"] = 1,
   301 			["SDL_VIDEO_DRIVER_X11_XSCRNSAVER"] = 1,
   302 			["SDL_VIDEO_DRIVER_X11_XSHAPE"] = 1,
   303 			["SDL_VIDEO_DRIVER_X11_XVIDMODE"] = 1,
   304 			["SDL_VIDEO_DRIVER_X11_SUPPORTS_GENERIC_EVENTS"] = 1,
   305 			["SDL_VIDEO_DRIVER_X11_CONST_PARAM_XEXTADDDISPLAY"] = 1,
   306 			["SDL_VIDEO_DRIVER_X11_HAS_XKBKEYCODETOKEYSYM"] = 1
   307 		}
   308 	-- SDL2 on Linux
   309 	SDL_dependency "linux"
   310 		SDL_os "linux"
   311 		SDL_depfunc "DBus"
   312 		SDL_config
   313 		{
   314 			["SDL_INPUT_LINUXEV"] = 1,
   315 			["SDL_JOYSTICK_LINUX"] = 1,
   316 			["SDL_HAPTIC_LINUX"] = 1,
   317 			["SDL_THREAD_PTHREAD"] = 1,
   318 			["SDL_THREAD_PTHREAD_RECURSIVE_MUTEX"] = 1,
   319 			["SDL_TIMER_UNIX"] = 1,
   320 			["SDL_POWER_LINUX"] = 1,
   321 			["SDL_FILESYSTEM_UNIX"] = 1,
   322 		}
   323 		SDL_paths
   324 		{
   325 			"/haptic/linux/",
   326 			"/joystick/linux/",
   327 			"/power/linux/",
   328 			"/thread/pthread/",
   329 			"/timer/unix/",
   330 			"/filesystem/unix/"
   331 		}
   332 		SDL_links
   333 		{
   334 			"m",
   335 			"pthread",
   336 			"rt"
   337 		}
   338 
   339 	-- SDL2 on Cygwin (not quite working yet)
   340 	SDL_dependency "cygwin"
   341 		SDL_os "cygwin"
   342 		SDL_config
   343 		{
   344 			['SDL_JOYSTICK_DISABLED'] = 1,
   345 			['SDL_HAPTIC_DISABLED'] = 1,
   346 			['SDL_LOADSO_DLOPEN'] = 1,
   347 			['SDL_THREAD_PTHREAD'] = 1,
   348 			['SDL_THREAD_PTHREAD_RECURSIVE_MUTEX'] = 1,
   349 			['SDL_TIMER_UNIX'] = 1,
   350 			['SDL_FILESYSTEM_UNIX'] = 1,
   351 			['SDL_POWER_LINUX'] = 1
   352 		}
   353 		SDL_paths
   354 		{
   355 			"/loadso/dlopen/",
   356 			"/power/linux/",
   357 			"/render/opengl/",
   358 			"/thread/pthread/",
   359 			"/timer/unix/",
   360 			"/filesystem/unix/",
   361 			"/libm/"
   362 		}
   363 
   364 	-- SDL2 on iOS
   365 	SDL_dependency "iphoneos"
   366 		SDL_os "ios"
   367 		SDL_config
   368 		{
   369 			["SDL_AUDIO_DRIVER_COREAUDIO"] = 1,
   370 			["SDL_JOYSTICK_MFI"] = 1,
   371 			["SDL_HAPTIC_DISABLED"] = 1,
   372 			["SDL_LOADSO_DISABLED"] = 1,
   373 			["SDL_THREAD_PTHREAD"] = 1,
   374 			["SDL_THREAD_PTHREAD_RECURSIVE_MUTEX"] = 1,
   375 			["SDL_TIMER_UNIX"] = 1,
   376 			["SDL_VIDEO_DRIVER_UIKIT"] = 1,
   377 			["SDL_VIDEO_OPENGL_ES"] = 1,
   378 			["SDL_VIDEO_RENDER_OGL_ES"] = 1,
   379 			["SDL_VIDEO_RENDER_OGL_ES2"] = 1,
   380 			["SDL_POWER_UIKIT"] = 1,
   381 			["SDL_IPHONE_KEYBOARD"] = 1,
   382 			["SDL_FILESYSTEM_COCOA"] = 1
   383 		}
   384 		SDL_paths
   385 		{
   386 			"/audio/coreaudio/",
   387 			"/file/cocoa/",
   388 			"/joystick/iphoneos/",
   389 			"/loadso/dlopen/",
   390 			"/power/uikit/",
   391 			"/render/opengles/",
   392 			"/render/opengles2/",
   393 			"/thread/pthread/",
   394 			"/timer/unix/",
   395 			"/video/uikit/",
   396 			"/filesystem/cocoa/"
   397 		}
   398 		SDL_links
   399 		{
   400 			"$(SDKROOT)/AudioToolbox.framework",
   401 			"$(SDKROOT)/QuartzCore.framework",
   402 			"$(SDKROOT)/OpenGLES.framework",
   403 			"$(SDKROOT)/CoreGraphics.framework",
   404 			"$(SDKROOT)/UIKit.framework",
   405 			"$(SDKROOT)/Foundation.framework",
   406 			"$(SDKROOT)/CoreAudio.framework",
   407 			"$(SDKROOT)/CoreMotion.framework",
   408 			"$(SDKROOT)/GameController.framework"
   409 		}