Quellcode durchsuchen

Merge pull request #1747 from unvermuthet/linux-use-static-cpp

Implement `use_static_cpp` flag for Linux
David Snopek vor 4 Monaten
Ursprung
Commit
c2d688bae6
2 geänderte Dateien mit 19 neuen und 0 gelöschten Zeilen
  1. 14 0
      cmake/linux.cmake
  2. 5 0
      tools/linux.py

+ 14 - 0
cmake/linux.cmake

@@ -14,11 +14,25 @@ function(linux_options)
         Not implemented as compiler selection is managed by CMake. Look to
         doc/cmake.rst for examples.
     ]]
+    option(GODOTCPP_USE_STATIC_CPP "Link libgcc and libstdc++ statically for better portability" ON)
 endfunction()
 
 #[===========================[ Target Generation ]===========================]
 function(linux_generate)
+    set(STATIC_CPP "$<BOOL:${GODOTCPP_USE_STATIC_CPP}>")
+
     target_compile_definitions(godot-cpp PUBLIC LINUX_ENABLED UNIX_ENABLED)
 
+    # gersemi: off
+    target_link_options(
+        godot-cpp
+        PUBLIC
+            $<${STATIC_CPP}:
+                -static-libgcc
+                -static-libstdc++
+            >
+    )
+    # gersemi: on
+
     common_compiler_flags()
 endfunction()

+ 5 - 0
tools/linux.py

@@ -5,6 +5,7 @@ from SCons.Variables import BoolVariable
 
 def options(opts):
     opts.Add(BoolVariable("use_llvm", "Use the LLVM compiler - only effective when targeting Linux", False))
+    opts.Add(BoolVariable("use_static_cpp", "Link libgcc and libstdc++ statically for better portability", True))
 
 
 def exists(env):
@@ -37,6 +38,10 @@ def generate(env):
         env.Append(CCFLAGS=["-march=rv64gc"])
         env.Append(LINKFLAGS=["-march=rv64gc"])
 
+    # Link statically for portability
+    if env["use_static_cpp"]:
+        env.Append(LINKFLAGS=["-static-libgcc", "-static-libstdc++"])
+
     env.Append(CPPDEFINES=["LINUX_ENABLED", "UNIX_ENABLED"])
 
     # Refer to https://github.com/godotengine/godot/blob/master/platform/linuxbsd/detect.py