premake/README.txt
author Ryan C. Gordon <icculus@icculus.org>
Fri, 12 Aug 2016 19:59:00 -0400
changeset 10266 c09f06c4e8c8
parent 7925 f090a47eb7f7
permissions -rwxr-xr-x
emscripten: send fake mouse events for touches, like other targets do. (This really should be handled at the higher level and not in the individual targets, but this fixes the immediate bug.)
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
7925
f090a47eb7f7 Added Ben Henning's GSoC2013 work: premake build system.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff changeset
     1
Author: Ben Henning <b.henning@digipen.edu>
f090a47eb7f7 Added Ben Henning's GSoC2013 work: premake build system.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff changeset
     2
f090a47eb7f7 Added Ben Henning's GSoC2013 work: premake build system.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff changeset
     3
The goal of this project is to provide a lightweight and portable meta-build
f090a47eb7f7 Added Ben Henning's GSoC2013 work: premake build system.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff changeset
     4
system for generating build systems for various platforms and architectures, all
f090a47eb7f7 Added Ben Henning's GSoC2013 work: premake build system.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff changeset
     5
for the SDL2 library and subsequently dependent executables.
f090a47eb7f7 Added Ben Henning's GSoC2013 work: premake build system.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff changeset
     6
f090a47eb7f7 Added Ben Henning's GSoC2013 work: premake build system.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff changeset
     7
Following is a table of contents for the entire README file.
f090a47eb7f7 Added Ben Henning's GSoC2013 work: premake build system.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff changeset
     8
f090a47eb7f7 Added Ben Henning's GSoC2013 work: premake build system.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff changeset
     9
[0] OVERVIEW
f090a47eb7f7 Added Ben Henning's GSoC2013 work: premake build system.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff changeset
    10
[1] GENERATING PROJECTS AND COMMAND-LINE OPTIONS
f090a47eb7f7 Added Ben Henning's GSoC2013 work: premake build system.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff changeset
    11
[2] STRUCTURE
f090a47eb7f7 Added Ben Henning's GSoC2013 work: premake build system.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff changeset
    12
[3] SUPPORT ON WINDOWS AND VISUAL STUDIO
f090a47eb7f7 Added Ben Henning's GSoC2013 work: premake build system.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff changeset
    13
[4] SUPPORT ON MAC OS X AND XCODE
f090a47eb7f7 Added Ben Henning's GSoC2013 work: premake build system.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff changeset
    14
[5] SUPPORT FOR IOS
f090a47eb7f7 Added Ben Henning's GSoC2013 work: premake build system.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff changeset
    15
[6] SUPPORT FOR LINUX
f090a47eb7f7 Added Ben Henning's GSoC2013 work: premake build system.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff changeset
    16
[7] SUPPORT FOR MINGW
f090a47eb7f7 Added Ben Henning's GSoC2013 work: premake build system.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff changeset
    17
[8] SUPPORT FOR CYGWIN
f090a47eb7f7 Added Ben Henning's GSoC2013 work: premake build system.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff changeset
    18
[9] EXTENDING THE SYSTEM TO NEW PROJECTS OR PLATFORMS (code samples)
f090a47eb7f7 Added Ben Henning's GSoC2013 work: premake build system.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff changeset
    19
f090a47eb7f7 Added Ben Henning's GSoC2013 work: premake build system.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff changeset
    20
[0] OVERVIEW
f090a47eb7f7 Added Ben Henning's GSoC2013 work: premake build system.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff changeset
    21
f090a47eb7f7 Added Ben Henning's GSoC2013 work: premake build system.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff changeset
    22
The system is capable of generating projects for many different platforms and
f090a47eb7f7 Added Ben Henning's GSoC2013 work: premake build system.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff changeset
    23
architectures. How to generically generate projects is described in the next
f090a47eb7f7 Added Ben Henning's GSoC2013 work: premake build system.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff changeset
    24
section. Subsequent sections thereafter describe more specific ways to generate
f090a47eb7f7 Added Ben Henning's GSoC2013 work: premake build system.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff changeset
    25
projects and dependencies projects have.
f090a47eb7f7 Added Ben Henning's GSoC2013 work: premake build system.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff changeset
    26
f090a47eb7f7 Added Ben Henning's GSoC2013 work: premake build system.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff changeset
    27
All of the projects inherently have things in common, such as depending on the
f090a47eb7f7 Added Ben Henning's GSoC2013 work: premake build system.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff changeset
    28
same source tree for header and source files. All projects generated will also
f090a47eb7f7 Added Ben Henning's GSoC2013 work: premake build system.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff changeset
    29
have both debug and release configurations available to be built. More
f090a47eb7f7 Added Ben Henning's GSoC2013 work: premake build system.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff changeset
    30
information on how to build either will be provided below.
f090a47eb7f7 Added Ben Henning's GSoC2013 work: premake build system.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff changeset
    31
f090a47eb7f7 Added Ben Henning's GSoC2013 work: premake build system.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff changeset
    32
To view a list of progress on the project, view the changelog.
f090a47eb7f7 Added Ben Henning's GSoC2013 work: premake build system.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff changeset
    33
f090a47eb7f7 Added Ben Henning's GSoC2013 work: premake build system.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff changeset
    34
[1] GENERATING PROJECTS AND COMMAND-LINE OPTIONS
f090a47eb7f7 Added Ben Henning's GSoC2013 work: premake build system.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff changeset
    35
f090a47eb7f7 Added Ben Henning's GSoC2013 work: premake build system.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff changeset
    36
To receive help with various premake actions and command-line options, or to
f090a47eb7f7 Added Ben Henning's GSoC2013 work: premake build system.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff changeset
    37
view the options available for the current premake environment, run the
f090a47eb7f7 Added Ben Henning's GSoC2013 work: premake build system.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff changeset
    38
following command:
f090a47eb7f7 Added Ben Henning's GSoC2013 work: premake build system.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff changeset
    39
f090a47eb7f7 Added Ben Henning's GSoC2013 work: premake build system.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff changeset
    40
    ./premake4 --file=./path/to/premake4.lua help
f090a47eb7f7 Added Ben Henning's GSoC2013 work: premake build system.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff changeset
    41
f090a47eb7f7 Added Ben Henning's GSoC2013 work: premake build system.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff changeset
    42
To construct the project files, run this local command from any command line:
f090a47eb7f7 Added Ben Henning's GSoC2013 work: premake build system.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff changeset
    43
f090a47eb7f7 Added Ben Henning's GSoC2013 work: premake build system.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff changeset
    44
    .\premake4 --file=.\path\to\premake4.lua --to=.\resultDirectory [opts] [vs2008/vs2010/vs2012]
f090a47eb7f7 Added Ben Henning's GSoC2013 work: premake build system.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff changeset
    45
OR
f090a47eb7f7 Added Ben Henning's GSoC2013 work: premake build system.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff changeset
    46
    ./premake4 --file=./path/to/premake4.lua --to=./resultDirectory [opts] [xcode3/xcode4/gmake]
f090a47eb7f7 Added Ben Henning's GSoC2013 work: premake build system.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff changeset
    47
f090a47eb7f7 Added Ben Henning's GSoC2013 work: premake build system.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff changeset
    48
opts may be one of:
f090a47eb7f7 Added Ben Henning's GSoC2013 work: premake build system.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff changeset
    49
  --mingw
f090a47eb7f7 Added Ben Henning's GSoC2013 work: premake build system.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff changeset
    50
  --cygwin
f090a47eb7f7 Added Ben Henning's GSoC2013 work: premake build system.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff changeset
    51
  --ios
f090a47eb7f7 Added Ben Henning's GSoC2013 work: premake build system.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff changeset
    52
f090a47eb7f7 Added Ben Henning's GSoC2013 work: premake build system.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff changeset
    53
opts may also include any of the following:
f090a47eb7f7 Added Ben Henning's GSoC2013 work: premake build system.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff changeset
    54
  --alsa        :  Force the ALSA dependency on for Linux targets.
f090a47eb7f7 Added Ben Henning's GSoC2013 work: premake build system.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff changeset
    55
  --dbus        :  Force the D-Bus dependency on for Linux targets.
f090a47eb7f7 Added Ben Henning's GSoC2013 work: premake build system.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff changeset
    56
  --directx     :  Force the DirectX dependency on for Windows, MinGW, and Cygwin targets.
f090a47eb7f7 Added Ben Henning's GSoC2013 work: premake build system.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff changeset
    57
  --dlopen      :  Force the DLOpen dependency on for Linux targets.
f090a47eb7f7 Added Ben Henning's GSoC2013 work: premake build system.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff changeset
    58
  --esd         :  Force the ESD dependency on for Linux targets.
f090a47eb7f7 Added Ben Henning's GSoC2013 work: premake build system.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff changeset
    59
  --nas         :  Force the NAS dependency on for Linux targets.
f090a47eb7f7 Added Ben Henning's GSoC2013 work: premake build system.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff changeset
    60
  --opengl      :  Force the OpenGL dependency on for any target.
f090a47eb7f7 Added Ben Henning's GSoC2013 work: premake build system.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff changeset
    61
  --oss         :  Force the OSS dependency on for Linux targets.
f090a47eb7f7 Added Ben Henning's GSoC2013 work: premake build system.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff changeset
    62
  --pulseaudio  :  Force the PulseAudio dependency on for Linux targets.
f090a47eb7f7 Added Ben Henning's GSoC2013 work: premake build system.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff changeset
    63
  --x11         :  Force the X11 dependency on for Linux targets.
f090a47eb7f7 Added Ben Henning's GSoC2013 work: premake build system.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff changeset
    64
f090a47eb7f7 Added Ben Henning's GSoC2013 work: premake build system.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff changeset
    65
All projects have debug and release configurations that may be built. For IDE
f090a47eb7f7 Added Ben Henning's GSoC2013 work: premake build system.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff changeset
    66
projects such as Visual Studio and Xcode, there are configurations in the former
f090a47eb7f7 Added Ben Henning's GSoC2013 work: premake build system.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff changeset
    67
and schemas in the latter to handle this.
f090a47eb7f7 Added Ben Henning's GSoC2013 work: premake build system.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff changeset
    68
f090a47eb7f7 Added Ben Henning's GSoC2013 work: premake build system.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff changeset
    69
For make files, the following command line may be used:
f090a47eb7f7 Added Ben Henning's GSoC2013 work: premake build system.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff changeset
    70
    make config=debug
f090a47eb7f7 Added Ben Henning's GSoC2013 work: premake build system.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff changeset
    71
or:
f090a47eb7f7 Added Ben Henning's GSoC2013 work: premake build system.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff changeset
    72
    make config=release
f090a47eb7f7 Added Ben Henning's GSoC2013 work: premake build system.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff changeset
    73
f090a47eb7f7 Added Ben Henning's GSoC2013 work: premake build system.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff changeset
    74
The make files also have a level of verbosity that will print all compiler and
f090a47eb7f7 Added Ben Henning's GSoC2013 work: premake build system.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff changeset
    75
linking commands to the command line. This can be enabled with the following
f090a47eb7f7 Added Ben Henning's GSoC2013 work: premake build system.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff changeset
    76
command:
f090a47eb7f7 Added Ben Henning's GSoC2013 work: premake build system.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff changeset
    77
    make verbose=1
f090a47eb7f7 Added Ben Henning's GSoC2013 work: premake build system.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff changeset
    78
f090a47eb7f7 Added Ben Henning's GSoC2013 work: premake build system.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff changeset
    79
[2] STRUCTURE
f090a47eb7f7 Added Ben Henning's GSoC2013 work: premake build system.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff changeset
    80
f090a47eb7f7 Added Ben Henning's GSoC2013 work: premake build system.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff changeset
    81
The structure of the meta-build system is split into three parts:
f090a47eb7f7 Added Ben Henning's GSoC2013 work: premake build system.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff changeset
    82
f090a47eb7f7 Added Ben Henning's GSoC2013 work: premake build system.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff changeset
    83
  1. The core system which runs all of the other scripts, generates the premake
f090a47eb7f7 Added Ben Henning's GSoC2013 work: premake build system.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff changeset
    84
    Lua file that is used to generate the actual build system, and sets up
f090a47eb7f7 Added Ben Henning's GSoC2013 work: premake build system.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff changeset
    85
    premake to generate it. (premake4.lua)
f090a47eb7f7 Added Ben Henning's GSoC2013 work: premake build system.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff changeset
    86
f090a47eb7f7 Added Ben Henning's GSoC2013 work: premake build system.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff changeset
    87
  2. The utility files for performing various convenience operations, ranging
f090a47eb7f7 Added Ben Henning's GSoC2013 work: premake build system.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff changeset
    88
    from string operations and a file wrapper to custom project definitions and
f090a47eb7f7 Added Ben Henning's GSoC2013 work: premake build system.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff changeset
    89
    complex dependency checking using CMake-esque functions. There is also a
f090a47eb7f7 Added Ben Henning's GSoC2013 work: premake build system.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff changeset
    90
    file containing custom dependency functions for checked support.
f090a47eb7f7 Added Ben Henning's GSoC2013 work: premake build system.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff changeset
    91
    (everything in the util folder)
f090a47eb7f7 Added Ben Henning's GSoC2013 work: premake build system.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff changeset
    92
f090a47eb7f7 Added Ben Henning's GSoC2013 work: premake build system.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff changeset
    93
  3. The project definition files, which define each and every project related
f090a47eb7f7 Added Ben Henning's GSoC2013 work: premake build system.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff changeset
    94
    to SDL2. This includes the SDL2 library itself, along with all of its
f090a47eb7f7 Added Ben Henning's GSoC2013 work: premake build system.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff changeset
    95
    current tests and iOS Demos. These files also related to dependency handling
f090a47eb7f7 Added Ben Henning's GSoC2013 work: premake build system.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff changeset
    96
    and help build dependency trees for the various projects.
f090a47eb7f7 Added Ben Henning's GSoC2013 work: premake build system.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff changeset
    97
    (everything in the projects folder)
f090a47eb7f7 Added Ben Henning's GSoC2013 work: premake build system.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff changeset
    98
f090a47eb7f7 Added Ben Henning's GSoC2013 work: premake build system.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff changeset
    99
The premake4.lua file is lightly documented and commented to explain how it
f090a47eb7f7 Added Ben Henning's GSoC2013 work: premake build system.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff changeset
   100
interfaces with the other utility files and project files. It is not extensively
f090a47eb7f7 Added Ben Henning's GSoC2013 work: premake build system.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff changeset
   101
documented because the actual generation process is not considered to be
f090a47eb7f7 Added Ben Henning's GSoC2013 work: premake build system.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff changeset
   102
pertinent to the overall usage of the meta-build system.
f090a47eb7f7 Added Ben Henning's GSoC2013 work: premake build system.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff changeset
   103
f090a47eb7f7 Added Ben Henning's GSoC2013 work: premake build system.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff changeset
   104
The utility files have thorough documentation, since they are the foundation for
f090a47eb7f7 Added Ben Henning's GSoC2013 work: premake build system.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff changeset
   105
the entire project definition and dependency handling systems.
f090a47eb7f7 Added Ben Henning's GSoC2013 work: premake build system.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff changeset
   106
f090a47eb7f7 Added Ben Henning's GSoC2013 work: premake build system.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff changeset
   107
The project definition files are lightly documented, since they are expected to
f090a47eb7f7 Added Ben Henning's GSoC2013 work: premake build system.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff changeset
   108
be self-explanatory. Look through each and every project definition file
f090a47eb7f7 Added Ben Henning's GSoC2013 work: premake build system.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff changeset
   109
(especially SDL2.lua, testgl2.lua, testshape.lua, testsprite2.lua, and
f090a47eb7f7 Added Ben Henning's GSoC2013 work: premake build system.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff changeset
   110
testnative.lua) to gain experience and familiarity with most of the project
f090a47eb7f7 Added Ben Henning's GSoC2013 work: premake build system.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff changeset
   111
definition system.
f090a47eb7f7 Added Ben Henning's GSoC2013 work: premake build system.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff changeset
   112
f090a47eb7f7 Added Ben Henning's GSoC2013 work: premake build system.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff changeset
   113
The dependency system is very straightforward. As explained in both
f090a47eb7f7 Added Ben Henning's GSoC2013 work: premake build system.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff changeset
   114
sdl_projects.lua and sdl_dependency_checkers.lua, a function for checking the
f090a47eb7f7 Added Ben Henning's GSoC2013 work: premake build system.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff changeset
   115
actual dependency support is registered by its name and then referenced to in
f090a47eb7f7 Added Ben Henning's GSoC2013 work: premake build system.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff changeset
   116
the project definitions (such as for SDL2.lua). These definitions are allowed to
f090a47eb7f7 Added Ben Henning's GSoC2013 work: premake build system.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff changeset
   117
do anything necessary to determine whether the appropriate support exists in the
f090a47eb7f7 Added Ben Henning's GSoC2013 work: premake build system.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff changeset
   118
current build environment or not. The possibilities for checking can be seen
f090a47eb7f7 Added Ben Henning's GSoC2013 work: premake build system.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff changeset
   119
specifically in the function for checking DirectX support and any of the Linux
f090a47eb7f7 Added Ben Henning's GSoC2013 work: premake build system.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff changeset
   120
dependency functions using the sdl_check_compile.lua functions.
f090a47eb7f7 Added Ben Henning's GSoC2013 work: premake build system.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff changeset
   121
f090a47eb7f7 Added Ben Henning's GSoC2013 work: premake build system.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff changeset
   122
As far as building the projects is concerned, the project definitions are
f090a47eb7f7 Added Ben Henning's GSoC2013 work: premake build system.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff changeset
   123
allowed to set configuration key-value pairs which will be translated and placed
f090a47eb7f7 Added Ben Henning's GSoC2013 work: premake build system.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff changeset
   124
inside a generated SDL config header file, similar to the one generated by both
f090a47eb7f7 Added Ben Henning's GSoC2013 work: premake build system.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff changeset
   125
autotools and CMake.
f090a47eb7f7 Added Ben Henning's GSoC2013 work: premake build system.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff changeset
   126
f090a47eb7f7 Added Ben Henning's GSoC2013 work: premake build system.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff changeset
   127
[3] SUPPORT ON WINDOWS AND VISUAL STUDIO
f090a47eb7f7 Added Ben Henning's GSoC2013 work: premake build system.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff changeset
   128
f090a47eb7f7 Added Ben Henning's GSoC2013 work: premake build system.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff changeset
   129
Check the Windows README for more information on SDL2 support on Windows and
f090a47eb7f7 Added Ben Henning's GSoC2013 work: premake build system.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff changeset
   130
Visual Studio. Current support exists for Visual Studio 2008, 2010, and 2012.
f090a47eb7f7 Added Ben Henning's GSoC2013 work: premake build system.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff changeset
   131
f090a47eb7f7 Added Ben Henning's GSoC2013 work: premake build system.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff changeset
   132
[4] SUPPORT ON MAC OS X AND XCODE
f090a47eb7f7 Added Ben Henning's GSoC2013 work: premake build system.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff changeset
   133
f090a47eb7f7 Added Ben Henning's GSoC2013 work: premake build system.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff changeset
   134
Check the Mac OS X README for more information on SDL2 support on Mac OS X using
f090a47eb7f7 Added Ben Henning's GSoC2013 work: premake build system.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff changeset
   135
Xcode. Current support should exist for Mac OS X 10.6, 10.7, and 10.8 (as
f090a47eb7f7 Added Ben Henning's GSoC2013 work: premake build system.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff changeset
   136
tested, but more may be supported). Supported Xcode versions are 3 and 4. It
f090a47eb7f7 Added Ben Henning's GSoC2013 work: premake build system.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff changeset
   137
supports building for both i686 and x86_64 architectures, as well as support for
f090a47eb7f7 Added Ben Henning's GSoC2013 work: premake build system.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff changeset
   138
universal 32-bit binaries, universal 64-bit binaries, and universal combined
f090a47eb7f7 Added Ben Henning's GSoC2013 work: premake build system.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff changeset
   139
binaries.
f090a47eb7f7 Added Ben Henning's GSoC2013 work: premake build system.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff changeset
   140
f090a47eb7f7 Added Ben Henning's GSoC2013 work: premake build system.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff changeset
   141
[5] SUPPORT FOR IOS
f090a47eb7f7 Added Ben Henning's GSoC2013 work: premake build system.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff changeset
   142
f090a47eb7f7 Added Ben Henning's GSoC2013 work: premake build system.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff changeset
   143
EXPERIMENTAL SUPPORT
f090a47eb7f7 Added Ben Henning's GSoC2013 work: premake build system.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff changeset
   144
f090a47eb7f7 Added Ben Henning's GSoC2013 work: premake build system.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff changeset
   145
Check the iOS README for more information on SDL2 support on iOS using Xcode.
f090a47eb7f7 Added Ben Henning's GSoC2013 work: premake build system.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff changeset
   146
Current support has been tested on the iOS 6 emulators for iPhone and iPad,
f090a47eb7f7 Added Ben Henning's GSoC2013 work: premake build system.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff changeset
   147
using both Xcode 3 and Xcode 4. The iOS project will reference all the Demos
f090a47eb7f7 Added Ben Henning's GSoC2013 work: premake build system.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff changeset
   148
the manual project does.
f090a47eb7f7 Added Ben Henning's GSoC2013 work: premake build system.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff changeset
   149
f090a47eb7f7 Added Ben Henning's GSoC2013 work: premake build system.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff changeset
   150
[6] SUPPORT FOR LINUX
f090a47eb7f7 Added Ben Henning's GSoC2013 work: premake build system.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff changeset
   151
f090a47eb7f7 Added Ben Henning's GSoC2013 work: premake build system.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff changeset
   152
EXPERIMENTAL SUPPORT
f090a47eb7f7 Added Ben Henning's GSoC2013 work: premake build system.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff changeset
   153
f090a47eb7f7 Added Ben Henning's GSoC2013 work: premake build system.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff changeset
   154
Check the Linux README for more information on SDL2 support on Linux. Currently,
f090a47eb7f7 Added Ben Henning's GSoC2013 work: premake build system.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff changeset
   155
only a subset of the Linux dependencies are supported, and they are supported
f090a47eb7f7 Added Ben Henning's GSoC2013 work: premake build system.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff changeset
   156
partially. Linux also builds to a static library instead of a shared library.
f090a47eb7f7 Added Ben Henning's GSoC2013 work: premake build system.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff changeset
   157
The tests run well and as expected.
f090a47eb7f7 Added Ben Henning's GSoC2013 work: premake build system.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff changeset
   158
f090a47eb7f7 Added Ben Henning's GSoC2013 work: premake build system.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff changeset
   159
[7] SUPPORT FOR MINGW
f090a47eb7f7 Added Ben Henning's GSoC2013 work: premake build system.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff changeset
   160
f090a47eb7f7 Added Ben Henning's GSoC2013 work: premake build system.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff changeset
   161
Check the MinGW README for more information on SDL2 support on MinGW. Currently,
f090a47eb7f7 Added Ben Henning's GSoC2013 work: premake build system.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff changeset
   162
all of the tests that work using the Visual Studio projects also seem to work
f090a47eb7f7 Added Ben Henning's GSoC2013 work: premake build system.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff changeset
   163
with MinGW, minus DirectX support. DirectX is not inherently supported, but can
f090a47eb7f7 Added Ben Henning's GSoC2013 work: premake build system.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff changeset
   164
be forcibly turned on if the user knows what they are doing.
f090a47eb7f7 Added Ben Henning's GSoC2013 work: premake build system.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff changeset
   165
f090a47eb7f7 Added Ben Henning's GSoC2013 work: premake build system.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff changeset
   166
[8] SUPPORT FOR CYGWIN
f090a47eb7f7 Added Ben Henning's GSoC2013 work: premake build system.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff changeset
   167
f090a47eb7f7 Added Ben Henning's GSoC2013 work: premake build system.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff changeset
   168
BROKEN SUPPORT
f090a47eb7f7 Added Ben Henning's GSoC2013 work: premake build system.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff changeset
   169
f090a47eb7f7 Added Ben Henning's GSoC2013 work: premake build system.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff changeset
   170
Check the Cygwin README for more information on the progress of supporting SDL2
f090a47eb7f7 Added Ben Henning's GSoC2013 work: premake build system.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff changeset
   171
on Cygwin.
f090a47eb7f7 Added Ben Henning's GSoC2013 work: premake build system.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff changeset
   172
f090a47eb7f7 Added Ben Henning's GSoC2013 work: premake build system.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff changeset
   173
[9] EXTENDING THE SYSTEM TO NEW PROJECTS OR PLATFORMS
f090a47eb7f7 Added Ben Henning's GSoC2013 work: premake build system.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff changeset
   174
f090a47eb7f7 Added Ben Henning's GSoC2013 work: premake build system.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff changeset
   175
In order to create a new project, simply create a Lua file and place it within
f090a47eb7f7 Added Ben Henning's GSoC2013 work: premake build system.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff changeset
   176
the projects directory. The meta-build system will automatically include it.
f090a47eb7f7 Added Ben Henning's GSoC2013 work: premake build system.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff changeset
   177
It must contain a SDL_project definition. Projects *must* have source files as
f090a47eb7f7 Added Ben Henning's GSoC2013 work: premake build system.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff changeset
   178
well, otherwise they will be ignored by the meta-build system. There are a
f090a47eb7f7 Added Ben Henning's GSoC2013 work: premake build system.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff changeset
   179
plethora of examples demonstrating how to defined projects, link them to various
f090a47eb7f7 Added Ben Henning's GSoC2013 work: premake build system.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff changeset
   180
dependencies, and to create dependencies.
f090a47eb7f7 Added Ben Henning's GSoC2013 work: premake build system.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff changeset
   181
f090a47eb7f7 Added Ben Henning's GSoC2013 work: premake build system.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff changeset
   182
Here is an example that creates a new project named foo, it's a ConsoleApp
f090a47eb7f7 Added Ben Henning's GSoC2013 work: premake build system.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff changeset
   183
(which is the default for SDL projects, look at http://industriousone.com/kind
f090a47eb7f7 Added Ben Henning's GSoC2013 work: premake build system.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff changeset
   184
for more information). Its language is C and its source directory is "../test"
f090a47eb7f7 Added Ben Henning's GSoC2013 work: premake build system.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff changeset
   185
(this path is relative to the location of premake4.lua). It's project location
f090a47eb7f7 Added Ben Henning's GSoC2013 work: premake build system.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff changeset
   186
is "tests", which means it will be placed in the ./tests/ folder of whichever
f090a47eb7f7 Added Ben Henning's GSoC2013 work: premake build system.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff changeset
   187
destination directory is set while generating the project (for example,
f090a47eb7f7 Added Ben Henning's GSoC2013 work: premake build system.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff changeset
   188
./VisualC/tests). It is including all the files starting with "foo." from the
f090a47eb7f7 Added Ben Henning's GSoC2013 work: premake build system.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff changeset
   189
"../test" folder.
f090a47eb7f7 Added Ben Henning's GSoC2013 work: premake build system.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff changeset
   190
f090a47eb7f7 Added Ben Henning's GSoC2013 work: premake build system.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff changeset
   191
    SDL_project "foo"
f090a47eb7f7 Added Ben Henning's GSoC2013 work: premake build system.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff changeset
   192
    	SDL_kind "ConsoleApp"
f090a47eb7f7 Added Ben Henning's GSoC2013 work: premake build system.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff changeset
   193
    	SDL_language "C"
f090a47eb7f7 Added Ben Henning's GSoC2013 work: premake build system.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff changeset
   194
    	SDL_sourcedir "../test"
f090a47eb7f7 Added Ben Henning's GSoC2013 work: premake build system.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff changeset
   195
    	SDL_projectLocation "tests"
f090a47eb7f7 Added Ben Henning's GSoC2013 work: premake build system.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff changeset
   196
    	SDL_files { "/testrendercopyex.*" }
f090a47eb7f7 Added Ben Henning's GSoC2013 work: premake build system.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff changeset
   197
f090a47eb7f7 Added Ben Henning's GSoC2013 work: premake build system.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff changeset
   198
Now, we can extend this project slightly:
f090a47eb7f7 Added Ben Henning's GSoC2013 work: premake build system.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff changeset
   199
f090a47eb7f7 Added Ben Henning's GSoC2013 work: premake build system.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff changeset
   200
    SDL_project "foo"
f090a47eb7f7 Added Ben Henning's GSoC2013 work: premake build system.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff changeset
   201
    	SDL_kind "ConsoleApp"
f090a47eb7f7 Added Ben Henning's GSoC2013 work: premake build system.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff changeset
   202
    	SDL_notos "ios|cygwin"
f090a47eb7f7 Added Ben Henning's GSoC2013 work: premake build system.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff changeset
   203
    	SDL_language "C"
f090a47eb7f7 Added Ben Henning's GSoC2013 work: premake build system.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff changeset
   204
    	SDL_sourcedir "../test"
f090a47eb7f7 Added Ben Henning's GSoC2013 work: premake build system.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff changeset
   205
    	SDL_projectLocation "tests"
f090a47eb7f7 Added Ben Henning's GSoC2013 work: premake build system.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff changeset
   206
    	SDL_projectDependencies { "SDL2main", "SDL2test", "SDL2" }
f090a47eb7f7 Added Ben Henning's GSoC2013 work: premake build system.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff changeset
   207
    	SDL_files { "/foo.*" }
f090a47eb7f7 Added Ben Henning's GSoC2013 work: premake build system.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff changeset
   208
    	SDL_copy { "icon.bmp", "sample.bmp" }
f090a47eb7f7 Added Ben Henning's GSoC2013 work: premake build system.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff changeset
   209
f090a47eb7f7 Added Ben Henning's GSoC2013 work: premake build system.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff changeset
   210
We now specified that this application will not work on iOS or Cygwin targets,
f090a47eb7f7 Added Ben Henning's GSoC2013 work: premake build system.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff changeset
   211
so it will be discluded when generating projects for those platforms. We have
f090a47eb7f7 Added Ben Henning's GSoC2013 work: premake build system.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff changeset
   212
also specified that this project depends on 'SDL2main', 'SDL2test', and 'SDL2',
f090a47eb7f7 Added Ben Henning's GSoC2013 work: premake build system.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff changeset
   213
which are other projects that are already defined. We can set the dependency
f090a47eb7f7 Added Ben Henning's GSoC2013 work: premake build system.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff changeset
   214
to any projects the SDL2 meta-build system is aware of. We also have an
f090a47eb7f7 Added Ben Henning's GSoC2013 work: premake build system.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff changeset
   215
interesting SDL_copy directive, which will automatically copy the files
f090a47eb7f7 Added Ben Henning's GSoC2013 work: premake build system.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff changeset
   216
"icon.bmp" and "sample.bmp" from "<sdl_root>/test" to the directory of foo's
f090a47eb7f7 Added Ben Henning's GSoC2013 work: premake build system.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff changeset
   217
executable when it's built.
f090a47eb7f7 Added Ben Henning's GSoC2013 work: premake build system.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff changeset
   218
f090a47eb7f7 Added Ben Henning's GSoC2013 work: premake build system.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff changeset
   219
Let's take a look at another example:
f090a47eb7f7 Added Ben Henning's GSoC2013 work: premake build system.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff changeset
   220
f090a47eb7f7 Added Ben Henning's GSoC2013 work: premake build system.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff changeset
   221
    SDL_project "testgl2"
f090a47eb7f7 Added Ben Henning's GSoC2013 work: premake build system.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff changeset
   222
    	SDL_kind "ConsoleApp"
f090a47eb7f7 Added Ben Henning's GSoC2013 work: premake build system.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff changeset
   223
    	SDL_notos "ios|cygwin"
f090a47eb7f7 Added Ben Henning's GSoC2013 work: premake build system.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff changeset
   224
    	SDL_language "C"
f090a47eb7f7 Added Ben Henning's GSoC2013 work: premake build system.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff changeset
   225
    	SDL_sourcedir "../test"
f090a47eb7f7 Added Ben Henning's GSoC2013 work: premake build system.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff changeset
   226
    	SDL_projectLocation "tests"
f090a47eb7f7 Added Ben Henning's GSoC2013 work: premake build system.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff changeset
   227
    	SDL_projectDependencies { "SDL2main", "SDL2test", "SDL2" }
f090a47eb7f7 Added Ben Henning's GSoC2013 work: premake build system.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff changeset
   228
    	SDL_defines { "HAVE_OPENGL" }
f090a47eb7f7 Added Ben Henning's GSoC2013 work: premake build system.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff changeset
   229
    	SDL_dependency "OpenGL"
f090a47eb7f7 Added Ben Henning's GSoC2013 work: premake build system.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff changeset
   230
    		-- opengl is platform independent
f090a47eb7f7 Added Ben Henning's GSoC2013 work: premake build system.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff changeset
   231
    		SDL_depfunc "OpenGL"
f090a47eb7f7 Added Ben Henning's GSoC2013 work: premake build system.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff changeset
   232
    		SDL_files { "/testgl2.*" }
f090a47eb7f7 Added Ben Henning's GSoC2013 work: premake build system.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff changeset
   233
f090a47eb7f7 Added Ben Henning's GSoC2013 work: premake build system.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff changeset
   234
This is a copy of the testgl2.lua file. Most of this is already familiar, but
f090a47eb7f7 Added Ben Henning's GSoC2013 work: premake build system.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff changeset
   235
there are a few new things to point out. We can set preprocessor definitions by
f090a47eb7f7 Added Ben Henning's GSoC2013 work: premake build system.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff changeset
   236
using the 'SDL_defines' directive. We can also create a dependency for the
f090a47eb7f7 Added Ben Henning's GSoC2013 work: premake build system.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff changeset
   237
project on some varied criteria. For example, testgl2 is obviously dependent on
f090a47eb7f7 Added Ben Henning's GSoC2013 work: premake build system.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff changeset
   238
the presence of the OpenGL library. So, the only way it will include the
f090a47eb7f7 Added Ben Henning's GSoC2013 work: premake build system.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff changeset
   239
"testgl2.*" (testgl2.c/testgl2.h) files is if the dependency function "OpenGL"
f090a47eb7f7 Added Ben Henning's GSoC2013 work: premake build system.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff changeset
   240
returns information regarding the whereabouts of the OpenGL library on the
f090a47eb7f7 Added Ben Henning's GSoC2013 work: premake build system.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff changeset
   241
current system. This function is registered in sdl_dependency_checkers.lua:
f090a47eb7f7 Added Ben Henning's GSoC2013 work: premake build system.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff changeset
   242
f090a47eb7f7 Added Ben Henning's GSoC2013 work: premake build system.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff changeset
   243
    function openGLDep()
f090a47eb7f7 Added Ben Henning's GSoC2013 work: premake build system.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff changeset
   244
    	print("Checking OpenGL dependencies...")
f090a47eb7f7 Added Ben Henning's GSoC2013 work: premake build system.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff changeset
   245
    	...
f090a47eb7f7 Added Ben Henning's GSoC2013 work: premake build system.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff changeset
   246
    	return { found = foundLib, libDirs = { }, libs = { libname } }
f090a47eb7f7 Added Ben Henning's GSoC2013 work: premake build system.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff changeset
   247
    end
f090a47eb7f7 Added Ben Henning's GSoC2013 work: premake build system.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff changeset
   248
    ...
f090a47eb7f7 Added Ben Henning's GSoC2013 work: premake build system.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff changeset
   249
    SDL_registerDependencyChecker("OpenGL", openGLDep)
f090a47eb7f7 Added Ben Henning's GSoC2013 work: premake build system.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff changeset
   250
f090a47eb7f7 Added Ben Henning's GSoC2013 work: premake build system.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff changeset
   251
This function is called when it's time to decide whether testgl2 should be
f090a47eb7f7 Added Ben Henning's GSoC2013 work: premake build system.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff changeset
   252
generated or not. openGLDep can use any and all functions to decide whether
f090a47eb7f7 Added Ben Henning's GSoC2013 work: premake build system.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff changeset
   253
OpenGL is supported.
f090a47eb7f7 Added Ben Henning's GSoC2013 work: premake build system.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff changeset
   254
f090a47eb7f7 Added Ben Henning's GSoC2013 work: premake build system.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff changeset
   255
Dependencies and projects can become much more sophisticate, if necessary. Take
f090a47eb7f7 Added Ben Henning's GSoC2013 work: premake build system.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff changeset
   256
the following example from the SDL2.lua project definition:
f090a47eb7f7 Added Ben Henning's GSoC2013 work: premake build system.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff changeset
   257
f090a47eb7f7 Added Ben Henning's GSoC2013 work: premake build system.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff changeset
   258
    -- DirectX dependency
f090a47eb7f7 Added Ben Henning's GSoC2013 work: premake build system.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff changeset
   259
    SDL_dependency "directx"
f090a47eb7f7 Added Ben Henning's GSoC2013 work: premake build system.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff changeset
   260
    	SDL_os "windows|mingw"
f090a47eb7f7 Added Ben Henning's GSoC2013 work: premake build system.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff changeset
   261
    	SDL_depfunc "DirectX"
f090a47eb7f7 Added Ben Henning's GSoC2013 work: premake build system.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff changeset
   262
    	SDL_config
f090a47eb7f7 Added Ben Henning's GSoC2013 work: premake build system.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff changeset
   263
    	{
f090a47eb7f7 Added Ben Henning's GSoC2013 work: premake build system.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff changeset
   264
    		["SDL_AUDIO_DRIVER_DSOUND"] = 1,
f090a47eb7f7 Added Ben Henning's GSoC2013 work: premake build system.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff changeset
   265
    		["SDL_AUDIO_DRIVER_XAUDIO2"] = 1,
f090a47eb7f7 Added Ben Henning's GSoC2013 work: premake build system.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff changeset
   266
    		["SDL_JOYSTICK_DINPUT"] = 1,
f090a47eb7f7 Added Ben Henning's GSoC2013 work: premake build system.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff changeset
   267
    		["SDL_HAPTIC_DINPUT"] = 1,
f090a47eb7f7 Added Ben Henning's GSoC2013 work: premake build system.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff changeset
   268
    		["SDL_VIDEO_RENDER_D3D"] = 1
f090a47eb7f7 Added Ben Henning's GSoC2013 work: premake build system.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff changeset
   269
    	}
f090a47eb7f7 Added Ben Henning's GSoC2013 work: premake build system.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff changeset
   270
    	SDL_paths
f090a47eb7f7 Added Ben Henning's GSoC2013 work: premake build system.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff changeset
   271
    	{
f090a47eb7f7 Added Ben Henning's GSoC2013 work: premake build system.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff changeset
   272
    		"/audio/directsound/",
f090a47eb7f7 Added Ben Henning's GSoC2013 work: premake build system.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff changeset
   273
    		"/audio/xaudio2/",
f090a47eb7f7 Added Ben Henning's GSoC2013 work: premake build system.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff changeset
   274
    		"/render/direct3d/",
f090a47eb7f7 Added Ben Henning's GSoC2013 work: premake build system.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff changeset
   275
    		-- these two depend on Xinput
f090a47eb7f7 Added Ben Henning's GSoC2013 work: premake build system.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff changeset
   276
    		"/haptic/windows/",
f090a47eb7f7 Added Ben Henning's GSoC2013 work: premake build system.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff changeset
   277
    		"/joystick/windows/",
f090a47eb7f7 Added Ben Henning's GSoC2013 work: premake build system.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff changeset
   278
    	}
f090a47eb7f7 Added Ben Henning's GSoC2013 work: premake build system.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff changeset
   279
f090a47eb7f7 Added Ben Henning's GSoC2013 work: premake build system.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff changeset
   280
This dependency is, as expected, for DirectX. One thing to note here is even
f090a47eb7f7 Added Ben Henning's GSoC2013 work: premake build system.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff changeset
   281
dependencies can be dependent on an operating system. This dependency will not
f090a47eb7f7 Added Ben Henning's GSoC2013 work: premake build system.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff changeset
   282
even be resolved if SDL2 is being generated on, say, Linux or Mac OS X. Two new
f090a47eb7f7 Added Ben Henning's GSoC2013 work: premake build system.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff changeset
   283
things shown here are 'SDL_config' and 'SDL_paths' directives. SDL_config allows
f090a47eb7f7 Added Ben Henning's GSoC2013 work: premake build system.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff changeset
   284
you to set preprocessor definitions that will be pasted into
f090a47eb7f7 Added Ben Henning's GSoC2013 work: premake build system.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff changeset
   285
SDL_config_premake.h (which acts as a replacement to SDL_config.h when building
f090a47eb7f7 Added Ben Henning's GSoC2013 work: premake build system.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff changeset
   286
the project). This allows for significant flexibility (look around SDL2.lua's
f090a47eb7f7 Added Ben Henning's GSoC2013 work: premake build system.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff changeset
   287
dependencies, especially for Linux). SDL_paths works like SDL_files, except it
f090a47eb7f7 Added Ben Henning's GSoC2013 work: premake build system.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff changeset
   288
includes all .c, .h, and .m files within that directory. The directory is still
f090a47eb7f7 Added Ben Henning's GSoC2013 work: premake build system.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff changeset
   289
relative to the source directory of the project (in this case, <sdl_root>/src).
f090a47eb7f7 Added Ben Henning's GSoC2013 work: premake build system.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff changeset
   290
f090a47eb7f7 Added Ben Henning's GSoC2013 work: premake build system.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff changeset
   291
Finally, dependency checking can be done in a huge variety of ways, ranging
f090a47eb7f7 Added Ben Henning's GSoC2013 work: premake build system.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff changeset
   292
from simply checking for an environmental variable to scanning directories on
f090a47eb7f7 Added Ben Henning's GSoC2013 work: premake build system.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff changeset
   293
Windows. Even more flexibly, the build environment itself can be checked using
f090a47eb7f7 Added Ben Henning's GSoC2013 work: premake build system.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff changeset
   294
functions similar to those provided in CMake to check if a function compiles,
f090a47eb7f7 Added Ben Henning's GSoC2013 work: premake build system.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff changeset
   295
library exists, etc. The following example comes from
f090a47eb7f7 Added Ben Henning's GSoC2013 work: premake build system.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff changeset
   296
sdl_dependency_checkers.lua and is used by the Linux dependency in the SDL2
f090a47eb7f7 Added Ben Henning's GSoC2013 work: premake build system.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff changeset
   297
project to determine whether the OSS sound system is supported:
f090a47eb7f7 Added Ben Henning's GSoC2013 work: premake build system.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff changeset
   298
f090a47eb7f7 Added Ben Henning's GSoC2013 work: premake build system.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff changeset
   299
    function ossDep()
f090a47eb7f7 Added Ben Henning's GSoC2013 work: premake build system.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff changeset
   300
    	print("Checking for OSS support...")
f090a47eb7f7 Added Ben Henning's GSoC2013 work: premake build system.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff changeset
   301
    	if not check_cxx_source_compiles([[
f090a47eb7f7 Added Ben Henning's GSoC2013 work: premake build system.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff changeset
   302
    				#include <sys/soundcard.h>
f090a47eb7f7 Added Ben Henning's GSoC2013 work: premake build system.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff changeset
   303
    				int main() { int arg = SNDCTL_DSP_SETFRAGMENT; return 0; }]])
f090a47eb7f7 Added Ben Henning's GSoC2013 work: premake build system.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff changeset
   304
    			and not check_cxx_source_compiles([[
f090a47eb7f7 Added Ben Henning's GSoC2013 work: premake build system.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff changeset
   305
    				#include <soundcard.h>
f090a47eb7f7 Added Ben Henning's GSoC2013 work: premake build system.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff changeset
   306
    				int main() { int arg = SNDCTL_DSP_SETFRAGMENT; return 0; }]]) then
f090a47eb7f7 Added Ben Henning's GSoC2013 work: premake build system.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff changeset
   307
    		print("Warning: OSS unsupported!")
f090a47eb7f7 Added Ben Henning's GSoC2013 work: premake build system.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff changeset
   308
    		return { found = false }
f090a47eb7f7 Added Ben Henning's GSoC2013 work: premake build system.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff changeset
   309
    	end
f090a47eb7f7 Added Ben Henning's GSoC2013 work: premake build system.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff changeset
   310
    	return { found = true }
f090a47eb7f7 Added Ben Henning's GSoC2013 work: premake build system.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff changeset
   311
    end
f090a47eb7f7 Added Ben Henning's GSoC2013 work: premake build system.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff changeset
   312
f090a47eb7f7 Added Ben Henning's GSoC2013 work: premake build system.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff changeset
   313
Notice how it uses 'check_cxx_source_compiles'. There are even more functions
f090a47eb7f7 Added Ben Henning's GSoC2013 work: premake build system.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff changeset
   314
than this to check and, rather than going in detail with them here, I encourage
f090a47eb7f7 Added Ben Henning's GSoC2013 work: premake build system.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff changeset
   315
you to look at the documented functions within ./util/sdl_check_compile.lua.
f090a47eb7f7 Added Ben Henning's GSoC2013 work: premake build system.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff changeset
   316
f090a47eb7f7 Added Ben Henning's GSoC2013 work: premake build system.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff changeset
   317
In order to support new platforms, start with the minimal configuration template
f090a47eb7f7 Added Ben Henning's GSoC2013 work: premake build system.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff changeset
   318
provided and work off of the initial SDL2 project. You may add additional
f090a47eb7f7 Added Ben Henning's GSoC2013 work: premake build system.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff changeset
   319
dependencies to define other source files specific to that platform (see how
f090a47eb7f7 Added Ben Henning's GSoC2013 work: premake build system.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff changeset
   320
it's done with Windows and Mac OS X), or you can add special dependencies that
f090a47eb7f7 Added Ben Henning's GSoC2013 work: premake build system.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff changeset
   321
rely on dependency functions you may implement yourself (see DirectX and
f090a47eb7f7 Added Ben Henning's GSoC2013 work: premake build system.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff changeset
   322
OpenGL). Dependencies can use the 'SDL_config' directive to specify special
f090a47eb7f7 Added Ben Henning's GSoC2013 work: premake build system.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff changeset
   323
values that can be pasted into the resulting configuration header file upon
f090a47eb7f7 Added Ben Henning's GSoC2013 work: premake build system.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff changeset
   324
generation.
f090a47eb7f7 Added Ben Henning's GSoC2013 work: premake build system.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff changeset
   325
f090a47eb7f7 Added Ben Henning's GSoC2013 work: premake build system.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff changeset
   326
For more detailed information about the functions supported and how they work,
f090a47eb7f7 Added Ben Henning's GSoC2013 work: premake build system.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff changeset
   327
look at all of the Lua files in the util directory, as well as any of the
f090a47eb7f7 Added Ben Henning's GSoC2013 work: premake build system.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff changeset
   328
example projects in the projects directory to demonstrate how many of these
f090a47eb7f7 Added Ben Henning's GSoC2013 work: premake build system.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff changeset
   329
functions are used. The information above is only a quick subset of the
f090a47eb7f7 Added Ben Henning's GSoC2013 work: premake build system.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff changeset
   330
capabilities of the meta-build system.