Skip to content

Commit

Permalink
Added variant options and PDB support. Closes GH-11
Browse files Browse the repository at this point in the history
- The Build.Variants list can now be a table { Name=.., Options.. } rather than just plain strings.
- Added Options.GeneratePdb setting that triggers PDB generation on the MSVC toolset.
- Bonus change: filter environment lists through flatten_list so it is possible to define config-specific defines in Env blocks in tundra.lua
  • Loading branch information
deplinenoise committed Aug 7, 2010
1 parent d4a1df2 commit 1cd51e4
Show file tree
Hide file tree
Showing 3 changed files with 51 additions and 13 deletions.
39 changes: 31 additions & 8 deletions scripts/boot.lua
Original file line number Diff line number Diff line change
Expand Up @@ -311,7 +311,7 @@ local function analyze_targets(targets, configs, variants, subvariants, default_
if configs[name] then
build_configs[#build_configs + 1] = configs[name]
elseif variants[name] then
build_variants[#build_variants + 1] = name
build_variants[#build_variants + 1] = variants[name]
elseif subvariants[name] then
build_subvariants[#build_subvariants + 1] = name
else
Expand Down Expand Up @@ -360,7 +360,7 @@ local function analyze_targets(targets, configs, variants, subvariants, default_
else
-- User has requested all configurations at once. Possibly due to IDE mode.
for _, cfg in pairs(configs) do build_configs[#build_configs + 1] = cfg end
for var, _ in pairs(variants) do build_variants[#build_variants + 1] = var end
for _, var in pairs(variants) do build_variants[#build_variants + 1] = var end
for var, _ in pairs(subvariants) do build_subvariants[#build_subvariants + 1] = var end
end

Expand Down Expand Up @@ -393,7 +393,8 @@ local function analyze_targets(targets, configs, variants, subvariants, default_
return remaining_targets, build_tuples
end

local default_variants = { "debug", "production", "release" }
local function mk_defvariant(name) return { Name = name; Options = {} } end
local default_variants = { mk_defvariant "debug", mk_defvariant "production", mk_defvariant "release" }
local default_subvariants = { "default" }

local function iter_inherits(config, name)
Expand All @@ -411,7 +412,7 @@ end

local function setup_env(env, tuple)
local config = tuple.Config
local variant_name = tuple.Variant
local variant_name = tuple.Variant.Name
local build_id = config.Name .. "-" .. variant_name .. "-" .. tuple.SubVariant
local naked_platform, naked_toolset = match_build_id(build_id)

Expand All @@ -421,7 +422,7 @@ local function setup_env(env, tuple)

env:set("CURRENT_PLATFORM", naked_platform) -- e.g. linux or macosx
env:set("CURRENT_TOOLSET", naked_toolset) -- e.g. gcc or msvc
env:set("CURRENT_VARIANT", tuple.Variant) -- e.g. debug or release
env:set("CURRENT_VARIANT", tuple.Variant.Name) -- e.g. debug or release
env:set("BUILD_ID", build_id) -- e.g. linux-gcc-debug
env:set("OBJECTDIR", "$(OBJECTROOT)" .. SEP .. "$(BUILD_ID)")

Expand All @@ -446,7 +447,8 @@ local function setup_env(env, tuple)
printf("env append %s = %s", key, util.tostring(val))
end
if type(val) == "table" then
for _, subvalue in ipairs(val) do
local list = nodegen.flatten_list(build_id, val)
for _, subvalue in ipairs(list) do
env:append(key, subvalue)
end
else
Expand Down Expand Up @@ -477,13 +479,34 @@ function Build(args)
add_syntax_dir(dir)
end

if args.Variants then
for i, x in ipairs(args.Variants) do
if type(x) == "string" then
args.Variants[i] = mk_defvariant(x)
else
assert(x.Name)
if not x.Options then
x.Options = {}
end
end
end
end

local variant_array = args.Variants or default_variants
for _, variant in ipairs(variant_array) do variants[variant] = true end
for _, variant in ipairs(variant_array) do variants[variant.Name] = variant end

local subvariant_array = args.SubVariants or default_subvariants
for _, subvariant in ipairs(subvariant_array) do subvariants[subvariant] = true end

local default_variant = args.DefaultVariant or variant_array[1]
local default_variant = variant_array[1]
if args.DefaultVariant then
for _, x in ipairs(variant_array) do
if x.Name == args.DefaultVariant then
default_variant = x
end
end
end

local default_subvariant = args.DefaultSubVariant or subvariant_array[1]
local named_targets, build_tuples = analyze_targets(Targets, configs, variants, subvariants, default_variant, default_subvariant)

Expand Down
13 changes: 9 additions & 4 deletions scripts/tools/msvc.lua
Original file line number Diff line number Diff line change
Expand Up @@ -33,16 +33,21 @@ env:set_many {
["_CPPDEFS"] = "$(CPPDEFS:p/D) $(CPPDEFS_$(CURRENT_VARIANT:u):p/D)",
["_USE_PCH_OPT"] = "/Fp$(_PCH_FILE:b) /Yu$(_PCH_HEADER)",
["_USE_PCH"] = "",
["CCCOM"] = "$(CC) /c @RESPONSE|@|$(_CPPDEFS) $(CPPPATH:b:p/I) /nologo $(CCOPTS) $(CCOPTS_$(CURRENT_VARIANT:u)) $(_USE_PCH) /Fo$(@:b) $(<:b)",
["CXXCOM"] = "$(CC) /c @RESPONSE|@|$(_CPPDEFS) $(CPPPATH:b:p/I) /nologo $(CCOPTS) $(CCOPTS_$(CURRENT_VARIANT:u)) $(_USE_PCH) /Fo$(@:b) $(<:b)",
["_USE_PDB_CC_OPT"] = "/Zi /Fd$(_PDB_FILE:b)",
["_USE_PDB_LINK_OPT"] = "/DEBUG /PDB:$(_PDB_FILE)",
["_USE_PDB_CC"] = "",
["_USE_PDB_LINK"] = "",
["_CC_COMMON"] = "$(CC) /c @RESPONSE|@|$(_CPPDEFS) $(CPPPATH:b:p/I) /nologo $(CCOPTS) $(CCOPTS_$(CURRENT_VARIANT:u)) $(_USE_PCH) $(_USE_PDB_CC) /Fo$(@:b) $(<:b)",
["CCCOM"] = "$(_CC_COMMON)",
["CXXCOM"] = "$(_CC_COMMON)",
["PCHCOMPILE"] = "$(CC) /c $(_CPPDEFS) $(CPPPATH:b:p/I) /nologo $(CCOPTS) $(CCOPTS_$(CURRENT_VARIANT:u)) /Yc$(_PCH_HEADER) /Fp$(@:b) $(<:[1]:b)",
["LIBS"] = "",
["PROGOPTS"] = "",
["PROGCOM"] = "$(LD) /nologo @RESPONSE|@|$(PROGOPTS) $(LIBS) /out:$(@:b) $(<:b)",
["PROGCOM"] = "$(LD) /nologo @RESPONSE|@|$(_USE_PDB_LINK) $(PROGOPTS) $(LIBS) /out:$(@:b) $(<:b)",
["LIBOPTS"] = "",
["LIBCOM"] = "$(LIB) /nologo @RESPONSE|@|$(LIBOPTS) /out:$(@:b) $(<:b)",
["SHLIBOPTS"] = "",
["SHLIBCOM"] = "$(LD) /DLL /nologo @RESPONSE|@|$(SHLIBOPTS) $(LIBPATH:b:p/LIBPATH\\:) $(LIBS) /out:$(@:b) $(<:b)",
["SHLIBCOM"] = "$(LD) /DLL /nologo @RESPONSE|@|$(_USE_PDB_LINK) $(SHLIBOPTS) $(LIBPATH:b:p/LIBPATH\\:) $(LIBS) /out:$(@:b) $(<:b)",
["AUX_FILES_PROGRAM"] = { "$(@:B:a.exe.manifest)", "$(@:B:a.pdb)" },
["AUX_FILES_SHAREDLIB"] = { "$(@:B:a.dll.manifest)", "$(@:B:a.pdb)", "$(@:B:a.exp)", "$(@:B:a.lib)", },
}
Expand Down
12 changes: 11 additions & 1 deletion scripts/tundra/nodegen/native.lua
Original file line number Diff line number Diff line change
Expand Up @@ -54,6 +54,16 @@ local function eval_native_unit(generator, env, label, suffix, command, decl)
}
end

local aux_outputs = env:get_list("AUX_FILES_" .. label:upper(), {})

if generator.variant.Options.GeneratePdb then
local pdb_output = "$(OBJECTDIR)/" .. decl.Name .. ".pdb"
env:set('_PDB_FILE', pdb_output)
env:set('_USE_PDB_CC', '$(_USE_PDB_CC_OPT)')
env:set('_USE_PDB_LINK', '$(_USE_PDB_LINK_OPT)')
aux_outputs[#aux_outputs + 1] = pdb_output
end

local function implicit_make(source_file)
local t = type(source_file)
if t == "table" then
Expand Down Expand Up @@ -103,7 +113,7 @@ local function eval_native_unit(generator, env, label, suffix, command, decl)
Action = command,
InputFiles = inputs,
OutputFiles = targets,
AuxOutputFiles = env:get_list("AUX_FILES_" .. label:upper(), {}),
AuxOutputFiles = aux_outputs,
Dependencies = deps,
}
return libnode
Expand Down

0 comments on commit 1cd51e4

Please sign in to comment.