#!/usr/bin/env python Import("env") Import("env_modules") env_raycast = env_modules.Clone() # Thirdparty source files thirdparty_obj = [] if env["builtin_embree"]: thirdparty_dir = "#thirdparty/embree/" embree_src = [ "common/sys/sysinfo.cpp", "common/sys/alloc.cpp", "common/sys/filename.cpp", "common/sys/library.cpp", "common/sys/thread.cpp", "common/sys/string.cpp", "common/sys/regression.cpp", "common/sys/mutex.cpp", "common/sys/condition.cpp", "common/sys/barrier.cpp", "common/math/constants.cpp", "common/simd/sse.cpp", "common/lexers/stringstream.cpp", "common/lexers/tokenstream.cpp", "common/tasking/taskschedulerinternal.cpp", "kernels/common/device.cpp", "kernels/common/stat.cpp", "kernels/common/acceln.cpp", "kernels/common/accelset.cpp", "kernels/common/state.cpp", "kernels/common/rtcore.cpp", "kernels/common/rtcore_builder.cpp", "kernels/common/scene.cpp", "kernels/common/alloc.cpp", "kernels/common/geometry.cpp", "kernels/common/scene_triangle_mesh.cpp", "kernels/geometry/primitive4.cpp", "kernels/builders/primrefgen.cpp", "kernels/bvh/bvh.cpp", "kernels/bvh/bvh_statistics.cpp", "kernels/bvh/bvh4_factory.cpp", "kernels/bvh/bvh8_factory.cpp", "kernels/bvh/bvh_collider.cpp", "kernels/bvh/bvh_rotate.cpp", "kernels/bvh/bvh_refit.cpp", "kernels/bvh/bvh_builder.cpp", "kernels/bvh/bvh_builder_morton.cpp", "kernels/bvh/bvh_builder_sah.cpp", "kernels/bvh/bvh_builder_sah_spatial.cpp", "kernels/bvh/bvh_builder_sah_mb.cpp", "kernels/bvh/bvh_builder_twolevel.cpp", "kernels/bvh/bvh_intersector1_bvh4.cpp", "kernels/bvh/bvh_intersector_hybrid4_bvh4.cpp", "kernels/bvh/bvh_intersector_stream_bvh4.cpp", "kernels/bvh/bvh_intersector_stream_filters.cpp", ] thirdparty_sources = [thirdparty_dir + file for file in embree_src] env_raycast.Prepend(CPPPATH=[thirdparty_dir, thirdparty_dir + "include"]) env_raycast.Append(CPPDEFINES=["EMBREE_TARGET_SSE2", "EMBREE_LOWEST_ISA", "TASKING_INTERNAL"]) env_raycast.AppendUnique(CPPDEFINES=["NDEBUG"]) # No assert() even in debug builds. if not env.msvc: if env["arch"] == "x86_64": env_raycast.Append(CPPFLAGS=["-msse2", "-mxsave"]) if env["platform"] == "windows": env_raycast.Append(CPPFLAGS=["-mstackrealign"]) if env["platform"] == "windows": if env.msvc: env.Append(LINKFLAGS=["psapi.lib"]) else: env.Append(LIBS=["psapi"]) if env.msvc: # Disable bogus warning about intentional struct padding. env_raycast.Append(CCFLAGS=["/wd4324"]) env_thirdparty = env_raycast.Clone() env_thirdparty.force_optimization_on_debug() env_thirdparty.disable_warnings() env_thirdparty.add_source_files(thirdparty_obj, thirdparty_sources) if env["arch"] == "arm64" or env.msvc: # Embree needs those, it will automatically use SSE2NEON in ARM env_thirdparty.Append(CPPDEFINES=["__SSE2__", "__SSE__"]) if not env.msvc: env_thirdparty.Append( CPPFLAGS=[ "-fno-strict-overflow", "-fno-delete-null-pointer-checks", "-fwrapv", "-fsigned-char", "-fno-strict-aliasing", "-fno-tree-vectorize", "-fvisibility=hidden", "-fvisibility-inlines-hidden", ] ) env.modules_sources += thirdparty_obj # Godot source files module_obj = [] env_raycast.add_source_files(module_obj, "*.cpp") env.modules_sources += module_obj # Needed to force rebuilding the module files when the thirdparty library is updated. env.Depends(module_obj, thirdparty_obj)