diff options
author | Spartan322 <Megacake1234@gmail.com> | 2023-07-25 02:24:01 +0200 |
---|---|---|
committer | Spartan322 <Megacake1234@gmail.com> | 2023-07-26 23:54:58 +0200 |
commit | be1d0545c2f7a85a63d05b4bdc1020ee284e72cb (patch) | |
tree | 09cb0fa0a1dbe83d4833bcd62dc8832161e4329b /tools/windows.py | |
parent | 65443efcc2f4c7d687b2bd9c631f6bb426688bbf (diff) |
Initial structural commit
Diffstat (limited to 'tools/windows.py')
-rw-r--r-- | tools/windows.py | 73 |
1 files changed, 73 insertions, 0 deletions
diff --git a/tools/windows.py b/tools/windows.py new file mode 100644 index 0000000..0fd86a6 --- /dev/null +++ b/tools/windows.py @@ -0,0 +1,73 @@ +# Copied from https://github.com/godotengine/godot-cpp/blob/edf02f83194b58408ca241459c986e32c52fd9c7/tools/windows.py +import sys + +import my_spawn + +from SCons.Tool import msvc, mingw +from SCons.Variables import * + + +def options(opts): + opts.Add(BoolVariable("use_mingw", "Use the MinGW compiler instead of MSVC - only effective on Windows", False)) + opts.Add(BoolVariable("use_clang_cl", "Use the clang driver instead of MSVC - only effective on Windows", False)) + + +def exists(env): + return True + + +def generate(env): + base = None + if not env["use_mingw"] and msvc.exists(env): + if env["arch"] == "x86_64": + env["TARGET_ARCH"] = "amd64" + elif env["arch"] == "x86_32": + env["TARGET_ARCH"] = "x86" + env["is_msvc"] = True + + # MSVC, linker, and archiver. + msvc.generate(env) + env.Tool("mslib") + env.Tool("mslink") + + env.Append(CPPDEFINES=["TYPED_METHOD_BIND", "NOMINMAX"]) + env.Append(CCFLAGS=["/EHsc", "/utf-8"]) + env.Append(LINKFLAGS=["/WX"]) + + if env["use_clang_cl"]: + env["CC"] = "clang-cl" + env["CXX"] = "clang-cl" + + elif sys.platform == "win32" or sys.platform == "msys": + env["use_mingw"] = True + mingw.generate(env) + # Don't want lib prefixes + env["IMPLIBPREFIX"] = "" + env["SHLIBPREFIX"] = "" + # Want dll suffix + env["SHLIBSUFFIX"] = ".dll" + # Long line hack. Use custom spawn, quick AR append (to avoid files with the same names to override each other). + my_spawn.configure(env) + + else: + env["use_mingw"] = True + # Cross-compilation using MinGW + prefix = "i686" if env["arch"] == "x86_32" else env["arch"] + env["CXX"] = prefix + "-w64-mingw32-g++" + env["CC"] = prefix + "-w64-mingw32-gcc" + env["AR"] = prefix + "-w64-mingw32-ar" + env["RANLIB"] = prefix + "-w64-mingw32-ranlib" + env["LINK"] = prefix + "-w64-mingw32-g++" + # Want dll suffix + env["SHLIBSUFFIX"] = ".dll" + + # These options are for a release build even using target=debug + env.Append(CCFLAGS=["-O3", "-Wwrite-strings"]) + env.Append( + LINKFLAGS=[ + "--static", + "-Wl,--no-undefined", + "-static-libgcc", + "-static-libstdc++", + ] + ) |