summaryrefslogtreecommitdiffstatshomepage
path: root/3rdparty/genie/src/base/config.lua
blob: eec1ad674990b23c1de6bc2ec3937c260c1b5cd0 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
--
-- configs.lua
--
-- Functions for working with configuration objects (which can include
-- projects and solutions).
--
-- Copyright (c) 2008-2011 Jason Perkins and the Premake project
--

	premake.config = { }
	local config = premake.config


--
-- Determine if a configuration represents a "debug" or "release" build.
-- This controls the runtime library selected for Visual Studio builds
-- (and might also be useful elsewhere).
--

	function premake.config.isdebugbuild(cfg)
		-- If any of the specific runtime flags are set
		if cfg.flags.DebugRuntime then
			return true
		end

		if cfg.flags.ReleaseRuntime then
			return false
		end

		-- If any of the optimize flags are set, it's a release a build
		if cfg.flags.Optimize or cfg.flags.OptimizeSize or cfg.flags.OptimizeSpeed then
			return false
		end

		-- If symbols are not defined, it's a release build
		if not cfg.flags.Symbols then
			return false
		end

		return true
	end


--
-- Return an iterator over each file included in this configuration.
--

	function premake.config.eachfile(cfg)
		local i = 0
		local t = cfg.files
		return function ()
			i = i + 1
			if (i <= #t) then
				local fcfg = cfg.__fileconfigs[t[i]]
				fcfg.vpath = premake.project.getvpath(cfg.project, fcfg.name)
				return fcfg
			end
		end
	end


--
-- Determines if this configuration can be linked incrementally.
--

	function premake.config.isincrementallink(cfg)
		if cfg.kind == "StaticLib" then
			return false
		end
		return not config.islinkeroptimizedbuild(cfg.flags) and not cfg.flags.NoIncrementalLink
	end


--
-- Determine if this configuration uses one of the optimize flags.
--

	function premake.config.isoptimizedbuild(flags)
		return flags.Optimize or flags.OptimizeSize or flags.OptimizeSpeed
	end


--
-- Determine if this configuration uses one of the optimize flags.
-- Optimized builds get different treatment, such as full linking
-- instead of incremental.
--

	function premake.config.islinkeroptimizedbuild(flags)
		return config.isoptimizedbuild(flags) and not flags.NoOptimizeLink
	end


--
-- Determines if this configuration uses edit and continue.
--

	function premake.config.iseditandcontinue(cfg)
		if cfg.flags.NoEditAndContinue
				or cfg.flags.Managed
				or (cfg.kind ~= "StaticLib" and not config.isincrementallink(cfg))
				or config.islinkeroptimizedbuild(cfg.flags) then
			return false
		end
		return true
	end