diff --git a/premake/toolchain.lua b/premake/toolchain.lua new file mode 100644 index 0000000..94707c4 --- /dev/null +++ b/premake/toolchain.lua @@ -0,0 +1,287 @@ +-- +-- Copyright 2010-2012 Branimir Karadzic. All rights reserved. +-- License: http://www.opensource.org/licenses/BSD-2-Clause +-- + +local bxDir = (path.getabsolute("..") .. "/") + +function toolchain(_buildDir, _libDir) + + newoption { + trigger = "gcc", + value = "GCC", + description = "Choose GCC flavor", + allowed = { + { "emscripten", "Emscripten" }, + { "linux", "Linux" }, + { "mingw", "MinGW" }, + { "nacl", "Native Client" }, + { "pnacl", "Native Client - PNaCl" }, + } + } + + -- Avoid error when invoking premake4 --help. + if (_ACTION == nil) then return end + + local XEDK = os.getenv("XEDK") + if not XEDK then XEDK = "" end + + location (_buildDir .. "projects/" .. _ACTION) + + if _ACTION == "clean" then + os.rmdir(BUILD_DIR) + end + + if _ACTION == "gmake" then + + if nil == _OPTIONS["gcc"] then + print("GCC flavor must be specified!") + os.exit(1) + end + + flags { + "ExtraWarnings", + } + + if "emscripten" == _OPTIONS["gcc"] then + + if not os.getenv("EMSCRIPTEN") then + print("Set EMSCRIPTEN enviroment variables.") + end + + premake.gcc.cc = "$(EMSCRIPTEN)/emcc" + premake.gcc.cxx = "$(EMSCRIPTEN)/em++" + premake.gcc.ar = "$(EMSCRIPTEN)/emar" + location (_buildDir .. "projects/" .. _ACTION .. "-emscripten") + end + + if "linux" == _OPTIONS["gcc"] then + location (_buildDir .. "projects/" .. _ACTION .. "-linux") + end + + if "mingw" == _OPTIONS["gcc"] then + premake.gcc.cc = "$(MINGW)/bin/mingw32-gcc" + premake.gcc.cxx = "$(MINGW)/bin/mingw32-g++" + premake.gcc.ar = "$(MINGW)/bin/ar" + location (_buildDir .. "projects/" .. _ACTION .. "-mingw") + end + + if "nacl" == _OPTIONS["gcc"] then + + if not os.getenv("NACL") then + print("Set NACL enviroment variables.") + end + + premake.gcc.cc = "$(NACL)/bin/x86_64-nacl-gcc" + premake.gcc.cxx = "$(NACL)/bin/x86_64-nacl-g++" + premake.gcc.ar = "$(NACL)/bin/x86_64-nacl-ar" + location (_buildDir .. "projects/" .. _ACTION .. "-nacl") + end + + if "pnacl" == _OPTIONS["gcc"] then + + if not os.getenv("PNACL") then + print("Set PNACL enviroment variables.") + end + + premake.gcc.cc = "$(PNACL)/bin/pnacl-clang" + premake.gcc.cxx = "$(PNACL)/bin/pnacl-clang++" + premake.gcc.ar = "$(PNACL)/bin/pnacl-ar" + location (_buildDir .. "projects/" .. _ACTION .. "-pnacl") + end + end + + flags { + "StaticRuntime", + "NoMinimalRebuild", + "NoPCH", + "NativeWChar", + "NoRTTI", + "NoExceptions", + "NoEditAndContinue", + "Symbols", + } + + defines { + "__STDC_LIMIT_MACROS", + "__STDC_FORMAT_MACROS", + "__STDC_CONSTANT_MACROS", + } + + configuration "Debug" + targetsuffix "Debug" + + configuration "Release" + flags { + "OptimizeSpeed", + } + targetsuffix "Release" + + configuration { "vs*" } + includedirs { bxDir .. "include/compat/msvc" } + defines { + "WIN32", + "_WIN32", + "_HAS_EXCEPTIONS=0", + "_HAS_ITERATOR_DEBUGGING=0", + "_SCL_SECURE=0", + "_SECURE_SCL=0", + "_SCL_SECURE_NO_WARNINGS", + "_CRT_SECURE_NO_WARNINGS", + "_CRT_SECURE_NO_DEPRECATE", + } + buildoptions { + "/Oy-", -- Suppresses creation of frame pointers on the call stack. + "/Ob2", -- The Inline Function Expansion + } + + configuration { "x32", "vs*" } + targetdir (_buildDir .. "win32_" .. _ACTION .. "/bin") + objdir (_buildDir .. "win32_" .. _ACTION .. "/obj") + libdirs { + _libDir .. "lib/win32_" .. _ACTION, + "$(DXSDK_DIR)/lib/x86", + } + + configuration { "x64", "vs*" } + defines { "_WIN64" } + targetdir (_buildDir .. "win64_" .. _ACTION .. "/bin") + objdir (_buildDir .. "win64_" .. _ACTION .. "/obj") + libdirs { + _libDir .. "lib/win64_" .. _ACTION, + "$(DXSDK_DIR)/lib/x64", + } + + configuration { "mingw" } + defines { "WIN32" } + includedirs { bxDir .. "include/compat/mingw" } + buildoptions { + "-std=c++0x", + "-U__STRICT_ANSI__", + "-Wunused-value", + "-fdata-sections", + "-ffunction-sections", + } + linkoptions { + "-Wl,--gc-sections", + } + + configuration { "x32", "mingw" } + targetdir (_buildDir .. "win32_mingw" .. "/bin") + objdir (_buildDir .. "win32_mingw" .. "/obj") + libdirs { + _libDir .. "lib/win32_mingw", + "$(DXSDK_DIR)/lib/x86", + } + buildoptions { "-m32" } + + configuration { "x64", "mingw" } + targetdir (_buildDir .. "win64_mingw" .. "/bin") + objdir (_buildDir .. "win64_mingw" .. "/obj") + libdirs { + _libDir .. "lib/win64_mingw", + "$(DXSDK_DIR)/lib/x64", + } + buildoptions { "-m64" } + + configuration { "linux" } + buildoptions { + "-std=c++0x", + "-U__STRICT_ANSI__", + "-Wunused-value", + "-mfpmath=sse", -- force SSE to get 32-bit and 64-bit builds deterministic. + "-msse2", + } + links { + "rt", + } + linkoptions { + "-Wl,--gc-sections", + } + + configuration { "linux", "x32" } + targetdir (_buildDir .. "linux32_gcc" .. "/bin") + objdir (_buildDir .. "linux32_gcc" .. "/obj") + libdirs { _libDir .. "lib/linux32_gcc" } + buildoptions { + "-m32", + } + + configuration { "linux", "x64" } + targetdir (_buildDir .. "linux64_gcc" .. "/bin") + objdir (_buildDir .. "linux64_gcc" .. "/obj") + libdirs { _libDir .. "lib/linux64_gcc" } + buildoptions { + "-m64", + } + + configuration { "emscripten" } + targetdir (_buildDir .. "emscripten" .. "/bin") + objdir (_buildDir .. "emscripten" .. "/obj") + libdirs { _libDir .. "lib/emscripten" } + includedirs { "$(EMSCRIPTEN)/system/include" } + buildoptions { + "-pthread", + } + + configuration { "nacl" } + defines { "_BSD_SOURCE=1", "_POSIX_C_SOURCE=199506", "_XOPEN_SOURCE=600" } + includedirs { bxDir .. "include/compat/nacl" } + buildoptions { + "-std=c++0x", + "-U__STRICT_ANSI__", + "-pthread", + "-fno-stack-protector", + "-fdiagnostics-show-option", + "-Wunused-value", + "-fdata-sections", + "-ffunction-sections", + "-mfpmath=sse", -- force SSE to get 32-bit and 64-bit builds deterministic. + "-msse2", + -- "-fmerge-all-constants", + } + linkoptions { + "-Wl,--gc-sections", + } + + configuration { "x32", "nacl" } + targetdir (_buildDir .. "nacl-x86" .. "/bin") + objdir (_buildDir .. "nacl-x86" .. "/obj") + libdirs { _libDir .. "lib/nacl-x86" } + linkoptions { "-melf32_nacl" } + + configuration { "x64", "nacl" } + targetdir (_buildDir .. "nacl-x64" .. "/bin") + objdir (_buildDir .. "nacl-x64" .. "/obj") + libdirs { _libDir .. "lib/nacl-x64" } + linkoptions { "-melf64_nacl" } + + configuration { "pnacl" } + defines { "_BSD_SOURCE=1", "_POSIX_C_SOURCE=199506", "_XOPEN_SOURCE=600", "__native_client__", "__LITTLE_ENDIAN__" } + includedirs { bxDir .. "include/compat/nacl" } + buildoptions { + "-std=c++0x", + "-U__STRICT_ANSI__", + "-fno-stack-protector", + "-fdiagnostics-show-option", + "-Wunused-value", + "-fdata-sections", + "-ffunction-sections", + } + targetdir (_buildDir .. "pnacl" .. "/bin") + objdir (_buildDir .. "pnacl" .. "/obj") + libdirs { _libDir .. "lib/pnacl" } + includedirs { "$(PNACL)/sysroot/include" } + + configuration { "Xbox360" } + targetdir (_buildDir .. "xbox360" .. "/bin") + objdir (_buildDir .. "xbox360" .. "/obj") + includedirs { bxDir .. "include/compat/msvc" } + libdirs { _libDir .. "lib/xbox360" } + defines { + "NOMINMAX", + "_XBOX", + } + + configuration {} -- reset configuration +end