2009-04-11 11:33:32 +00:00
|
|
|
--
|
|
|
|
-- make_solution.lua
|
|
|
|
-- Generate a solution-level makefile.
|
|
|
|
-- Copyright (c) 2002-2009 Jason Perkins and the Premake project
|
|
|
|
--
|
|
|
|
|
|
|
|
function premake.make_solution(sln)
|
2009-04-14 19:33:11 +00:00
|
|
|
-- create a shortcut to the compiler interface
|
|
|
|
local cc = premake[_OPTIONS.cc]
|
|
|
|
|
2009-04-11 11:33:32 +00:00
|
|
|
-- write a header showing the build options
|
2009-04-11 11:49:07 +00:00
|
|
|
_p('# %s solution makefile autogenerated by Premake', premake.actions[_ACTION].shortname)
|
|
|
|
_p('# Usage: make [ config=config_name ]')
|
|
|
|
_p('# Where {config_name} is one of: %s.', table.implode(sln.configurations, '"', '"', ', '):lower())
|
|
|
|
_p('')
|
2009-04-11 11:33:32 +00:00
|
|
|
|
|
|
|
-- set a default configuration
|
2009-04-11 11:49:07 +00:00
|
|
|
_p('ifndef config')
|
|
|
|
_p(' config=%s', _MAKE.esc(sln.configurations[1]:lower()))
|
|
|
|
_p('endif')
|
|
|
|
_p('export config')
|
|
|
|
_p('')
|
2009-04-11 11:33:32 +00:00
|
|
|
|
|
|
|
-- list the projects included in the solution
|
2009-04-11 11:49:07 +00:00
|
|
|
_p('PROJECTS := %s', table.concat(_MAKE.esc(table.extract(sln.projects, "name")), " "))
|
|
|
|
_p('')
|
|
|
|
_p('.PHONY: all clean $(PROJECTS)')
|
|
|
|
_p('')
|
|
|
|
_p('all: $(PROJECTS)')
|
2009-04-14 19:25:48 +00:00
|
|
|
_p('')
|
2009-04-11 11:33:32 +00:00
|
|
|
|
2009-04-14 19:25:48 +00:00
|
|
|
-- build a list of supported target platforms that also includes a generic build
|
2009-04-14 19:33:11 +00:00
|
|
|
local platforms = premake.filterplatforms(sln, cc.platforms)
|
2009-04-14 19:25:48 +00:00
|
|
|
table.insert(platforms, 1, "")
|
|
|
|
|
2009-04-11 11:33:32 +00:00
|
|
|
-- write the project build rules
|
|
|
|
for _, prj in ipairs(sln.projects) do
|
2009-04-14 19:25:48 +00:00
|
|
|
|
|
|
|
-- before each project rule, build a list of dependencies for the project. If any of
|
|
|
|
-- these dependencies change, the project needs to be rebuilt
|
2009-04-14 19:41:30 +00:00
|
|
|
for _, platform in ipairs(platforms) do
|
|
|
|
for cfg in premake.eachconfig(prj, platform) do
|
2009-04-14 19:33:11 +00:00
|
|
|
_p('ifeq ($(config),%s)', table.concat({ _MAKE.esc(cfg.name:lower()), cfg.platform}, ":"))
|
2009-04-14 19:25:48 +00:00
|
|
|
_p(' DEPENDENCIES := %s', table.concat(_MAKE.esc(table.extract(premake.getdependencies(cfg), "name")), " "))
|
|
|
|
_p('endif')
|
|
|
|
end
|
2009-04-11 11:33:32 +00:00
|
|
|
end
|
2009-04-11 11:49:07 +00:00
|
|
|
_p('')
|
2009-04-11 11:33:32 +00:00
|
|
|
|
2009-04-11 11:49:07 +00:00
|
|
|
_p('%s: ${DEPENDENCIES}', _MAKE.esc(prj.name))
|
|
|
|
_p('\t@echo ==== Building %s ====', prj.name)
|
|
|
|
_p('\t@${MAKE} --no-print-directory -C %s -f %s', _MAKE.esc(path.getrelative(sln.location, prj.location)), _MAKE.esc(_MAKE.getmakefilename(prj, true)))
|
|
|
|
_p('')
|
2009-04-11 11:33:32 +00:00
|
|
|
end
|
|
|
|
|
|
|
|
-- clean rules
|
2009-04-11 11:49:07 +00:00
|
|
|
_p('clean:')
|
2009-04-11 11:33:32 +00:00
|
|
|
for _ ,prj in ipairs(sln.projects) do
|
2009-04-11 11:49:07 +00:00
|
|
|
_p(' @${MAKE} --no-print-directory -C %s -f %s clean', _MAKE.esc(path.getrelative(sln.location, prj.location)), _MAKE.esc(_MAKE.getmakefilename(prj, true)))
|
2009-04-11 11:33:32 +00:00
|
|
|
end
|
|
|
|
end
|