123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295 |
- ---
- -- Premake 5.x build configuration script
- -- Use this script to configure the project with Premake5.
- ---
- --
- -- Remember my location; I will need it to locate sub-scripts later.
- --
- local corePath = _SCRIPT_DIR
- --
- -- Disable deprecation warnings for myself, so that older development
- -- versions of Premake can be used to bootstrap new builds.
- --
- premake.api.deprecations "off"
- --
- -- Register supporting actions and options.
- --
- newaction {
- trigger = "embed",
- description = "Embed scripts in scripts.c; required before release builds",
- execute = function ()
- include (path.join(corePath, "scripts/embed.lua"))
- end
- }
- newaction {
- trigger = "package",
- description = "Creates source and binary packages",
- execute = function ()
- include (path.join(corePath, "scripts/package.lua"))
- end
- }
- newaction {
- trigger = "docs-check",
- description = "Validates documentation files for Premake APIs",
- execute = function ()
- include (path.join(corePath, "scripts/docscheck.lua"))
- end
- }
- newaction {
- trigger = "test",
- description = "Run the automated test suite",
- execute = function ()
- test = require "self-test"
- premake.action.call("self-test")
- end
- }
- newoption {
- trigger = "test-all",
- description = "Run all unit tests, including slower network and I/O"
- }
- newoption {
- trigger = "test-only",
- description = "When testing, run only the specified suite or test"
- }
- newoption {
- trigger = "to",
- value = "path",
- description = "Set the output location for the generated files"
- }
- newoption {
- trigger = "no-curl",
- description = "Disable Curl 3rd party lib"
- }
- newoption {
- trigger = "no-zlib",
- description = "Disable Zlib/Zip 3rd party lib"
- }
- newoption {
- trigger = "no-luasocket",
- description = "Disable Luasocket 3rd party lib"
- }
- newoption {
- trigger = "bytecode",
- description = "Embed scripts as bytecode instead of stripped souce code"
- }
- newoption {
- trigger = "arch",
- value = "arch",
- description = "Set the architecture of the binary to be built.",
- allowed = {
- { "ARM", "ARM (On macOS, same as ARM64.)" },
- { "ARM64", "ARM64" },
- { "x86", "x86 (On macOS, same as x86_64.)" },
- { "x86_64", "x86_64" },
- { "Universal", "Universal Binary (macOS only)" },
- --
- { "Win32", "Same as x86" },
- { "x64", "Same as x86_64" },
- },
- default = "x86",
- }
- --
- -- Define the project. Put the release configuration first so it will be the
- -- default when folks build using the makefile. That way they don't have to
- -- worry about the /scripts argument and all that.
- --
- -- TODO: Switch to these new APIs once they've had a chance to land everywhere
- --
- -- defaultConfiguration "Release"
- -- symbols "On"
- --
- solution "Premake5"
- configurations { "Release", "Debug" }
- location ( _OPTIONS["to"] )
- flags { "StaticRuntime", "MultiProcessorCompile" }
- warnings "Extra"
- if not _OPTIONS["no-zlib"] then
- defines { "PREMAKE_COMPRESSION" }
- end
- if not _OPTIONS["no-curl"] then
- defines { "CURL_STATICLIB", "PREMAKE_CURL"}
- end
- filter { "system:macosx", "options:arch=ARM or arch=ARM64" }
- buildoptions { "-arch arm64" }
- linkoptions { "-arch arm64" }
- filter { "system:macosx", "options:arch=x86 or arch=x86_64 or arch=Win32 or arch=x64" }
- buildoptions { "-arch x86_64" }
- linkoptions { "-arch x86_64" }
- filter { "system:macosx", "options:arch=Universal" }
- buildoptions { "-arch arm64", "-arch x86_64" }
- linkoptions { "-arch arm64", "-arch x86_64" }
- filter { "system:windows", "options:arch=ARM" }
- platforms { "ARM" }
- filter { "system:windows", "options:arch=ARM64" }
- platforms { "ARM64" }
- filter { "system:windows", "options:arch=x86 or arch=Win32" }
- platforms { "Win32" }
- filter { "system:windows", "options:arch=x86_64 or arch=x64" }
- platforms { "x64" }
- filter "configurations:Debug"
- defines "_DEBUG"
- flags { "Symbols" }
- filter "configurations:Release"
- defines "NDEBUG"
- optimize "Full"
- flags { "NoBufferSecurityCheck", "NoRuntimeChecks" }
- filter "action:vs*"
- defines { "_CRT_SECURE_NO_DEPRECATE", "_CRT_SECURE_NO_WARNINGS", "_CRT_NONSTDC_NO_WARNINGS" }
- filter { "system:windows", "configurations:Release" }
- flags { "NoIncrementalLink" }
- -- MinGW AR does not handle LTO out of the box and need a plugin to be setup
- filter { "system:windows", "configurations:Release", "toolset:not mingw" }
- flags { "LinkTimeOptimization" }
- project "Premake5"
- targetname "premake5"
- language "C"
- kind "ConsoleApp"
- includedirs { "contrib/lua/src", "contrib/luashim" }
- links { "lua-lib" }
- -- optional 3rd party libraries
- if not _OPTIONS["no-zlib"] then
- includedirs { "contrib/zlib", "contrib/libzip" }
- links { "zip-lib", "zlib-lib" }
- end
- if not _OPTIONS["no-curl"] then
- includedirs { "contrib/curl/include" }
- links { "curl-lib" }
- end
- files
- {
- "*.txt", "**.lua",
- "src/**.h", "src/**.c",
- "modules/**"
- }
- excludes
- {
- "contrib/**.*",
- "binmodules/**.*"
- }
- filter "configurations:Debug"
- targetdir "bin/debug"
- debugargs { "--scripts=%{prj.location}/%{path.getrelative(prj.location, prj.basedir)}", "test" }
- debugdir "."
- filter "configurations:Release"
- targetdir "bin/release"
- filter "system:windows"
- links { "ole32", "ws2_32", "advapi32", "version" }
- files { "src/**.rc" }
- filter "toolset:mingw"
- links { "crypt32" }
- filter "system:linux or bsd or hurd"
- defines { "LUA_USE_POSIX", "LUA_USE_DLOPEN" }
- links { "m" }
- linkoptions { "-rdynamic" }
- filter "system:linux or hurd"
- links { "dl", "rt" }
- filter { "system:not windows", "system:not macosx" }
- if not _OPTIONS["no-curl"] then
- links { "mbedtls-lib" }
- end
- filter "system:macosx"
- defines { "LUA_USE_MACOSX" }
- links { "CoreServices.framework", "Foundation.framework", "Security.framework", "readline" }
- filter { "system:macosx", "action:gmake" }
- toolset "clang"
- filter { "system:solaris" }
- links { "m", "socket", "nsl" }
- filter "system:aix"
- defines { "LUA_USE_POSIX", "LUA_USE_DLOPEN" }
- links { "m" }
- filter "system:haiku"
- defines { "LUA_USE_POSIX", "LUA_USE_DLOPEN", "_BSD_SOURCE" }
- links { "network", "bsd" }
- -- optional 3rd party libraries
- group "contrib"
- include "contrib/lua"
- include "contrib/luashim"
- if not _OPTIONS["no-zlib"] then
- include "contrib/zlib"
- include "contrib/libzip"
- end
- if not _OPTIONS["no-curl"] then
- include "contrib/mbedtls"
- include "contrib/curl"
- end
- group "Binary Modules"
- include "binmodules/example"
- if not _OPTIONS["no-luasocket"] then
- include "binmodules/luasocket"
- end
- --
- -- A more thorough cleanup.
- --
- if _ACTION == "clean" then
- os.rmdir("bin")
- os.rmdir("build")
- end
|