#!/usr/bin/env python from misc.utility.scons_hints import * import sys Import("env") Import("env_modules") env_openxr = env_modules.Clone() # Thirdparty source files. thirdparty_obj = [] # Khronos OpenXR loader. # Needs even for build against shared library, at least the defines used in public headers. if env["platform"] == "android": env_openxr.AppendUnique(CPPDEFINES=["XR_OS_ANDROID", "XR_USE_PLATFORM_ANDROID"]) env_openxr.AppendUnique(CPPDEFINES=[("JSON_USE_EXCEPTION", 0)]) elif env["platform"] == "linuxbsd": env_openxr.AppendUnique(CPPDEFINES=["XR_OS_LINUX"]) if env["x11"]: env_openxr.AppendUnique(CPPDEFINES=["XR_USE_PLATFORM_XLIB"]) if env["wayland"] and env["opengl3"]: env_openxr.AppendUnique(CPPDEFINES=["XR_USE_PLATFORM_EGL", "XRDEPENDENCIES_USE_GLAD"]) env_openxr.Prepend(CPPPATH=["#thirdparty/glad"]) # FreeBSD uses non-standard getenv functions. if not sys.platform.startswith("freebsd"): env_openxr.AppendUnique(CPPDEFINES=["HAVE_SECURE_GETENV"]) elif env["platform"] == "windows": env_openxr.AppendUnique(CPPDEFINES=["XR_OS_WINDOWS", "NOMINMAX", "XR_USE_PLATFORM_WIN32"]) elif env["platform"] == "macos": env_openxr.AppendUnique(CPPDEFINES=["XR_OS_APPLE"]) # There does not seem to be a XR_USE_PLATFORM_XYZ for Apple. if env["builtin_openxr"]: thirdparty_dir = "#thirdparty/openxr" env_openxr.Prepend( CPPPATH=[ thirdparty_dir, thirdparty_dir + "/include", thirdparty_dir + "/src", thirdparty_dir + "/src/common", thirdparty_dir + "/src/external/jsoncpp/include", ] ) env_thirdparty = env_openxr.Clone() env_thirdparty.disable_warnings() env_thirdparty.AppendUnique(CPPDEFINES=["DISABLE_STD_FILESYSTEM"]) if env["disable_exceptions"]: env_thirdparty.AppendUnique(CPPDEFINES=["XRLOADER_DISABLE_EXCEPTION_HANDLING", ("JSON_USE_EXCEPTION", 0)]) env_thirdparty.Append(CPPPATH=[thirdparty_dir + "/src/loader"]) # Add in external jsoncpp dependency. thirdparty_jsoncpp_dir = thirdparty_dir + "/src/external/jsoncpp/src/lib_json/" env_thirdparty.add_source_files(thirdparty_obj, thirdparty_jsoncpp_dir + "json_reader.cpp") env_thirdparty.add_source_files(thirdparty_obj, thirdparty_jsoncpp_dir + "json_value.cpp") env_thirdparty.add_source_files(thirdparty_obj, thirdparty_jsoncpp_dir + "json_writer.cpp") # Add in the OpenXR loader. if env["platform"] != "android": # On Android the OpenXR loader is handled by the configuration in 'platform/android/java/app/build.gradle'. khrloader_obj = [] env_thirdparty.add_source_files(khrloader_obj, thirdparty_dir + "/src/xr_generated_dispatch_table_core.c") env_thirdparty.add_source_files(khrloader_obj, thirdparty_dir + "/src/common/filesystem_utils.cpp") env_thirdparty.add_source_files(khrloader_obj, thirdparty_dir + "/src/common/object_info.cpp") env_thirdparty.add_source_files(khrloader_obj, thirdparty_dir + "/src/loader/api_layer_interface.cpp") env_thirdparty.add_source_files(khrloader_obj, thirdparty_dir + "/src/loader/loader_core.cpp") env_thirdparty.add_source_files(khrloader_obj, thirdparty_dir + "/src/loader/loader_init_data.cpp") env_thirdparty.add_source_files(khrloader_obj, thirdparty_dir + "/src/loader/loader_instance.cpp") env_thirdparty.add_source_files(khrloader_obj, thirdparty_dir + "/src/loader/loader_logger_recorders.cpp") env_thirdparty.add_source_files(khrloader_obj, thirdparty_dir + "/src/loader/loader_logger.cpp") env_thirdparty.add_source_files(khrloader_obj, thirdparty_dir + "/src/loader/loader_properties.cpp") env_thirdparty.add_source_files(khrloader_obj, thirdparty_dir + "/src/loader/manifest_file.cpp") env_thirdparty.add_source_files(khrloader_obj, thirdparty_dir + "/src/loader/runtime_interface.cpp") env.modules_sources += khrloader_obj env.modules_sources += thirdparty_obj # Godot source files. module_obj = [] env_openxr.add_source_files(module_obj, "*.cpp") env.modules_sources += module_obj Export("env_openxr") SConscript("action_map/SCsub") SConscript("extensions/SCsub") SConscript("scene/SCsub") if env.editor_build: SConscript("editor/SCsub") # Needed to force rebuilding the module files when the thirdparty library is updated. env.Depends(module_obj, thirdparty_obj)