Browse Source

Update `SConstruct` and `.gdextension` file of the godot-cpp example with newest conventions.

# Conflicts:
#	tutorials/scripting/cpp/gdextension_cpp_example.rst
Lukas Tenbrink 1 month ago
parent
commit
c46a399eab

+ 21 - 32
tutorials/scripting/cpp/files/cpp_example/SConstruct

@@ -2,42 +2,31 @@
 import os
 import os
 import sys
 import sys
 
 
-env = SConscript("godot-cpp/SConstruct")
+# You can find documentation for SCons and SConstruct files at:
+# https://scons.org/documentation.html
 
 
-# For reference:
-# - CCFLAGS are compilation flags shared between C and C++
-# - CFLAGS are for C-specific compilation flags
-# - CXXFLAGS are for C++-specific compilation flags
-# - CPPFLAGS are for pre-processor flags
-# - CPPDEFINES are for pre-processor defines
-# - LINKFLAGS are for linking flags
+# This lets SCons know that we're using godot-cpp, from the godot-cpp folder.
+env = SConscript("godot-cpp/SConstruct")
 
 
-# tweak this if you want to use different folders, or more folders, to store your source code in.
+# Configures the 'src' directory as a source for header files.
 env.Append(CPPPATH=["src/"])
 env.Append(CPPPATH=["src/"])
+
+# Collects all .cpp files in the 'src' folder as compile targets.
 sources = Glob("src/*.cpp")
 sources = Glob("src/*.cpp")
 
 
-if env["platform"] == "macos":
-    library = env.SharedLibrary(
-        "demo/bin/libgdexample.{}.{}.framework/libgdexample.{}.{}".format(
-            env["platform"], env["target"], env["platform"], env["target"]
-        ),
-        source=sources,
-    )
-elif env["platform"] == "ios":
-    if env["ios_simulator"]:
-        library = env.StaticLibrary(
-            "demo/bin/libgdexample.{}.{}.simulator.a".format(env["platform"], env["target"]),
-            source=sources,
-        )
-    else:
-        library = env.StaticLibrary(
-            "demo/bin/libgdexample.{}.{}.a".format(env["platform"], env["target"]),
-            source=sources,
-        )
-else:
-    library = env.SharedLibrary(
-        "demo/bin/libgdexample{}{}".format(env["suffix"], env["SHLIBSUFFIX"]),
-        source=sources,
-    )
+# The filename for the dynamic library for this GDExtension.
+# $SHLIBPREFIX is a platform specific prefix for the dynamic library ('lib' on Unix, '' on Windows).
+# $SHLIBSUFFIX is the platform specific suffix for the dynamic library (for example '.dll' on Windows).
+# env["suffix"] includes the build's feature tags (e.g. '.windows.template_debug.x86_64')
+# (see https://docs.godotengine.org/en/stable/tutorials/export/feature_tags.html).
+# The final path should match a path in the '.gdextension' file.
+lib_filename = "{}gdexample{}{}".format(env.subst('$SHLIBPREFIX'), env["suffix"], env.subst('$SHLIBSUFFIX'))
+
+# Creates a SCons target for the path with our sources.
+library = env.SharedLibrary(
+    "demo/bin/{}".format(lib_filename),
+    source=sources,
+)
 
 
+# Selects the shared library as the default target.
 Default(library)
 Default(library)

+ 13 - 16
tutorials/scripting/cpp/gdextension_cpp_example.rst

@@ -338,18 +338,18 @@ loaded for each platform and the entry function for the module. It is called ``g
 
 
     [libraries]
     [libraries]
 
 
-    macos.debug = "./bin/libgdexample.macos.template_debug.dylib"
-    macos.release = "./bin/libgdexample.macos.template_release.dylib"
-    windows.debug.x86_32 = "./bin/libgdexample.windows.template_debug.x86_32.dll"
-    windows.release.x86_32 = "./bin/libgdexample.windows.template_release.x86_32.dll"
-    windows.debug.x86_64 = "./bin/libgdexample.windows.template_debug.x86_64.dll"
-    windows.release.x86_64 = "./bin/libgdexample.windows.template_release.x86_64.dll"
-    linux.debug.x86_64 = "./bin/libgdexample.linux.template_debug.x86_64.so"
-    linux.release.x86_64 = "./bin/libgdexample.linux.template_release.x86_64.so"
-    linux.debug.arm64 = "./bin/libgdexample.linux.template_debug.arm64.so"
-    linux.release.arm64 = "./bin/libgdexample.linux.template_release.arm64.so"
-    linux.debug.rv64 = "./bin/libgdexample.linux.template_debug.rv64.so"
-    linux.release.rv64 = "./bin/libgdexample.linux.template_release.rv64.so"
+    macos.debug = "./libgdexample.macos.template_debug.dylib"
+    macos.release = "./libgdexample.macos.template_release.dylib"
+    windows.debug.x86_32 = "./gdexample.windows.template_debug.x86_32.dll"
+    windows.release.x86_32 = "./gdexample.windows.template_release.x86_32.dll"
+    windows.debug.x86_64 = "./gdexample.windows.template_debug.x86_64.dll"
+    windows.release.x86_64 = "./gdexample.windows.template_release.x86_64.dll"
+    linux.debug.x86_64 = "./libgdexample.linux.template_debug.x86_64.so"
+    linux.release.x86_64 = "./libgdexample.linux.template_release.x86_64.so"
+    linux.debug.arm64 = "./libgdexample.linux.template_debug.arm64.so"
+    linux.release.arm64 = "./libgdexample.linux.template_release.arm64.so"
+    linux.debug.rv64 = "./libgdexample.linux.template_debug.rv64.so"
+    linux.release.rv64 = "./libgdexample.linux.template_release.rv64.so"
 
 
 This file contains a ``configuration`` section that controls the entry function of the module.
 This file contains a ``configuration`` section that controls the entry function of the module.
 You should also set the minimum compatible Godot version with ``compatibility_minimum``,
 You should also set the minimum compatible Godot version with ``compatibility_minimum``,
@@ -363,10 +363,7 @@ also result in *just* that file being exported when you export the project,
 which means the data pack won't contain libraries that are incompatible with the
 which means the data pack won't contain libraries that are incompatible with the
 target platform.
 target platform.
 
 
-Finally, the ``dependencies`` section allows you to name additional dynamic
-libraries that should be included as well. This is important when your GDExtension
-plugin implements someone else's library and requires you to supply a
-third-party dynamic library with your project.
+You can learn more about ``.gdextension`` files at :ref:`doc_gdextension_file`.
 
 
 Here is another overview to check the correct file structure:
 Here is another overview to check the correct file structure: