diff options
Diffstat (limited to 'docs/release/scripts/toolchain.lua')
-rw-r--r-- | docs/release/scripts/toolchain.lua | 1129 |
1 files changed, 1129 insertions, 0 deletions
diff --git a/docs/release/scripts/toolchain.lua b/docs/release/scripts/toolchain.lua new file mode 100644 index 00000000000..e596c06bfb0 --- /dev/null +++ b/docs/release/scripts/toolchain.lua @@ -0,0 +1,1129 @@ +-- +-- Copyright 2010-2015 Branimir Karadzic. All rights reserved. +-- License: https://github.com/bkaradzic/bx#license-bsd-2-clause +-- + +local naclToolchain = "" +local toolchainPrefix = "" + +if _OPTIONS['TOOLCHAIN'] then + toolchainPrefix = _OPTIONS["TOOLCHAIN"] +end + +newoption { + trigger = "gcc", + value = "GCC", + description = "Choose GCC flavor", + allowed = { + { "android-arm", "Android - ARM" }, + { "android-arm64", "Android - ARM64" }, + { "android-mips", "Android - MIPS" }, + { "android-mips64","Android - MIPS64" }, + { "android-x86", "Android - x86" }, + { "android-x64", "Android - x64" }, + { "asmjs", "Emscripten/asm.js" }, + { "freebsd", "FreeBSD" }, + { "freebsd-clang", "FreeBSD (clang compiler)"}, + { "linux-gcc", "Linux (GCC compiler)" }, + { "linux-clang", "Linux (Clang compiler)" }, + { "ios-arm", "iOS - ARM" }, + { "ios-simulator", "iOS - Simulator" }, + { "mingw32-gcc", "MinGW32" }, + { "mingw64-gcc", "MinGW64" }, + { "mingw-clang", "MinGW (clang compiler)" }, + { "netbsd", "NetBSD" }, + { "netbsd-clang", "NetBSD (clang compiler)"}, + { "openbsd", "OpenBSD" }, + { "osx", "OSX (GCC compiler)" }, + { "osx-clang", "OSX (Clang compiler)" }, + { "pnacl", "Native Client - PNaCl" }, + { "rpi", "RaspberryPi" }, + { "solaris", "Solaris" }, + { "steamlink", "Steam Link" }, + { "ci20", "Creator-Ci20" }, + }, +} + +newoption { + trigger = "vs", + value = "toolset", + description = "Choose VS toolset", + allowed = { + { "intel-14", "Intel C++ Compiler XE 14.0" }, + { "intel-15", "Intel C++ Compiler XE 15.0" }, + { "vs2015-clang", "Clang 3.6" }, + { "vs2015-xp", "Visual Studio 2015 targeting XP" }, + { "vs2017-clang", "Clang 3.6" }, + { "vs2017-xp", "Visual Studio 2017 targeting XP" }, + { "winphone8", "Windows Phone 8.0" }, + { "winphone81", "Windows Phone 8.1" }, + { "winstore81", "Windows Store 8.1" }, + { "winstore82", "Universal Windows App" } + }, +} + +newoption { + trigger = "xcode", + value = "xcode_target", + description = "Choose XCode target", + allowed = { + { "osx", "OSX" }, + { "ios", "iOS" }, + } +} + +newoption { + trigger = "with-android", + value = "#", + description = "Set Android platform version (default: android-21).", +} + +newoption { + trigger = "with-ios", + value = "#", + description = "Set iOS target version (default: 8.0).", +} + +newoption { + trigger = "with-windows", + value = "#", + description = "Set the Windows target platform version (default: 10.0.10240.0).", +} + +function toolchain(_buildDir, _subDir) + + location (_buildDir .. "projects/" .. _subDir .. "/".. _ACTION) + + local androidPlatform = "android-24" + if _OPTIONS["with-android"] then + androidPlatform = "android-" .. _OPTIONS["with-android"] + elseif _OPTIONS["PLATFORM"]:find("64", -2) then + androidPlatform = "android-24" + end + + local iosPlatform = "" + if _OPTIONS["with-ios"] then + iosPlatform = _OPTIONS["with-ios"] + end + + local windowsPlatform = "10.0.10240.0" + if _OPTIONS["with-windows"] then + windowsPlatform = _OPTIONS["with-windows"] + end + + if _ACTION == "gmake" or _ACTION == "ninja" then + + if nil == _OPTIONS["gcc"] or nil == _OPTIONS["gcc_version"] then + print("GCC flavor and version must be specified!") + os.exit(1) + end + + if string.find(_OPTIONS["gcc"], "android") then + -- 64-bit android platform requires >= 21 + if _OPTIONS["PLATFORM"]:find("64", -2) and tonumber(androidPlatform:sub(9)) < 21 then + error("64-bit android requires platform 21 or higher") + end + if not os.getenv("ANDROID_NDK_ROOT") then + print("Set ANDROID_NDK_ROOT environment variable.") + end + if not os.getenv("ANDROID_NDK_LLVM") then + print("Set ANDROID_NDK_LLVM envrionment variable.") + end + platform_ndk_env = "ANDROID_NDK_" .. _OPTIONS["PLATFORM"]:upper() + if not os.getenv(platform_ndk_env) then + print("Set " .. platform_ndk_env .. " environment variable.") + end + + local platformToolchainMap = { + ['arm'] = "arm-linux-androideabi", + ['arm64'] = "aarch64-linux-android", + ['mips64'] = "mips64el-linux-android", + ['mips'] = "mipsel-linux-android", + ['x86'] = "i686-linux-android", + ['x64'] = "x86_64-linux-android", + } + + toolchainPrefix = os.getenv(platform_ndk_env) .. "/bin/" .. platformToolchainMap[_OPTIONS["PLATFORM"]] .. "-" + + premake.gcc.cc = "$(ANDROID_NDK_LLVM)/bin/clang" + premake.gcc.cxx = "$(ANDROID_NDK_LLVM)/bin/clang++" + premake.gcc.ar = toolchainPrefix .. "ar" + premake.gcc.llvm = true + + location (_buildDir .. "projects/" .. _subDir .. "/".. _ACTION .. "-android-" .. _OPTIONS["PLATFORM"]) + end + + if "asmjs" == _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" + premake.gcc.llvm = true + location (_buildDir .. "projects/" .. _subDir .. "/".. _ACTION .. "-asmjs") + end + + if "freebsd" == _OPTIONS["gcc"] then + location (_buildDir .. "projects/" .. _subDir .. "/".. _ACTION .. "-freebsd") + end + + if "freebsd-clang" == _OPTIONS["gcc"] then + location (_buildDir .. "projects/" .. _subDir .. "/".. _ACTION .. "-freebsd-clang") + end + + if "netbsd" == _OPTIONS["gcc"] then + location (_buildDir .. "projects/" .. _subDir .. "/".. _ACTION .. "-netbsd") + end + + if "netbsd-clang" == _OPTIONS["gcc"] then + location (_buildDir .. "projects/" .. _subDir .. "/".. _ACTION .. "-netbsd-clang") + end + + if "openbsd" == _OPTIONS["gcc"] then + location (_buildDir .. "projects/" .. _subDir .. "/".. _ACTION .. "-openbsd") + end + + if "ios-arm" == _OPTIONS["gcc"] then + premake.gcc.cc = "/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/clang" + premake.gcc.cxx = "/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/clang++" + premake.gcc.ar = "ar" + location (_buildDir .. "projects/" .. _subDir .. "/".. _ACTION .. "-ios-arm") + end + + if "ios-simulator" == _OPTIONS["gcc"] then + premake.gcc.cc = "/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/clang" + premake.gcc.cxx = "/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/clang++" + premake.gcc.ar = "ar" + location (_buildDir .. "projects/" .. _subDir .. "/".. _ACTION .. "-ios-simulator") + end + + if "linux-gcc" == _OPTIONS["gcc"] then + -- Force gcc-4.2 on ubuntu-intrepid + if _OPTIONS["distro"]=="ubuntu-intrepid" then + premake.gcc.cc = "@gcc -V 4.2" + premake.gcc.cxx = "@g++-4.2" + end + premake.gcc.ar = "ar" + location (_buildDir .. "projects/" .. _subDir .. "/".. _ACTION .. "-linux") + end + + if "solaris" == _OPTIONS["gcc"] then + location (_buildDir .. "projects/" .. _subDir .. "/".. _ACTION .. "-solaris") + end + + + if "linux-clang" == _OPTIONS["gcc"] then + premake.gcc.cc = "clang" + premake.gcc.cxx = "clang++" + premake.gcc.ar = "ar" + location (_buildDir .. "projects/" .. _subDir .. "/".. _ACTION .. "-linux-clang") + end + + if "steamlink" == _OPTIONS["gcc"] then + if not os.getenv("MARVELL_SDK_PATH") then + print("Set MARVELL_SDK_PATH envrionment variable.") + end + premake.gcc.cc = "$(MARVELL_SDK_PATH)/toolchain/bin/armv7a-cros-linux-gnueabi-gcc" + premake.gcc.cxx = "$(MARVELL_SDK_PATH)/toolchain/bin/armv7a-cros-linux-gnueabi-g++" + premake.gcc.ar = "$(MARVELL_SDK_PATH)/toolchain/bin/armv7a-cros-linux-gnueabi-ar" + location (_buildDir .. "projects/" .. _subDir .. "/".. _ACTION .. "-steamlink") + end + + if "rpi" == _OPTIONS["gcc"] then + if not os.getenv("RASPBERRY_SDK_PATH") then + print("Set RASPBERRY_SDK_PATH envrionment variable.") + end + premake.gcc.cc = "$(RASPBERRY_SDK_PATH)/bin/arm-linux-gnueabihf-gcc" + premake.gcc.cxx = "$(RASPBERRY_SDK_PATH)/bin/arm-linux-gnueabihf-g++" + premake.gcc.ar = "$(RASPBERRY_SDK_PATH)/bin/arm-linux-gnueabihf-ar" + location (_buildDir .. "projects/" .. _subDir .. "/".. _ACTION .. "-rpi") + end + + if "ci20" == _OPTIONS["gcc"] then + if not os.getenv("MIPS_LINUXGNU_ROOT") then + print("Set MIPS_LINUXGNU_ROOT envrionment variable.") + end + premake.gcc.cc = "$(MIPS_LINUXGNU_ROOT)/bin/mips-mti-linux-gnu-gcc" + premake.gcc.cxx = "$(MIPS_LINUXGNU_ROOT)/bin/mips-mti-linux-gnu-g++" + premake.gcc.ar = "$(MIPS_LINUXGNU_ROOT)/bin/mips-mti-linux-gnu-ar" + location (_buildDir .. "projects/" .. _subDir .. "/".. _ACTION .. "-ci20") + end + + if "mingw32-gcc" == _OPTIONS["gcc"] then + if not os.getenv("MINGW32") then + print("Set MINGW32 envrionment variable.") + end + if toolchainPrefix == nil or toolchainPrefix == "" then + toolchainPrefix = "$(MINGW32)/bin/i686-w64-mingw32-" + end + premake.gcc.cc = toolchainPrefix .. "gcc" + premake.gcc.cxx = toolchainPrefix .. "g++" +-- work around GCC 4.9.2 not having proper linker for LTO=1 usage + local version_4_ar = str_to_version(_OPTIONS["gcc_version"]) + if (version_4_ar < 50000) then + premake.gcc.ar = toolchainPrefix .. "ar" + end + if (version_4_ar >= 50000) then + premake.gcc.ar = toolchainPrefix .. "gcc-ar" + end + location (_buildDir .. "projects/" .. _subDir .. "/".. _ACTION .. "-mingw32-gcc") + end + + if "mingw64-gcc" == _OPTIONS["gcc"] then + if not os.getenv("MINGW64") then + print("Set MINGW64 envrionment variable.") + end + if toolchainPrefix == nil or toolchainPrefix == "" then + toolchainPrefix = "$(MINGW64)/bin/x86_64-w64-mingw32-" + end + premake.gcc.cc = toolchainPrefix .. "gcc" + premake.gcc.cxx = toolchainPrefix .. "g++" +-- work around GCC 4.9.2 not having proper linker for LTO=1 usage + local version_4_ar = str_to_version(_OPTIONS["gcc_version"]) + if (version_4_ar < 50000) then + premake.gcc.ar = toolchainPrefix .. "ar" + end + if (version_4_ar >= 50000) then + premake.gcc.ar = toolchainPrefix .. "gcc-ar" + end + location (_buildDir .. "projects/" .. _subDir .. "/".. _ACTION .. "-mingw64-gcc") + end + + if "mingw-clang" == _OPTIONS["gcc"] then + premake.gcc.cc = "clang" + premake.gcc.cxx = "clang++" + premake.gcc.ar = "llvm-ar" + premake.gcc.llvm = true + location (_buildDir .. "projects/" .. _subDir .. "/".. _ACTION .. "-mingw-clang") + end + + if "osx" == _OPTIONS["gcc"] then + if os.is("linux") then + premake.gcc.cc = toolchainPrefix .. "clang" + premake.gcc.cxx = toolchainPrefix .. "clang++" + premake.gcc.ar = toolchainPrefix .. "ar" + end + location (_buildDir .. "projects/" .. _subDir .. "/".. _ACTION .. "-osx") + end + + if "osx-clang" == _OPTIONS["gcc"] then + premake.gcc.cc = toolchainPrefix .. "clang" + premake.gcc.cxx = toolchainPrefix .. "clang++" + premake.gcc.ar = toolchainPrefix .. "ar" + location (_buildDir .. "projects/" .. _subDir .. "/".. _ACTION .. "-osx-clang") + end + + if "pnacl" == _OPTIONS["gcc"] then + + if not os.getenv("NACL_SDK_ROOT") then + print("Set NACL_SDK_ROOT enviroment variables.") + end + + naclToolchain = "$(NACL_SDK_ROOT)/toolchain/win_pnacl/bin/pnacl-" + if os.is("macosx") then + naclToolchain = "$(NACL_SDK_ROOT)/toolchain/mac_pnacl/bin/pnacl-" + elseif os.is("linux") then + naclToolchain = "$(NACL_SDK_ROOT)/toolchain/linux_pnacl/bin/pnacl-" + end + + premake.gcc.cc = naclToolchain .. "clang" + premake.gcc.cxx = naclToolchain .. "clang++" + premake.gcc.ar = naclToolchain .. "ar" + location (_buildDir .. "projects/" .. _subDir .. "/".. _ACTION .. "-pnacl") + end + + if "rpi" == _OPTIONS["gcc"] then + location (_buildDir .. "projects/" .. _subDir .. "/".. _ACTION .. "-rpi") + end + + if "ci20" == _OPTIONS["gcc"] then + location (_buildDir .. "projects/" .. _subDir .. "/".. _ACTION .. "-ci20") + end + elseif _ACTION == "vs2015" or _ACTION == "vs2015-fastbuild" then + + if (_ACTION .. "-clang") == _OPTIONS["vs"] then + premake.vstudio.toolset = ("LLVM-" .. _ACTION) + location (_buildDir .. "projects/" .. _subDir .. "/".. _ACTION .. "-clang") + end + + if "winphone8" == _OPTIONS["vs"] then + premake.vstudio.toolset = "v110_wp80" + location (_buildDir .. "projects/" .. _subDir .. "/".. _ACTION .. "-winphone8") + end + + if "winphone81" == _OPTIONS["vs"] then + premake.vstudio.toolset = "v120_wp81" + platforms { "ARM" } + location (_buildDir .. "projects/" .. _subDir .. "/".. _ACTION .. "-winphone81") + end + + if "winstore81" == _OPTIONS["vs"] then + premake.vstudio.toolset = "v120" + premake.vstudio.storeapp = "8.1" + platforms { "ARM" } + location (_buildDir .. "projects/" .. _subDir .. "/".. _ACTION .. "-winstore81") + end + + if "winstore82" == _OPTIONS["vs"] then + premake.vstudio.toolset = "v140" + premake.vstudio.storeapp = "8.2" + + -- If needed, depending on GENie version, enable file-level configuration + if enablefilelevelconfig ~= nil then + enablefilelevelconfig() + end + + local action = premake.action.current() + action.vstudio.windowsTargetPlatformVersion = windowsPlatform + + platforms { "ARM" } + location (_buildDir .. "projects/" .. _subDir .. "/".. _ACTION .. "-winstore82") + end + + if "intel-14" == _OPTIONS["vs"] then + premake.vstudio.toolset = "Intel C++ Compiler XE 14.0" + location (_buildDir .. "projects/" .. _subDir .. "/".. _ACTION .. "-intel") + end + + if "intel-15" == _OPTIONS["vs"] then + premake.vstudio.toolset = "Intel C++ Compiler XE 15.0" + location (_buildDir .. "projects/" .. _subDir .. "/".. _ACTION .. "-intel") + end + + if ("vs2015-xp") == _OPTIONS["vs"] then + premake.vstudio.toolset = ("v140_xp") + location (_buildDir .. "projects/" .. _subDir .. "/".. _ACTION .. "-xp") + end + elseif _ACTION == "vs2017" or _ACTION == "vs2017-fastbuild" then + + if (_ACTION .. "-clang") == _OPTIONS["vs"] then + premake.vstudio.toolset = ("LLVM-" .. _ACTION) + location (_buildDir .. "projects/" .. _subDir .. "/".. _ACTION .. "-clang") + end + + if "winphone8" == _OPTIONS["vs"] then + premake.vstudio.toolset = "v110_wp80" + location (_buildDir .. "projects/" .. _subDir .. "/".. _ACTION .. "-winphone8") + end + + if "winphone81" == _OPTIONS["vs"] then + premake.vstudio.toolset = "v120_wp81" + platforms { "ARM" } + location (_buildDir .. "projects/" .. _subDir .. "/".. _ACTION .. "-winphone81") + end + + if "winstore81" == _OPTIONS["vs"] then + premake.vstudio.toolset = "v120" + premake.vstudio.storeapp = "8.1" + platforms { "ARM" } + location (_buildDir .. "projects/" .. _subDir .. "/".. _ACTION .. "-winstore81") + end + + if "winstore82" == _OPTIONS["vs"] then + premake.vstudio.toolset = "v141" + premake.vstudio.storeapp = "8.2" + + -- If needed, depending on GENie version, enable file-level configuration + if enablefilelevelconfig ~= nil then + enablefilelevelconfig() + end + + local action = premake.action.current() + action.vstudio.windowsTargetPlatformVersion = windowsPlatform + + platforms { "ARM" } + location (_buildDir .. "projects/" .. _subDir .. "/".. _ACTION .. "-winstore82") + end + + if "intel-14" == _OPTIONS["vs"] then + premake.vstudio.toolset = "Intel C++ Compiler XE 14.0" + location (_buildDir .. "projects/" .. _subDir .. "/".. _ACTION .. "-intel") + end + + if "intel-15" == _OPTIONS["vs"] then + premake.vstudio.toolset = "Intel C++ Compiler XE 15.0" + location (_buildDir .. "projects/" .. _subDir .. "/".. _ACTION .. "-intel") + end + + if ("vs2017-xp") == _OPTIONS["vs"] then + premake.vstudio.toolset = ("v141_xp") + location (_buildDir .. "projects/" .. _subDir .. "/".. _ACTION .. "-xp") + end + elseif _ACTION == "xcode4" then + + + if "osx" == _OPTIONS["xcode"] then + premake.xcode.toolset = "macosx" + location (path.join(_buildDir, "projects", _ACTION .. "-osx")) + + elseif "ios" == _OPTIONS["xcode"] then + premake.xcode.toolset = "iphoneos" + location (path.join(_buildDir, "projects", _ACTION .. "-ios")) + end + end + + if (_OPTIONS["CC"] ~= nil) then + premake.gcc.cc = _OPTIONS["CC"] + end + if (_OPTIONS["CXX"] ~= nil) then + premake.gcc.cxx = _OPTIONS["CXX"] + end + if (_OPTIONS["LD"] ~= nil) then + premake.gcc.ld = _OPTIONS["LD"] + end + + configuration {} -- reset configuration + + + configuration { "x32", "vs*" } + objdir (_buildDir .. _ACTION .. "/obj") + + configuration { "x32", "vs*", "Release" } + targetdir (_buildDir .. _ACTION .. "/bin/x32/Release") + + configuration { "x32", "vs*", "Debug" } + targetdir (_buildDir .. _ACTION .. "/bin/x32/Debug") + + configuration { "x64", "vs*" } + defines { "_WIN64" } + objdir (_buildDir .. _ACTION .. "/obj") + + configuration { "x64", "vs*", "Release" } + targetdir (_buildDir .. _ACTION .. "/bin/x64/Release") + + configuration { "x64", "vs*", "Debug" } + targetdir (_buildDir .. _ACTION .. "/bin/x64/Debug") + + configuration { "ARM", "vs*" } + targetdir (_buildDir .. _ACTION .. "/bin/ARM") + objdir (_buildDir .. _ACTION .. "/obj") + + configuration { "ARM", "vs*", "Release" } + targetdir (_buildDir .. _ACTION .. "/bin/ARM/Release") + + configuration { "ARM", "vs*", "Debug" } + targetdir (_buildDir .. _ACTION .. "/bin/ARM/Debug") + + configuration { "x32", "vs*-clang" } + objdir (_buildDir .. _ACTION .. "-clang/obj") + + configuration { "x32", "vs*-clang", "Release" } + targetdir (_buildDir .. _ACTION .. "-clang/bin/x32/Release") + + configuration { "x32", "vs*-clang", "Debug" } + targetdir (_buildDir .. _ACTION .. "-clang/bin/x32/Debug") + + configuration { "x64", "vs*-clang" } + objdir (_buildDir .. _ACTION .. "-clang/obj") + + configuration { "x64", "vs*-clang", "Release" } + targetdir (_buildDir .. _ACTION .. "-clang/bin/x64/Release") + + configuration { "x64", "vs*-clang", "Debug" } + targetdir (_buildDir .. _ACTION .. "-clang/bin/x64/Debug") + + configuration { "vs*-clang" } + buildoptions { + "-Qunused-arguments", + } + + configuration { "winphone8* or winstore8*" } + removeflags { + "StaticRuntime", + "NoExceptions", + } + flags { + "WinMain" + } + + configuration { "mingw*" } + defines { "WIN32" } + + configuration { "x32", "mingw32-gcc" } + objdir (_buildDir .. "mingw-gcc" .. "/obj") + buildoptions { "-m32" } + + configuration { "x32", "mingw32-gcc", "Release" } + targetdir (_buildDir .. "mingw-gcc" .. "/bin/x32/Release") + + configuration { "x32", "mingw32-gcc", "Debug" } + targetdir (_buildDir .. "mingw-gcc" .. "/bin/x32/Debug") + + configuration { "x64", "mingw64-gcc" } + objdir (_buildDir .. "mingw-gcc" .. "/obj") + buildoptions { "-m64" } + + configuration { "x64", "mingw64-gcc", "Release" } + targetdir (_buildDir .. "mingw-gcc" .. "/bin/x64/Release") + + configuration { "x64", "mingw64-gcc", "Debug" } + targetdir (_buildDir .. "mingw-gcc" .. "/bin/x64/Debug") + + configuration { "steamlink" } + objdir ( _buildDir .. "steamlink/obj") + defines { + "__STEAMLINK__=1", -- There is no special prefedined compiler symbol to detect SteamLink, faking it. + } + buildoptions { + "-marm", + "-mfloat-abi=hard", + "--sysroot=$(MARVELL_SDK_PATH)/rootfs", + } + linkoptions { + "-static-libgcc", + "-static-libstdc++", + "--sysroot=$(MARVELL_SDK_PATH)/rootfs", + } + + configuration { "steamlink", "Release" } + targetdir (_buildDir .. "steamlink/bin/Release") + + configuration { "steamlink", "Debug" } + targetdir (_buildDir .. "steamlink/bin/Debug") + + configuration { "rpi" } + objdir ( _buildDir .. "rpi/obj") + libdirs { + "$(RASPBERRY_SYSROOT)/opt/vc/lib", + } + includedirs { + "$(RASPBERRY_SYSROOT)/opt/vc/include", + "$(RASPBERRY_SYSROOT)/opt/vc/include/interface/vcos/pthreads", + "$(RASPBERRY_SYSROOT)/opt/vc/include/interface/vmcs_host/linux", + } + defines { + "__VCCOREVER__=0x04000000", -- There is no special prefedined compiler symbol to detect RaspberryPi, faking it. + } + linkoptions { + "-Wl,--gc-sections", + } + buildoptions { + "--sysroot=$(RASPBERRY_SYSROOT)", + } + linkoptions { + "-static-libgcc", + "-static-libstdc++", + "--sysroot=$(RASPBERRY_SYSROOT)", + } + + configuration { "rpi", "Release" } + targetdir (_buildDir .. "rpi/bin/Release") + + configuration { "rpi", "Debug" } + targetdir (_buildDir .. "rpi/bin/Debug") + + configuration { "ci20" } + objdir ( _buildDir .. "ci20/obj") + includedirs { + "$(CI20_SYSROOT)/mipsel-r2-hard/usr/include/c++/4.9", + "$(CI20_SYSROOT)/mipsel-r2-hard/usr/include/mipsel-linux-gnu/c++/4.9", + "$(CI20_SYSROOT)/mipsel-r2-hard/usr/include/c++/4.9/backward", + "$(CI20_SYSROOT)/mipsel-r2-hard/usr/lib/gcc/mipsel-linux-gnu/4.9/include", + "$(CI20_SYSROOT)/mipsel-r2-hard/usr/local/include", + "$(CI20_SYSROOT)/mipsel-r2-hard/usr/lib/gcc/mipsel-linux-gnu/4.9/include-fixed", + "$(CI20_SYSROOT)/mipsel-r2-hard/usr/include/mipsel-linux-gnu", + "$(CI20_SYSROOT)/mipsel-r2-hard/usr/include", + } + links { + "c", + "dl", + "m", + "gcc", + "stdc++", + "gcc_s", + } + + buildoptions { + "--sysroot=$(CI20_SYSROOT)", + "-Wno-pragmas", + "-Wno-undef", + "-EL", + "-mel", + "-march=mips32r2", + "-mllsc", + "-mabi=32", + } + linkoptions { + "--sysroot=$(CI20_SYSROOT)", + "-Wl,-rpath=$(CI20_SYSROOT)/mipsel-r2-hard/usr/lib/mipsel-linux-gnu/", + "-Wl,-rpath=$(CI20_SYSROOT)/mipsel-r2-hard/lib/mipsel-linux-gnu/", + "-nostdlib", + "-EL", + "-mel", + "-march=mips32r2", + "-mllsc", + "-mabi=32", + "$(MIPS_LINUXGNU_ROOT)/lib/gcc/mips-mti-linux-gnu/4.9.2/mipsel-r2-hard/lib/crtbegin.o", + "$(MIPS_LINUXGNU_ROOT)/lib/gcc/mips-mti-linux-gnu/4.9.2/mipsel-r2-hard/lib/crtend.o", + "-L$(CI20_SYSROOT)/mipsel-r2-hard/usr/lib/gcc/mipsel-linux-gnu/4.9", + "-L$(CI20_SYSROOT)/mipsel-r2-hard/usr/lib/mipsel-linux-gnu", + "-L$(CI20_SYSROOT)/mipsel-r2-hard/usr/lib", + "-L$(CI20_SYSROOT)/mipsel-r2-hard/lib/mipsel-linux-gnu", + "-L$(CI20_SYSROOT)/mipsel-r2-hard/lib", + } + + configuration { "ci20", "Release" } + targetdir (_buildDir .. "ci20/bin/Release") + + configuration { "ci20", "Debug" } + targetdir (_buildDir .. "ci20/bin/Debug") + + configuration { "mingw-clang" } + linkoptions { + "-Wl,--allow-multiple-definition", + } + + configuration { "x32", "mingw-clang" } + objdir ( _buildDir .. "mingw-clang/obj") + buildoptions { "-m32" } + + configuration { "x32", "mingw-clang", "Release" } + targetdir (_buildDir .. "mingw-clang/bin/x32/Release") + + configuration { "x32", "mingw-clang", "Debug" } + targetdir (_buildDir .. "mingw-clang/bin/x32/Debug") + + configuration { "x64", "mingw-clang" } + objdir (_buildDir .. "mingw-clang/obj") + buildoptions { "-m64" } + + configuration { "x64", "mingw-clang", "Release" } + targetdir (_buildDir .. "mingw-clang/bin/x64/Release") + + configuration { "x64", "mingw-clang", "Debug" } + targetdir (_buildDir .. "mingw-clang/bin/x64/Debug") + + configuration { "linux-gcc", "x32" } + objdir (_buildDir .. "linux_gcc" .. "/obj") + buildoptions { + "-m32", + } + + configuration { "linux-gcc", "x32", "Release" } + targetdir (_buildDir .. "linux_gcc" .. "/bin/x32/Release") + + configuration { "linux-gcc", "x32", "Debug" } + targetdir (_buildDir .. "linux_gcc" .. "/bin/x32/Debug") + + configuration { "linux-gcc", "x64" } + objdir (_buildDir .. "linux_gcc" .. "/obj") + buildoptions { + "-m64", + } + + configuration { "linux-gcc", "x64", "Release" } + targetdir (_buildDir .. "linux_gcc" .. "/bin/x64/Release") + + configuration { "linux-gcc", "x64", "Debug" } + targetdir (_buildDir .. "linux_gcc" .. "/bin/x64/Debug") + + configuration { "linux-clang", "x32" } + objdir (_buildDir .. "linux_clang" .. "/obj") + buildoptions { + "-m32", + } + + configuration { "linux-clang", "x32", "Release" } + targetdir (_buildDir .. "linux_clang" .. "/bin/x32/Release") + + configuration { "linux-clang", "x32", "Debug" } + targetdir (_buildDir .. "linux_clang" .. "/bin/x32/Debug") + + configuration { "linux-clang", "x64" } + objdir (_buildDir .. "linux_clang" .. "/obj") + buildoptions { + "-m64", + } + + configuration { "linux-clang", "x64", "Release" } + targetdir (_buildDir .. "linux_clang" .. "/bin/x64/Release") + + configuration { "linux-clang", "x64", "Debug" } + targetdir (_buildDir .. "linux_clang" .. "/bin/x64/Debug") + + configuration { "solaris", "x32" } + objdir (_buildDir .. "solaris" .. "/obj") + buildoptions { + "-m32", + } + + configuration { "solaris", "x32", "Release" } + targetdir (_buildDir .. "solaris" .. "/bin/x32/Release") + + configuration { "solaris", "x32", "Debug" } + targetdir (_buildDir .. "solaris" .. "/bin/x32/Debug") + + configuration { "solaris", "x64" } + objdir (_buildDir .. "solaris" .. "/obj") + buildoptions { + "-m64", + } + + configuration { "solaris", "x64", "Release" } + targetdir (_buildDir .. "solaris" .. "/bin/x64/Release") + + configuration { "solaris", "x64", "Debug" } + targetdir (_buildDir .. "solaris" .. "/bin/x64/Debug") + + configuration { "freebsd", "x32" } + objdir (_buildDir .. "freebsd" .. "/obj") + buildoptions { + "-m32", + } + + configuration { "freebsd", "x32", "Release" } + targetdir (_buildDir .. "freebsd" .. "/bin/x32/Release") + + configuration { "freebsd", "x32", "Debug" } + targetdir (_buildDir .. "freebsd" .. "/bin/x32/Debug") + + configuration { "freebsd", "x64" } + objdir (_buildDir .. "freebsd" .. "/obj") + buildoptions { + "-m64", + } + configuration { "freebsd", "x64", "Release" } + targetdir (_buildDir .. "freebsd" .. "/bin/x64/Release") + + configuration { "freebsd", "x64", "Debug" } + targetdir (_buildDir .. "freebsd" .. "/bin/x64/Debug") + + configuration { "netbsd", "x32" } + objdir (_buildDir .. "netbsd" .. "/obj") + buildoptions { + "-m32", + } + configuration { "netbsd", "x32", "Release" } + targetdir (_buildDir .. "netbsd" .. "/bin/x32/Release") + + configuration { "netbsd", "x32", "Debug" } + targetdir (_buildDir .. "netbsd" .. "/bin/x32/Debug") + + configuration { "netbsd", "x64" } + objdir (_buildDir .. "netbsd" .. "/obj") + buildoptions { + "-m64", + } + configuration { "netbsd", "x64", "Release" } + targetdir (_buildDir .. "netbsd" .. "/bin/x64/Release") + + configuration { "netbsd", "x64", "Debug" } + targetdir (_buildDir .. "netbsd" .. "/bin/x64/Debug") + + configuration { "openbsd", "x32" } + objdir (_buildDir .. "openbsd" .. "/obj") + buildoptions { + "-m32", + } + configuration { "openbsd", "x32", "Release" } + targetdir (_buildDir .. "openbsd" .. "/bin/x32/Release") + + configuration { "openbsd", "x32", "Debug" } + targetdir (_buildDir .. "openbsd" .. "/bin/x32/Debug") + + configuration { "openbsd", "x64" } + objdir (_buildDir .. "openbsd" .. "/obj") + buildoptions { + "-m64", + } + configuration { "openbsd", "x64", "Release" } + targetdir (_buildDir .. "openbsd" .. "/bin/x64/Release") + + configuration { "openbsd", "x64", "Debug" } + targetdir (_buildDir .. "openbsd" .. "/bin/x64/Debug") + + configuration { "android-*", "Release" } + targetdir (_buildDir .. "android/bin/" .. _OPTIONS["PLATFORM"] .. "/Release") + + configuration { "android-*", "Debug" } + targetdir (_buildDir .. "android/bin/" .. _OPTIONS["PLATFORM"] .. "/Debug") + + configuration { "android-*" } + objdir (_buildDir .. "android/obj/" .. _OPTIONS["PLATFORM"]) + includedirs { + MAME_DIR .. "3rdparty/bgfx/3rdparty/khronos", + "$(ANDROID_NDK_ROOT)/sources/cxx-stl/llvm-libc++/libcxx/include", + "$(ANDROID_NDK_ROOT)/sources/cxx-stl/llvm-libc++/include", + "$(ANDROID_NDK_ROOT)/sysroot/usr/include", + "$(ANDROID_NDK_ROOT)/sources/android/support/include", + "$(ANDROID_NDK_ROOT)/sources/android/native_app_glue", + } + linkoptions { + "-nostdlib", + } + flags { + "NoImportLib", + } + links { + "c", + "dl", + "m", + "android", + "log", + "c++_static", + "c++abi", + "stdc++", + "gcc", + } + buildoptions_c { + "-Wno-strict-prototypes", + } + buildoptions { + "-fpic", + "-ffunction-sections", + "-funwind-tables", + "-fstack-protector-strong", + "-no-canonical-prefixes", + "-fno-integrated-as", + "-Wunused-value", + "-Wundef", + "-Wno-cast-align", + "-Wno-unknown-attributes", + "-Wno-macro-redefined", + "-DASIO_HAS_STD_STRING_VIEW", + "-Wno-unused-function", + } + linkoptions { + "-no-canonical-prefixes", + "-Wl,--no-undefined", + "-Wl,-z,noexecstack", + "-Wl,-z,relro", + "-Wl,-z,now", + } + + + configuration { "android-arm" } + libdirs { + "$(ANDROID_NDK_ROOT)/sources/cxx-stl/llvm-libc++/libs/armeabi-v7a", + "$(ANDROID_NDK_ROOT)/platforms/" .. androidPlatform .. "/arch-arm/usr/lib", + } + includedirs { + "$(ANDROID_NDK_ROOT)/sysroot/usr/include/arm-linux-androideabi", + } + buildoptions { + "-gcc-toolchain $(ANDROID_NDK_ARM)", + "-target armv7-none-linux-androideabi", + "-march=armv7-a", + "-mfloat-abi=softfp", + "-mfpu=vfpv3-d16", + "-mthumb", + } + links { + "unwind", + } + linkoptions { + "-gcc-toolchain $(ANDROID_NDK_ARM)", + "--sysroot=$(ANDROID_NDK_ROOT)/platforms/" .. androidPlatform .. "/arch-arm", + "$(ANDROID_NDK_ROOT)/platforms/" .. androidPlatform .. "/arch-arm/usr/lib/crtbegin_so.o", + "$(ANDROID_NDK_ROOT)/platforms/" .. androidPlatform .. "/arch-arm/usr/lib/crtend_so.o", + "-target armv7-none-linux-androideabi", + "-march=armv7-a", + "-mthumb", + } + + configuration { "android-arm64" } + libdirs { + "$(ANDROID_NDK_ROOT)/sources/cxx-stl/llvm-libc++/libs/arm64-v8a", + "$(ANDROID_NDK_ROOT)/platforms/" .. androidPlatform .. "/arch-arm64/usr/lib64", + } + includedirs { + "$(ANDROID_NDK_ROOT)/sysroot/usr/include/aarch64-linux-android", + } + buildoptions { + "-gcc-toolchain $(ANDROID_NDK_ARM64)", + "-target aarch64-none-linux-android", + } + linkoptions { + "-gcc-toolchain $(ANDROID_NDK_ARM64)", + "--sysroot=$(ANDROID_NDK_ROOT)/platforms/" .. androidPlatform .. "/arch-arm64", + "$(ANDROID_NDK_ROOT)/platforms/" .. androidPlatform .. "/arch-arm64/usr/lib/crtbegin_so.o", + "$(ANDROID_NDK_ROOT)/platforms/" .. androidPlatform .. "/arch-arm64/usr/lib/crtend_so.o", + "-target aarch64-none-linux-android", + } + + configuration { "android-x86" } + libdirs { + "$(ANDROID_NDK_ROOT)/sources/cxx-stl/llvm-libc++/libs/x86", + "$(ANDROID_NDK_ROOT)/platforms/" .. androidPlatform .. "/arch-x86/usr/lib", + } + includedirs { + "$(ANDROID_NDK_ROOT)/sysroot/usr/include/i686-linux-android", + } + buildoptions { + "-gcc-toolchain $(ANDROID_NDK_X86)", + "-target i686-none-linux-android", + "-mssse3" + } + linkoptions { + "-gcc-toolchain $(ANDROID_NDK_X86)", + "-target i686-none-linux-android", + "-mssse3", + "--sysroot=$(ANDROID_NDK_ROOT)/platforms/" .. androidPlatform .. "/arch-x86", + "$(ANDROID_NDK_ROOT)/platforms/" .. androidPlatform .. "/arch-x86/usr/lib/crtbegin_so.o", + "$(ANDROID_NDK_ROOT)/platforms/" .. androidPlatform .. "/arch-x86/usr/lib/crtend_so.o", + } + + configuration { "android-x64" } + libdirs { + "$(ANDROID_NDK_ROOT)/sources/cxx-stl/llvm-libc++/libs/x86_64", + "$(ANDROID_NDK_ROOT)/platforms/" .. androidPlatform .. "/arch-x86_64/usr/lib64", + } + includedirs { + "$(ANDROID_NDK_ROOT)/sysroot/usr/include/x86_64-linux-android", + } + buildoptions { + "-gcc-toolchain $(ANDROID_NDK_X64)", + "-target x86_64-none-linux-android", + } + linkoptions { + "-gcc-toolchain $(ANDROID_NDK_X64)", + "-target x86_64-none-linux-android", + "--sysroot=$(ANDROID_NDK_ROOT)/platforms/" .. androidPlatform .. "/arch-x86_64", + "$(ANDROID_NDK_ROOT)/platforms/" .. androidPlatform .. "/arch-x86_64/usr/lib64/crtbegin_so.o", + "$(ANDROID_NDK_ROOT)/platforms/" .. androidPlatform .. "/arch-x86_64/usr/lib64/crtend_so.o", + } + + configuration { "asmjs" } + targetdir (_buildDir .. "asmjs" .. "/bin") + objdir (_buildDir .. "asmjs" .. "/obj") + includedirs { + "$(EMSCRIPTEN)/system/include", + "$(EMSCRIPTEN)/system/include/compat", + "$(EMSCRIPTEN)/system/include/libc", + "$(EMSCRIPTEN)/system/lib/libcxxabi/include", + } + buildoptions { + "-Wno-cast-align", + "-Wno-tautological-compare", + "-Wno-self-assign-field", + "-Wno-format-security", + "-Wno-inline-new-delete", + "-Wno-constant-logical-operand", + "-Wno-absolute-value", + "-Wno-unknown-warning-option", + "-Wno-extern-c-compat", + } + + configuration { "pnacl" } + buildoptions { + "-U__STRICT_ANSI__", -- strcasecmp, setenv, unsetenv,... + "-fno-stack-protector", + "-fdiagnostics-show-option", + "-fdata-sections", + "-ffunction-sections", + "-Wunused-value", + } + + configuration { "pnacl" } + buildoptions { + "-Wno-tautological-undefined-compare", + "-Wno-cast-align", + } + includedirs { + "$(NACL_SDK_ROOT)/include", + "$(NACL_SDK_ROOT)/include/pnacl", + } + + configuration { "pnacl" } + targetdir (_buildDir .. "pnacl" .. "/bin") + objdir (_buildDir .. "pnacl" .. "/obj") + + configuration { "pnacl", "Debug" } + libdirs { "$(NACL_SDK_ROOT)/lib/pnacl/Debug" } + + configuration { "pnacl", "Release" } + libdirs { "$(NACL_SDK_ROOT)/lib/pnacl/Release" } + + configuration { "osx*", "x32" } + objdir (_buildDir .. "osx_clang" .. "/obj") + buildoptions { + "-m32", + } + configuration { "osx*", "x32", "Release" } + targetdir (_buildDir .. "osx_clang" .. "/bin/x32/Release") + + configuration { "osx*", "x32", "Debug" } + targetdir (_buildDir .. "osx_clang" .. "/bin/x32/Debug") + + configuration { "osx*", "x64" } + objdir (_buildDir .. "osx_clang" .. "/obj") + buildoptions { + "-m64", "-DHAVE_IMMINTRIN_H=1", + } + + configuration { "osx*", "x64", "Release" } + targetdir (_buildDir .. "osx_clang" .. "/bin/x64/Release") + + configuration { "osx*", "x64", "Debug" } + targetdir (_buildDir .. "osx_clang" .. "/bin/x64/Debug") + + configuration { "ios-arm" } + targetdir (_buildDir .. "ios-arm" .. "/bin") + objdir (_buildDir .. "ios-arm" .. "/obj") + + configuration { "ios-simulator" } + targetdir (_buildDir .. "ios-simulator" .. "/bin") + objdir (_buildDir .. "ios-simulator" .. "/obj") + + configuration { "rpi" } + targetdir (_buildDir .. "rpi" .. "/bin") + objdir (_buildDir .. "rpi" .. "/obj") + + configuration {} -- reset configuration + + return true +end + +function strip() + if _OPTIONS["STRIP_SYMBOLS"]~="1" then + return true + end + + configuration { "osx-*" } + postbuildcommands { + "$(SILENT) echo Stripping symbols.", + "$(SILENT) " .. (_OPTIONS['TOOLCHAIN'] and toolchainPrefix) .. "strip \"$(TARGET)\"", + } + + configuration { "android-*" } + postbuildcommands { + "$(SILENT) echo Stripping symbols.", + "$(SILENT) " .. toolchainPrefix .. "strip -s \"$(TARGET)\"" + } + + configuration { "linux-* or rpi" } + postbuildcommands { + "$(SILENT) echo Stripping symbols.", + "$(SILENT) strip -s \"$(TARGET)\"" + } + + configuration { "mingw*", "x64" } + postbuildcommands { + "$(SILENT) echo Stripping symbols.", + "$(SILENT) " .. (_OPTIONS['TOOLCHAIN'] or "$(MINGW64)/bin/") .. "strip -s \"$(TARGET)\"", + } + configuration { "mingw*", "x32" } + postbuildcommands { + "$(SILENT) echo Stripping symbols.", + "$(SILENT) " .. (_OPTIONS['TOOLCHAIN'] or "$(MINGW32)/bin/") .. "strip -s \"$(TARGET)\"", + } + + configuration { "pnacl" } + postbuildcommands { + "$(SILENT) echo Running pnacl-finalize.", + "$(SILENT) " .. naclToolchain .. "finalize \"$(TARGET)\"" + } + + configuration { "asmjs" } + postbuildcommands { + "$(SILENT) echo Running asmjs finalize.", + "$(SILENT) $(EMSCRIPTEN)/emcc -O2 -s TOTAL_MEMORY=268435456 \"$(TARGET)\" -o \"$(TARGET)\".html" + -- ALLOW_MEMORY_GROWTH + } + + configuration {} -- reset configuration +end + |