79 lines
2.4 KiB
Lua
79 lines
2.4 KiB
Lua
module(..., package.seeall)
|
|
|
|
local path = require "tundra.path"
|
|
local util = require "tundra.util"
|
|
local boot = require "tundra.boot"
|
|
local scanner = require "tundra.scanner"
|
|
local depgraph = require "tundra.depgraph"
|
|
|
|
local default_keywords = { "include" }
|
|
local default_bin_keywords = { "incbin" }
|
|
|
|
local function get_asm_scanner(env, fn)
|
|
local function test_bool(name, default)
|
|
val = env:get(name, default)
|
|
if val == "yes" or val == "true" or val == "1" then
|
|
return 1
|
|
else
|
|
return 0
|
|
end
|
|
end
|
|
local function new_scanner()
|
|
local paths = util.map(env:get_list("ASMINCPATH"), function (v) return env:interpolate(v) end)
|
|
local data = {
|
|
Paths = paths,
|
|
Keywords = env:get_list("ASMINC_KEYWORDS", default_keywords),
|
|
KeywordsNoFollow = env:get_list("ASMINC_BINARY_KEYWORDS", default_bin_keywords),
|
|
RequireWhitespace = test_bool("ASMINC_REQUIRE_WHITESPACE", "yes"),
|
|
UseSeparators = test_bool("ASMINC_USE_SEPARATORS", "yes"),
|
|
BareMeansSystem = test_bool("ASMINC_BARE_MEANS_SYSTEM", "no"),
|
|
}
|
|
return scanner.make_generic_scanner(data)
|
|
end
|
|
return env:memoize("ASMINCPATH", "_asm_scanner", new_scanner)
|
|
end
|
|
|
|
-- Register implicit make functions for assembly files.
|
|
-- These functions are called to transform source files in unit lists into
|
|
-- object files. This function is registered as a setup function so it will be
|
|
-- run after user modifications to the environment, but before nodes are
|
|
-- processed. This way users can override the extension lists.
|
|
local function generic_asm_setup(env)
|
|
local _assemble = function(env, pass, fn)
|
|
local object_fn = path.make_object_filename(env, fn, '$(OBJECTSUFFIX)')
|
|
|
|
return depgraph.make_node {
|
|
Env = env,
|
|
Label = 'Asm $(@)',
|
|
Pass = pass,
|
|
Action = "$(ASMCOM)",
|
|
InputFiles = { fn },
|
|
OutputFiles = { object_fn },
|
|
Scanner = get_asm_scanner(env, fn),
|
|
}
|
|
end
|
|
|
|
for _, ext in ipairs(env:get_list("ASM_EXTS")) do
|
|
env:register_implicit_make_fn(ext, _assemble)
|
|
end
|
|
end
|
|
|
|
function apply(_outer_env, options)
|
|
|
|
_outer_env:add_setup_function(generic_asm_setup)
|
|
|
|
_outer_env:set_many {
|
|
["ASM_EXTS"] = { ".s", ".asm" },
|
|
["ASMINCPATH"] = {},
|
|
["ASMDEFS"] = "",
|
|
["ASMDEFS_DEBUG"] = "",
|
|
["ASMDEFS_PRODUCTION"] = "",
|
|
["ASMDEFS_RELEASE"] = "",
|
|
["ASMOPTS"] = "",
|
|
["ASMOPTS_DEBUG"] = "",
|
|
["ASMOPTS_PRODUCTION"] = "",
|
|
["ASMOPTS_RELEASE"] = "",
|
|
}
|
|
end
|
|
|