cmake_minimum_required(VERSION 3.10) project(lity3d C) set(CMAKE_C_STANDARD 17) set(CMAKE_C_STANDARD_REQUIRED ON) add_compile_options(-O2 -Wall -DWIN32_LEAN_AND_MEAN -D_CRT_SECURE_NO_WARNINGS) include_directories( ${CMAKE_SOURCE_DIR}/Engine ${CMAKE_SOURCE_DIR}/Engine/include ${CMAKE_SOURCE_DIR}/Engine/ASM ) set(ENGINE_SOURCES Engine/Math/math_impl.c Engine/Core/logger.c Engine/Core/timer.c Engine/Core/engine.c Engine/Core/asset_manager.c Engine/Window/window.c Engine/Rendering/graphics_device.c Engine/Rendering/renderer.c Engine/Rendering/shader.c Engine/Rendering/mesh.c Engine/Rendering/texture.c Engine/Rendering/material.c Engine/Rendering/camera.c Engine/Rendering/lighting.c Engine/Scene/scene_graph.c Engine/Scene/scene_render.c Engine/Scene/scene_serialize.c Engine/ECS/world.c Engine/Input/input.c Engine/Physics/physics.c Engine/Audio/audio.c Engine/UI/ui.c Engine/Scripting/lua_engine.c Engine/VisualScript/block_core.c Engine/VisualScript/block_types.c Engine/VisualScript/block_workspace.c Engine/VisualScript/block_interaction.c Engine/VisualScript/block_renderer.c Engine/VisualScript/block_palette.c Engine/VisualScript/block_executor.c Engine/VisualScript/block_serializer.c Engine/VisualScript/block_editor.c Engine/Editor/editor_2d.c Engine/Editor/bitmap_font.c Engine/Editor/editor.c Engine/Editor/uilayer.c Engine/Editor/glyph_atlas.c ) add_library(Engine STATIC ${ENGINE_SOURCES}) set(LINK_LIBS Engine d3d11 dxgi d3dcompiler ole32 oleaut32 uuid gdi32 user32 kernel32 winmm xinput1_4 windowscodecs) add_executable(lity3d Demo/main.c) target_link_libraries(lity3d ${LINK_LIBS}) set_target_properties(lity3d PROPERTIES RUNTIME_OUTPUT_DIRECTORY ${CMAKE_SOURCE_DIR}/build ARCHIVE_OUTPUT_DIRECTORY ${CMAKE_SOURCE_DIR}/build) add_executable(lity3d_editor WIN32 Demo/editor_main.c) target_link_libraries(lity3d_editor ${LINK_LIBS}) set_target_properties(lity3d_editor PROPERTIES RUNTIME_OUTPUT_DIRECTORY ${CMAKE_SOURCE_DIR}/build ARCHIVE_OUTPUT_DIRECTORY ${CMAKE_SOURCE_DIR}/build) add_executable(lity3d_compat WIN32 Demo/compat_test.c) target_link_libraries(lity3d_compat ${LINK_LIBS}) set_target_properties(lity3d_compat PROPERTIES RUNTIME_OUTPUT_DIRECTORY ${CMAKE_SOURCE_DIR}/build ARCHIVE_OUTPUT_DIRECTORY ${CMAKE_SOURCE_DIR}/build) add_executable(ly_interpreter Demo/ly_interpreter.c) target_link_libraries(ly_interpreter Engine d3d11 dxgi d3dcompiler ole32 oleaut32 uuid gdi32 user32 kernel32 winmm xinput1_4 windowscodecs) set_target_properties(ly_interpreter PROPERTIES RUNTIME_OUTPUT_DIRECTORY ${CMAKE_SOURCE_DIR}/build ARCHIVE_OUTPUT_DIRECTORY ${CMAKE_SOURCE_DIR}/build) # Engine-based demos add_executable(scene_test WIN32 Demo/scene_test.c) target_link_libraries(scene_test ${LINK_LIBS}) set_target_properties(scene_test PROPERTIES RUNTIME_OUTPUT_DIRECTORY ${CMAKE_SOURCE_DIR}/build ARCHIVE_OUTPUT_DIRECTORY ${CMAKE_SOURCE_DIR}/build) add_executable(scene_test2 WIN32 Demo/scene_test2.c) target_link_libraries(scene_test2 ${LINK_LIBS}) set_target_properties(scene_test2 PROPERTIES RUNTIME_OUTPUT_DIRECTORY ${CMAKE_SOURCE_DIR}/build ARCHIVE_OUTPUT_DIRECTORY ${CMAKE_SOURCE_DIR}/build) add_executable(light_test WIN32 Demo/light_test.c) target_link_libraries(light_test ${LINK_LIBS}) set_target_properties(light_test PROPERTIES RUNTIME_OUTPUT_DIRECTORY ${CMAKE_SOURCE_DIR}/build ARCHIVE_OUTPUT_DIRECTORY ${CMAKE_SOURCE_DIR}/build) add_executable(input_test WIN32 Demo/input_test.c) target_link_libraries(input_test ${LINK_LIBS}) set_target_properties(input_test PROPERTIES RUNTIME_OUTPUT_DIRECTORY ${CMAKE_SOURCE_DIR}/build ARCHIVE_OUTPUT_DIRECTORY ${CMAKE_SOURCE_DIR}/build) add_executable(mesh_debug WIN32 Demo/mesh_debug.c) target_link_libraries(mesh_debug ${LINK_LIBS}) set_target_properties(mesh_debug PROPERTIES RUNTIME_OUTPUT_DIRECTORY ${CMAKE_SOURCE_DIR}/build ARCHIVE_OUTPUT_DIRECTORY ${CMAKE_SOURCE_DIR}/build) add_executable(raw3d_test WIN32 Demo/raw3d_test.c) target_link_libraries(raw3d_test ${LINK_LIBS}) set_target_properties(raw3d_test PROPERTIES RUNTIME_OUTPUT_DIRECTORY ${CMAKE_SOURCE_DIR}/build ARCHIVE_OUTPUT_DIRECTORY ${CMAKE_SOURCE_DIR}/build) # Audio demo (console, uses Engine audio system) add_executable(audio_demo Demo/audio_demo.c) target_link_libraries(audio_demo ${LINK_LIBS}) set_target_properties(audio_demo PROPERTIES RUNTIME_OUTPUT_DIRECTORY ${CMAKE_SOURCE_DIR}/build ARCHIVE_OUTPUT_DIRECTORY ${CMAKE_SOURCE_DIR}/build) # Standalone D3D11 demos (do not link Engine) set(STANDALONE_D3D_LIBS d3d11 dxgi d3dcompiler ole32 oleaut32 uuid gdi32 user32 kernel32 winmm) add_executable(game_test WIN32 Demo/game_test.c) target_link_libraries(game_test ${STANDALONE_D3D_LIBS}) set_target_properties(game_test PROPERTIES RUNTIME_OUTPUT_DIRECTORY ${CMAKE_SOURCE_DIR}/build ARCHIVE_OUTPUT_DIRECTORY ${CMAKE_SOURCE_DIR}/build) add_executable(cube_dodge WIN32 Demo/cube_dodge.c) target_link_libraries(cube_dodge ${STANDALONE_D3D_LIBS}) set_target_properties(cube_dodge PROPERTIES RUNTIME_OUTPUT_DIRECTORY ${CMAKE_SOURCE_DIR}/build ARCHIVE_OUTPUT_DIRECTORY ${CMAKE_SOURCE_DIR}/build) add_executable(lity WIN32 Demo/lity_explorer.c) target_link_libraries(lity ${LINK_LIBS}) set_target_properties(lity PROPERTIES RUNTIME_OUTPUT_DIRECTORY ${CMAKE_SOURCE_DIR}/build ARCHIVE_OUTPUT_DIRECTORY ${CMAKE_SOURCE_DIR}/build) add_executable(obj_viewer WIN32 Demo/obj_viewer.c) target_link_libraries(obj_viewer ${STANDALONE_D3D_LIBS}) set_target_properties(obj_viewer PROPERTIES RUNTIME_OUTPUT_DIRECTORY ${CMAKE_SOURCE_DIR}/build ARCHIVE_OUTPUT_DIRECTORY ${CMAKE_SOURCE_DIR}/build) add_executable(d3d11_test WIN32 Demo/d3d11_test.c) target_link_libraries(d3d11_test ${STANDALONE_D3D_LIBS}) set_target_properties(d3d11_test PROPERTIES RUNTIME_OUTPUT_DIRECTORY ${CMAKE_SOURCE_DIR}/build ARCHIVE_OUTPUT_DIRECTORY ${CMAKE_SOURCE_DIR}/build)