# SPDX-FileCopyrightText: 2006 Blender Authors
#
# SPDX-License-Identifier: GPL-2.0-or-later

set(INC
  .
  ../asset_system
  ../blenloader
  ../blentranslation
  ../bmesh
  ../draw
  ../functions
  ../gpencil_modifiers_legacy
  ../gpu
  ../ikplugin
  ../imbuf
  ../makesrna
  ../modifiers
  ../nodes
  ../nodes/geometry/include
  ../render
  ../sequencer
  ../shader_fx
  ../simulation
  ../../../intern/eigen
  ../../../intern/ghost
  ../../../intern/iksolver/extern
  ../../../intern/libmv
  ../../../intern/mantaflow/extern
  ../../../intern/memutil
  ../../../intern/mikktspace
  ../../../intern/opensubdiv

  # RNA_prototypes.h
  ${CMAKE_BINARY_DIR}/source/blender/makesrna
)

set(INC_SYS
  ${ZLIB_INCLUDE_DIRS}

  # For `vfontdata_freetype.cc`.
  ${FREETYPE_INCLUDE_DIRS}
)

set(SRC
  ${CMAKE_SOURCE_DIR}/release/datafiles/userdef/userdef_default.c
  intern/CCGSubSurf.cc
  intern/CCGSubSurf_legacy.cc
  intern/CCGSubSurf_util.cc
  intern/action.cc
  intern/action_bones.cc
  intern/action_mirror.cc
  intern/addon.cc
  intern/anim_data.cc
  intern/anim_path.cc
  intern/anim_sys.cc
  intern/anim_visualization.cc
  intern/anonymous_attribute_id.cc
  intern/appdir.cc
  intern/armature.cc
  intern/armature_deform.cc
  intern/armature_pose.cc
  intern/armature_selection.cc
  intern/armature_update.cc
  intern/asset.cc
  intern/asset_weak_reference.cc
  intern/attribute.cc
  intern/attribute_access.cc
  intern/attribute_math.cc
  intern/autoexec.cc
  intern/bake_data_block_map.cc
  intern/bake_geometry_nodes_modifier.cc
  intern/bake_items.cc
  intern/bake_items_paths.cc
  intern/bake_items_serialize.cc
  intern/bake_items_socket.cc
  intern/blender.cc
  intern/blender_cli_command.cc
  intern/blender_copybuffer.cc
  intern/blender_undo.cc
  intern/blender_user_menu.cc
  intern/blendfile.cc
  intern/blendfile_link_append.cc
  intern/boids.cc
  intern/bpath.cc
  intern/brush.cc
  intern/bvhutils.cc
  intern/cachefile.cc
  intern/callbacks.cc
  intern/camera.cc
  intern/cloth.cc
  intern/collection.cc
  intern/collision.cc
  intern/colorband.cc
  intern/colortools.cc
  intern/compute_contexts.cc
  intern/constraint.cc
  intern/context.cc
  intern/cpp_types.cc
  intern/crazyspace.cc
  intern/cryptomatte.cc
  intern/curve.cc
  intern/curve_bevel.cc
  intern/curve_bezier.cc
  intern/curve_catmull_rom.cc
  intern/curve_convert.cc
  intern/curve_decimate.cc
  intern/curve_deform.cc
  intern/curve_legacy_convert.cc
  intern/curve_nurbs.cc
  intern/curve_poly.cc
  intern/curve_to_mesh_convert.cc
  intern/curveprofile.cc
  intern/curves.cc
  intern/curves_geometry.cc
  intern/curves_utils.cc
  intern/customdata.cc
  intern/customdata_file.cc
  intern/data_transfer.cc
  intern/deform.cc
  intern/displist.cc
  intern/dynamicpaint.cc
  intern/editlattice.cc
  intern/editmesh.cc
  intern/editmesh_bvh.cc
  intern/editmesh_cache.cc
  intern/editmesh_tangent.cc
  intern/effect.cc
  intern/fcurve.cc
  intern/fcurve_cache.cc
  intern/fcurve_driver.cc
  intern/file_handler.cc
  intern/fluid.cc
  intern/fmodifier.cc
  intern/freestyle.cc
  intern/geometry_component_curves.cc
  intern/geometry_component_edit_data.cc
  intern/geometry_component_grease_pencil.cc
  intern/geometry_component_instances.cc
  intern/geometry_component_mesh.cc
  intern/geometry_component_pointcloud.cc
  intern/geometry_component_volume.cc
  intern/geometry_fields.cc
  intern/geometry_set.cc
  intern/geometry_set_instances.cc
  intern/gpencil_curve_legacy.cc
  intern/gpencil_geom_legacy.cc
  intern/gpencil_legacy.cc
  intern/gpencil_modifier_legacy.cc
  intern/gpencil_update_cache_legacy.cc
  intern/grease_pencil.cc
  intern/grease_pencil_convert_legacy.cc
  intern/grease_pencil_vertex_groups.cc
  intern/icons.cc
  intern/icons_rasterize.cc
  intern/idprop.cc
  intern/idprop_create.cc
  intern/idprop_serialize.cc
  intern/idprop_utils.cc
  intern/idtype.cc
  intern/image.cc
  intern/image_format.cc
  intern/image_gen.cc
  intern/image_gpu.cc
  intern/image_partial_update.cc
  intern/image_save.cc
  intern/instances.cc
  intern/ipo.cc
  intern/kelvinlet.cc
  intern/key.cc
  intern/keyconfig.cc
  intern/lattice.cc
  intern/lattice_deform.cc
  intern/layer.cc
  intern/layer_utils.cc
  intern/lib_id.cc
  intern/lib_id_delete.cc
  intern/lib_id_eval.cc
  intern/lib_id_remapper.cc
  intern/lib_override.cc
  intern/lib_override_proxy_conversion.cc
  intern/lib_query.cc
  intern/lib_remap.cc
  intern/library.cc
  intern/light.cc
  intern/light_linking.cc
  intern/lightprobe.cc
  intern/linestyle.cc
  intern/main.cc
  intern/main_idmap.cc
  intern/main_namemap.cc
  intern/mask.cc
  intern/mask_evaluate.cc
  intern/mask_rasterize.cc
  intern/material.cc
  intern/mball.cc
  intern/mball_tessellate.cc
  intern/mesh.cc
  intern/mesh_calc_edges.cc
  intern/mesh_compare.cc
  intern/mesh_convert.cc
  intern/mesh_data_update.cc
  intern/mesh_debug.cc
  intern/mesh_evaluate.cc
  intern/mesh_fair.cc
  intern/mesh_flip_faces.cc
  intern/mesh_iterators.cc
  intern/mesh_legacy_convert.cc
  intern/mesh_legacy_derived_mesh.cc
  intern/mesh_mapping.cc
  intern/mesh_merge_customdata.cc
  intern/mesh_mirror.cc
  intern/mesh_normals.cc
  intern/mesh_remap.cc
  intern/mesh_remesh_voxel.cc
  intern/mesh_runtime.cc
  intern/mesh_sample.cc
  intern/mesh_tangent.cc
  intern/mesh_tessellate.cc
  intern/mesh_validate.cc
  intern/mesh_wrapper.cc
  intern/modifier.cc
  intern/movieclip.cc
  intern/multires.cc
  intern/multires_reshape.cc
  intern/multires_reshape_apply_base.cc
  intern/multires_reshape_ccg.cc
  intern/multires_reshape_smooth.cc
  intern/multires_reshape_subdivide.cc
  intern/multires_reshape_util.cc
  intern/multires_reshape_vertcos.cc
  intern/multires_subdiv.cc
  intern/multires_unsubdivide.cc
  intern/multires_versioning.cc
  intern/nla.cc
  intern/node.cc
  intern/node_enum_definition.cc
  intern/node_runtime.cc
  intern/node_socket_value.cc
  intern/node_tree_anonymous_attributes.cc
  intern/node_tree_dot_export.cc
  intern/node_tree_field_inferencing.cc
  intern/node_tree_interface.cc
  intern/node_tree_update.cc
  intern/node_tree_zones.cc
  intern/object.cc
  intern/object_deform.cc
  intern/object_dupli.cc
  intern/object_update.cc
  intern/ocean.cc
  intern/ocean_spectrum.cc
  intern/outliner_treehash.cc
  intern/packedFile.cc
  intern/paint.cc
  intern/paint_canvas.cc
  intern/paint_toolslots.cc
  intern/particle.cc
  intern/particle_child.cc
  intern/particle_distribute.cc
  intern/particle_system.cc
  intern/pbvh.cc
  intern/pbvh_bmesh.cc
  intern/pbvh_colors.cc
  intern/pbvh_pixels.cc
  intern/pbvh_pixels_copy.cc
  intern/pbvh_uv_islands.cc
  intern/pointcache.cc
  intern/pointcloud.cc
  intern/pose_backup.cc
  intern/preferences.cc
  intern/preview_image.cc
  intern/report.cc
  intern/rigidbody.cc
  intern/scene.cc
  intern/screen.cc
  intern/shader_fx.cc
  intern/shrinkwrap.cc
  intern/softbody.cc
  intern/sound.cc
  intern/speaker.cc
  intern/studiolight.cc
  intern/subdiv.cc
  intern/subdiv_ccg.cc
  intern/subdiv_ccg_mask.cc
  intern/subdiv_converter.cc
  intern/subdiv_converter_mesh.cc
  intern/subdiv_deform.cc
  intern/subdiv_displacement.cc
  intern/subdiv_displacement_multires.cc
  intern/subdiv_eval.cc
  intern/subdiv_foreach.cc
  intern/subdiv_mesh.cc
  intern/subdiv_modifier.cc
  intern/subdiv_stats.cc
  intern/subdiv_topology.cc
  intern/subsurf_ccg.cc
  intern/text.cc
  intern/text_suggestions.cc
  intern/texture.cc
  intern/tracking.cc
  intern/tracking_auto.cc
  intern/tracking_detect.cc
  intern/tracking_plane_tracker.cc
  intern/tracking_region_tracker.cc
  intern/tracking_solver.cc
  intern/tracking_stabilize.cc
  intern/tracking_util.cc
  intern/type_conversions.cc
  intern/undo_system.cc
  intern/unit.cc
  intern/vfont.cc
  intern/vfontdata_freetype.cc
  intern/viewer_path.cc
  intern/volume.cc
  intern/volume_grid.cc
  intern/volume_grid_file_cache.cc
  intern/volume_render.cc
  intern/volume_to_mesh.cc
  intern/wm_runtime.cc
  intern/workspace.cc
  intern/world.cc
  intern/writemovie.cc

  BKE_action.h
  BKE_action.hh
  BKE_addon.h
  BKE_anim_data.hh
  BKE_anim_path.h
  BKE_anim_visualization.h
  BKE_animsys.h
  BKE_anonymous_attribute_id.hh
  BKE_appdir.hh
  BKE_armature.hh
  BKE_asset.hh
  BKE_attribute.h
  BKE_attribute.hh
  BKE_attribute_math.hh
  BKE_autoexec.hh
  BKE_bake_data_block_map.hh
  BKE_bake_geometry_nodes_modifier.hh
  BKE_bake_items.hh
  BKE_bake_items_paths.hh
  BKE_bake_items_serialize.hh
  BKE_bake_items_socket.hh
  BKE_blender.hh
  BKE_blender_cli_command.hh
  BKE_blender_copybuffer.hh
  BKE_blender_undo.hh
  BKE_blender_user_menu.hh
  BKE_blender_version.h
  BKE_blendfile.hh
  BKE_blendfile_link_append.hh
  BKE_boids.h
  BKE_bpath.hh
  BKE_brush.hh
  BKE_bvhutils.hh
  BKE_cachefile.hh
  BKE_callbacks.hh
  BKE_camera.h
  BKE_ccg.hh
  BKE_cloth.hh
  BKE_collection.hh
  BKE_collision.h
  BKE_colorband.hh
  BKE_colortools.hh
  BKE_compute_contexts.hh
  BKE_constraint.h
  BKE_context.hh
  BKE_cpp_types.hh
  BKE_crazyspace.hh
  BKE_cryptomatte.h
  BKE_cryptomatte.hh
  BKE_curve.hh
  BKE_curve_legacy_convert.hh
  BKE_curve_to_mesh.hh
  BKE_curveprofile.h
  BKE_curves.h
  BKE_curves.hh
  BKE_curves_utils.hh
  BKE_customdata.hh
  BKE_customdata_file.h
  BKE_data_transfer.h
  BKE_deform.hh
  BKE_displist.h
  BKE_duplilist.hh
  BKE_dynamicpaint.h
  BKE_editlattice.h
  BKE_editmesh.hh
  BKE_editmesh_bvh.hh
  BKE_editmesh_cache.hh
  BKE_editmesh_tangent.hh
  BKE_effect.h
  BKE_fcurve.hh
  BKE_fcurve_driver.h
  BKE_file_handler.hh
  BKE_fluid.h
  BKE_freestyle.h
  BKE_geometry_fields.hh
  BKE_geometry_set.hh
  BKE_geometry_set_instances.hh
  BKE_global.hh
  BKE_gpencil_curve_legacy.h
  BKE_gpencil_geom_legacy.h
  BKE_gpencil_legacy.h
  BKE_gpencil_modifier_legacy.h
  BKE_gpencil_update_cache_legacy.h
  BKE_grease_pencil.h
  BKE_grease_pencil.hh
  BKE_grease_pencil_legacy_convert.hh
  BKE_grease_pencil_vertex_groups.hh
  BKE_icons.h
  BKE_idprop.hh
  BKE_idtype.hh
  BKE_image.h
  BKE_image_format.h
  BKE_image_partial_update.hh
  BKE_image_save.h
  BKE_image_wrappers.hh
  BKE_instances.hh
  BKE_ipo.h
  BKE_kelvinlet.h
  BKE_key.hh
  BKE_keyconfig.h
  BKE_lattice.hh
  BKE_layer.hh
  BKE_lib_id.hh
  BKE_lib_override.hh
  BKE_lib_query.hh
  BKE_lib_remap.hh
  BKE_library.hh
  BKE_light.h
  BKE_light_linking.h
  BKE_lightprobe.h
  BKE_linestyle.h
  BKE_main.hh
  BKE_main_idmap.hh
  BKE_main_namemap.hh
  BKE_mask.h
  BKE_material.h
  BKE_mball.hh
  BKE_mball_tessellate.hh
  BKE_mesh.h
  BKE_mesh.hh
  BKE_mesh_compare.hh
  BKE_mesh_fair.hh
  BKE_mesh_iterators.hh
  BKE_mesh_legacy_convert.hh
  BKE_mesh_legacy_derived_mesh.hh
  BKE_mesh_mapping.hh
  BKE_mesh_mirror.hh
  BKE_mesh_remap.hh
  BKE_mesh_remesh_voxel.hh
  BKE_mesh_runtime.hh
  BKE_mesh_sample.hh
  BKE_mesh_tangent.hh
  BKE_mesh_types.hh
  BKE_mesh_wrapper.hh
  BKE_modifier.hh
  BKE_movieclip.h
  BKE_multires.hh
  BKE_nla.h
  BKE_node.hh
  BKE_node_enum.hh
  BKE_node_runtime.hh
  BKE_node_socket_value.hh
  BKE_node_tree_anonymous_attributes.hh
  BKE_node_tree_dot_export.hh
  BKE_node_tree_interface.hh
  BKE_node_tree_update.hh
  BKE_node_tree_zones.hh
  BKE_object.hh
  BKE_object_deform.h
  BKE_object_types.hh
  BKE_ocean.h
  BKE_outliner_treehash.hh
  BKE_packedFile.h
  BKE_paint.hh
  BKE_particle.h
  BKE_pbvh.hh
  BKE_pbvh_api.hh
  BKE_pbvh_pixels.hh
  BKE_pointcache.h
  BKE_pointcloud.hh
  BKE_pose_backup.h
  BKE_preferences.h
  BKE_preview_image.hh
  BKE_report.hh
  BKE_rigidbody.h
  BKE_scene.hh
  BKE_scene_runtime.hh
  BKE_screen.hh
  BKE_sequencer_offscreen.h
  BKE_shader_fx.h
  BKE_shrinkwrap.hh
  BKE_softbody.h
  BKE_sound.h
  BKE_speaker.h
  BKE_studiolight.h
  BKE_subdiv.hh
  BKE_subdiv_ccg.hh
  BKE_subdiv_deform.hh
  BKE_subdiv_eval.hh
  BKE_subdiv_foreach.hh
  BKE_subdiv_mesh.hh
  BKE_subdiv_modifier.hh
  BKE_subdiv_topology.hh
  BKE_subsurf.hh
  BKE_text.h
  BKE_text_suggestions.h
  BKE_texture.h
  BKE_tracking.h
  BKE_type_conversions.hh
  BKE_undo_system.hh
  BKE_unit.hh
  BKE_vfont.hh
  BKE_vfontdata.hh
  BKE_viewer_path.hh
  BKE_volume.hh
  BKE_volume_enums.hh
  BKE_volume_grid.hh
  BKE_volume_grid_file_cache.hh
  BKE_volume_openvdb.hh
  BKE_volume_render.hh
  BKE_volume_to_mesh.hh
  BKE_wm_runtime.hh
  BKE_workspace.hh
  BKE_world.h
  BKE_writemovie.hh

  nla_private.h
  particle_private.h
  tracking_private.h

  intern/CCGSubSurf.h
  intern/CCGSubSurf_inline.h
  intern/CCGSubSurf_intern.h
  intern/attribute_access_intern.hh
  intern/data_transfer_intern.h
  intern/lib_intern.hh
  intern/multires_inline.hh
  intern/multires_reshape.hh
  intern/multires_unsubdivide.hh
  intern/ocean_intern.h
  intern/pbvh_intern.hh
  intern/pbvh_pixels_copy.hh
  intern/pbvh_uv_islands.hh
  intern/subdiv_converter.hh
  intern/subdiv_inline.hh
)

set(LIB
  PRIVATE bf::animrig
  bf_asset_system
  PRIVATE bf::blenfont
  PRIVATE bf::blenlib
  bf_blenloader
  bf_blentranslation
  bf_bmesh
  PRIVATE bf::depsgraph
  PRIVATE bf::dna
  bf_draw
  PRIVATE bf::extern::curve_fit_nd
  bf_functions
  bf_gpencil_modifiers_legacy
  bf_gpu
  bf_ikplugin
  bf_imbuf
  PRIVATE bf::intern::clog
  bf_intern_ghost
  PRIVATE bf::intern::guardedalloc
  bf_intern_libmv  # Uses stub when disabled.
  bf_intern_mikktspace
  bf_intern_opensubdiv  # Uses stub when disabled.
  bf_modifiers
  bf_nodes
  bf_rna
  bf_shader_fx
  bf_simulation
  PRIVATE bf::extern::fmtlib
  PRIVATE bf::extern::xxhash
  PRIVATE bf::intern::atomic
  # For `vfontdata_freetype.c`.
  ${FREETYPE_LIBRARIES} ${BROTLI_LIBRARIES}
)

if(WITH_BINRELOC)
  list(APPEND INC_SYS
    ${BINRELOC_INCLUDE_DIRS}
  )
  list(APPEND LIB
    extern_binreloc
  )
  add_definitions(-DWITH_BINRELOC)
endif()


if(WIN32)
  list(APPEND INC
    ../../../intern/utfconv
  )
endif()

if(WITH_AUDASPACE)
  list(APPEND INC_SYS
    ${AUDASPACE_C_INCLUDE_DIRS}
  )
  if(WITH_SYSTEM_AUDASPACE)
    list(APPEND LIB
      ${AUDASPACE_C_LIBRARIES}
      ${AUDASPACE_PY_LIBRARIES}
    )
  endif()
  add_definitions(-DWITH_AUDASPACE)
endif()

if(WITH_BULLET)
  list(APPEND INC_SYS
    ${BULLET_INCLUDE_DIRS}
  )
  list(APPEND INC
    ../../../intern/rigidbody
  )
  list(APPEND LIB
    bf_intern_rigidbody

    ${BULLET_LIBRARIES}
  )
  add_definitions(-DWITH_BULLET)
endif()

if(WITH_IMAGE_OPENEXR)
  add_definitions(-DWITH_OPENEXR)
endif()

if(WITH_IMAGE_OPENJPEG)
  add_definitions(-DWITH_OPENJPEG)
endif()

if(WITH_IMAGE_CINEON)
  add_definitions(-DWITH_CINEON)
endif()

if(WITH_IMAGE_WEBP)
  add_definitions(-DWITH_WEBP)
endif()

if(WITH_CODEC_FFMPEG)
  list(APPEND SRC
    intern/writeffmpeg.cc
    BKE_writeffmpeg.hh
  )
  list(APPEND INC
    ../../../intern/ffmpeg
  )
  list(APPEND INC_SYS
    ${FFMPEG_INCLUDE_DIRS}
  )
  list(APPEND LIB
    ${FFMPEG_LIBRARIES}
  )
  add_definitions(-DWITH_FFMPEG)
endif()

if(WITH_PYTHON)
  list(APPEND INC
    ../python
  )
  list(APPEND LIB
    bf_python
    bf_python_bmesh
  )
  add_definitions(-DWITH_PYTHON)

  if(WITH_PYTHON_MODULE)
    add_definitions(-DWITH_PYTHON_MODULE)
  endif()

  if(WITH_PYTHON_SAFETY)
    add_definitions(-DWITH_PYTHON_SAFETY)
  endif()

  if(WITH_PYTHON_SECURITY)
    add_definitions(-DWITH_PYTHON_SECURITY)
  endif()


  if(PYTHON_EXECUTABLE)
    get_filename_component(_python_exe_name ${PYTHON_EXECUTABLE} NAME)
    add_definitions(-DPYTHON_EXECUTABLE_NAME=${_python_exe_name})
    unset(_python_exe_name)
  endif()
endif()

if(WITH_MOD_FLUID)
  list(APPEND LIB
    bf_intern_mantaflow
  )
  add_definitions(-DWITH_FLUID)
endif()

if(WITH_MOD_OCEANSIM)
  add_definitions(-DWITH_OCEANSIM)
endif()

if(WITH_JACK)
  add_definitions(-DWITH_JACK)
endif()

if(WITH_LZO)
  if(WITH_SYSTEM_LZO)
    list(APPEND INC_SYS
      ${LZO_INCLUDE_DIR}
    )
    list(APPEND LIB
      ${LZO_LIBRARIES}
    )
    add_definitions(-DWITH_SYSTEM_LZO)
  else()
    list(APPEND INC_SYS
      ../../../extern/lzo/minilzo
    )
    list(APPEND LIB
      extern_minilzo
    )
  endif()
  add_definitions(-DWITH_LZO)
endif()

if(WITH_LZMA)
  list(APPEND INC_SYS
    ../../../extern/lzma
  )
  list(APPEND LIB
    extern_lzma
  )
  add_definitions(-DWITH_LZMA)
endif()

if(WITH_LIBMV)
  add_definitions(-DWITH_LIBMV)
endif()

if(WITH_FFTW3)
  list(APPEND INC_SYS
    ${FFTW3_INCLUDE_DIRS}
  )
  list(APPEND LIB
    ${FFTW3_LIBRARIES}
  )
  add_definitions(-DFFTW3=1)
endif()

if(WITH_FREESTYLE)
  add_definitions(-DWITH_FREESTYLE)
endif()

if(WITH_ALEMBIC)
  list(APPEND INC
    ../io/alembic
  )
  add_definitions(-DWITH_ALEMBIC)
endif()

if(WITH_USD)
  list(APPEND INC
    ../io/usd
  )
  add_definitions(-DWITH_USD)
endif()

if(WITH_OPENSUBDIV)
  list(APPEND INC_SYS
    ${OPENSUBDIV_INCLUDE_DIRS}
  )
  list(APPEND LIB
    ${OPENSUBDIV_LIBRARIES}
  )
  add_definitions(-DWITH_OPENSUBDIV)
endif()

if(WITH_OPENVDB)
  list(APPEND INC
    ../../../intern/openvdb
  )
  list(APPEND INC_SYS
    ${OPENVDB_INCLUDE_DIRS}
  )
  list(APPEND LIB
    bf_intern_openvdb
    ${OPENVDB_LIBRARIES}
  )
  add_definitions(-DWITH_OPENVDB ${OPENVDB_DEFINITIONS})
endif()

if(WITH_QUADRIFLOW)
  list(APPEND INC
    ../../../intern/quadriflow
  )
  list(APPEND LIB
    bf_intern_quadriflow
  )
  add_definitions(-DWITH_QUADRIFLOW)
endif()

if(WITH_XR_OPENXR)
  add_definitions(-DWITH_XR_OPENXR)
endif()

if(WITH_TBB)
  add_definitions(-DWITH_TBB)

  list(APPEND INC_SYS
    ${TBB_INCLUDE_DIRS}
  )

  list(APPEND LIB
    ${TBB_LIBRARIES}
  )
endif()

# # Warnings as errors, this is too strict!
# if(MSVC)
#    string(APPEND CMAKE_C_FLAGS " /WX")
# endif()

blender_add_lib(bf_blenkernel "${SRC}" "${INC}" "${INC_SYS}" "${LIB}")

# RNA_prototypes.h
add_dependencies(bf_blenkernel bf_rna)


if(WITH_GTESTS)
  set(TEST_SRC
    intern/action_test.cc
    intern/armature_test.cc
    intern/asset_metadata_test.cc
    intern/bpath_test.cc
    intern/cryptomatte_test.cc
    intern/curves_geometry_test.cc
    intern/fcurve_test.cc
    intern/file_handler_test.cc
    intern/grease_pencil_test.cc
    intern/idprop_serialize_test.cc
    intern/image_partial_update_test.cc
    intern/image_test.cc
    intern/lattice_deform_test.cc
    intern/layer_test.cc
    intern/lib_id_remapper_test.cc
    intern/lib_id_test.cc
    intern/lib_query_test.cc
    intern/lib_remap_test.cc
    intern/main_test.cc
    intern/nla_test.cc
    intern/tracking_test.cc
    intern/volume_test.cc
  )
  set(TEST_INC
    ../editors/include
  )
  set(TEST_LIB
    ${LIB}
    bf_rna  # RNA_prototypes.h
  )
  blender_add_test_suite_lib(blenkernel "${TEST_SRC}" "${INC};${TEST_INC}" "${INC_SYS}" "${TEST_LIB}")
endif()
