123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155 |
- --
- -- _premake_main.lua
- -- Script-side entry point for the main program logic.
- -- Copyright (c) 2002-2011 Jason Perkins and the Premake project
- --
- _WORKING_DIR = os.getcwd()
- --
- -- Inject a new target platform into each solution; called if the --platform
- -- argument was specified on the command line.
- --
- local function injectplatform(platform)
- if not platform then return true end
- platform = premake.checkvalue(platform, premake.fields.platforms.allowed)
- for sln in premake.solution.each() do
- local platforms = sln.platforms or { }
- -- an empty table is equivalent to a native build
- if #platforms == 0 then
- table.insert(platforms, "Native")
- end
- -- the solution must provide a native build in order to support this feature
- if not table.contains(platforms, "Native") then
- return false, sln.name .. " does not target native platform\nNative platform settings are required for the --platform feature."
- end
- -- add it to the end of the list, if it isn't in there already
- if not table.contains(platforms, platform) then
- table.insert(platforms, platform)
- end
- sln.platforms = platforms
- end
- return true
- end
- --
- -- Script-side program entry point.
- --
- function _premake_main(scriptpath)
- -- if running off the disk (in debug mode), load everything
- -- listed in _manifest.lua; the list divisions make sure
- -- everything gets initialized in the proper order.
- if (scriptpath) then
- local scripts = dofile(scriptpath .. "/_manifest.lua")
- for _,v in ipairs(scripts) do
- dofile(scriptpath .. "/" .. v)
- end
- end
- local profiler = newProfiler()
- if (nil ~= _OPTIONS["debug-profiler"]) then
- profiler:start()
- end
- -- Now that the scripts are loaded, I can use path.getabsolute() to properly
- -- canonicalize the executable path.
- _PREMAKE_COMMAND = path.getabsolute(_PREMAKE_COMMAND)
- -- Set up the environment for the chosen action early, so side-effects
- -- can be picked up by the scripts.
- premake.action.set(_ACTION)
- -- Seed the random number generator so actions don't have to do it themselves
- math.randomseed(os.time())
- -- If there is a project script available, run it to get the
- -- project information, available options and actions, etc.
- if (nil ~= _OPTIONS["file"]) then
- local fname = _OPTIONS["file"]
- if (os.isfile(fname)) then
- dofile(fname)
- else
- error("No genie script '" .. fname .. "' found!", 2)
- end
- else
- local dir, name = premake.findDefaultScript(path.getabsolute("./"))
- if dir ~= nil then
- local cwd = os.getcwd()
- os.chdir(dir)
- dofile(name)
- os.chdir(cwd)
- end
- end
- -- Process special options
- if (_OPTIONS["version"] or _OPTIONS["help"] or not _ACTION) then
- printf("GENie - Project generator tool %s", _GENIE_VERSION_STR)
- printf("https://github.com/bkaradzic/GENie")
- if (not _OPTIONS["version"]) then
- premake.showhelp()
- end
- return 1
- end
- -- Validate the command-line arguments. This has to happen after the
- -- script has run to allow for project-specific options
- action = premake.action.current()
- if (not action) then
- error("Error: no such action '" .. _ACTION .. "'", 0)
- end
- ok, err = premake.option.validate(_OPTIONS)
- if (not ok) then error("Error: " .. err, 0) end
- -- Sanity check the current project setup
- ok, err = premake.checktools()
- if (not ok) then error("Error: " .. err, 0) end
- -- If a platform was specified on the command line, inject it now
- ok, err = injectplatform(_OPTIONS["platform"])
- if (not ok) then error("Error: " .. err, 0) end
- -- work-in-progress: build the configurations
- print("Building configurations...")
- premake.bake.buildconfigs()
- ok, err = premake.checkprojects()
- if (not ok) then error("Error: " .. err, 0) end
- premake.stats = { }
- premake.stats.num_generated = 0
- premake.stats.num_skipped = 0
- -- Hand over control to the action
- printf("Running action '%s'...", action.trigger)
- premake.action.call(action.trigger)
- if (nil ~= _OPTIONS["debug-profiler"]) then
- profiler:stop()
- local filePath = path.getabsolute("GENie-profile.txt")
- print("Writing debug-profile report to ''" .. filePath .. "'.")
- local outfile = io.open(filePath, "w+")
- profiler:report(outfile, true)
- outfile:close()
- end
- printf("Done. Generated %d/%d projects."
- , premake.stats.num_generated
- , premake.stats.num_generated+premake.stats.num_skipped
- )
- return 0
- end
|