import os
import libtbx.load_env
Import("env_etc env_simtbx nanoBragg_obj nanoBragg_env")

diffBragg_env = nanoBragg_env.Clone()

env_etc.eigen_dist = os.path.abspath(os.path.join(libtbx.env.dist_path("simtbx"),"../../eigen"))
if not os.path.isdir(env_etc.eigen_dist) and hasattr(env_etc, "conda_cpppath"):
  for candidate in env_etc.conda_cpppath:
    if os.path.isdir(os.path.join(candidate, "eigen3")):
      env_etc.eigen_dist = os.path.abspath(os.path.join(os.path.join(candidate, "eigen3")))
if os.path.isdir(env_etc.eigen_dist):
  env_etc.eigen_include = env_etc.eigen_dist

env_etc.include_registry.append(
  env=diffBragg_env,
  paths=[env_etc.eigen_include]
)

show_all_warnings = os.environ.get("DIFFBRAGG_SHOW_ALL_NVCC_WARNINGS") is not None
if not show_all_warnings:
    warn_suppress_flags="-Xcudafe --diag_suppress=esa_on_defaulted_function_ignored --expt-relaxed-constexpr"
    diffBragg_env.Prepend(NVCCFLAGS=warn_suppress_flags.split())

diffBragg_obj = diffBragg_env.SharedObject(
  source=[
    "src/diffBragg_ext.cpp",
    "src/diffBragg.cpp",
    "src/diffBragg_cpu_kernel.cpp"
  ])

if (env_etc.enable_cuda):
  diffBragg_env.cudaSharedLibrary(
    target="#lib/libsimtbx_diffBraggCUDA",
    source=["src/diffBraggCUDA.cu", "src/diffBragg_gpu_kernel.cu"])
  env_simtbx.Prepend(LIBS=["simtbx_diffBraggCUDA"])

env_simtbx.SharedLibrary(
  target="#lib/simtbx_diffBragg_ext",
  source=[
    diffBragg_obj
  ]
)
