161 lines
4.0 KiB
CMake
161 lines
4.0 KiB
CMake
cmake_minimum_required(VERSION 3.15)
|
|
project(afs_studio LANGUAGES CXX)
|
|
|
|
set(CMAKE_CXX_STANDARD 17)
|
|
set(CMAKE_CXX_STANDARD_REQUIRED ON)
|
|
|
|
include(FetchContent)
|
|
|
|
# M1/ARM64 optimizations
|
|
if(CMAKE_SYSTEM_PROCESSOR MATCHES "arm64")
|
|
add_compile_options(-march=armv8-a+simd+dotprod -O3 -ffast-math)
|
|
add_compile_definitions(AFS_ARM64=1)
|
|
endif()
|
|
|
|
# =============================================================================
|
|
# Dependencies
|
|
# =============================================================================
|
|
|
|
option(AFS_FETCH_GLFW "Fetch GLFW automatically if missing" ON)
|
|
|
|
# Fetch Dear ImGui
|
|
FetchContent_Declare(
|
|
imgui
|
|
GIT_REPOSITORY https://github.com/ocornut/imgui.git
|
|
GIT_TAG docking
|
|
)
|
|
FetchContent_MakeAvailable(imgui)
|
|
|
|
# Fetch ImPlot
|
|
FetchContent_Declare(
|
|
implot
|
|
GIT_REPOSITORY https://github.com/epezent/implot.git
|
|
GIT_TAG master
|
|
)
|
|
FetchContent_MakeAvailable(implot)
|
|
|
|
# Fetch nlohmann/json (header-only)
|
|
FetchContent_Declare(
|
|
json
|
|
GIT_REPOSITORY https://github.com/nlohmann/json.git
|
|
GIT_TAG v3.11.3
|
|
)
|
|
FetchContent_MakeAvailable(json)
|
|
|
|
# Find GLFW
|
|
find_package(glfw3 3.3 QUIET)
|
|
if(NOT glfw3_FOUND AND AFS_FETCH_GLFW)
|
|
message(STATUS "glfw3 not found - fetching with FetchContent")
|
|
set(GLFW_BUILD_EXAMPLES OFF CACHE BOOL "" FORCE)
|
|
set(GLFW_BUILD_TESTS OFF CACHE BOOL "" FORCE)
|
|
set(GLFW_BUILD_DOCS OFF CACHE BOOL "" FORCE)
|
|
set(GLFW_INSTALL OFF CACHE BOOL "" FORCE)
|
|
FetchContent_Declare(
|
|
glfw
|
|
GIT_REPOSITORY https://github.com/glfw/glfw.git
|
|
GIT_TAG 3.4
|
|
)
|
|
FetchContent_MakeAvailable(glfw)
|
|
set(glfw3_FOUND TRUE)
|
|
endif()
|
|
if(NOT glfw3_FOUND)
|
|
message(FATAL_ERROR "glfw3 not found. Install it or set AFS_FETCH_GLFW=ON.")
|
|
endif()
|
|
|
|
find_package(OpenGL REQUIRED)
|
|
|
|
# =============================================================================
|
|
# Build afs_studio
|
|
# =============================================================================
|
|
|
|
# ImGui sources
|
|
set(IMGUI_SOURCES
|
|
${imgui_SOURCE_DIR}/imgui.cpp
|
|
${imgui_SOURCE_DIR}/imgui_draw.cpp
|
|
${imgui_SOURCE_DIR}/imgui_tables.cpp
|
|
${imgui_SOURCE_DIR}/imgui_widgets.cpp
|
|
${imgui_SOURCE_DIR}/imgui_demo.cpp
|
|
${imgui_SOURCE_DIR}/backends/imgui_impl_glfw.cpp
|
|
${imgui_SOURCE_DIR}/backends/imgui_impl_opengl3.cpp
|
|
)
|
|
|
|
# ImPlot sources
|
|
set(IMPLOT_SOURCES
|
|
${implot_SOURCE_DIR}/implot.cpp
|
|
${implot_SOURCE_DIR}/implot_items.cpp
|
|
${implot_SOURCE_DIR}/implot_demo.cpp
|
|
)
|
|
|
|
# afs_studio application
|
|
add_executable(afs_studio
|
|
src/main.cc
|
|
src/app.cc
|
|
src/data_loader.cc
|
|
src/core/registry_reader.cc
|
|
src/core/training_monitor.cc
|
|
src/core/deployment_actions.cc
|
|
src/core/filesystem.cc
|
|
src/core/logger.cc
|
|
src/core/context.cc
|
|
src/core/assets.cc
|
|
src/core/llama_client.cc
|
|
src/ui/core.cc
|
|
src/ui/components/metrics.cc
|
|
src/ui/components/charts.cc
|
|
src/ui/components/tabs.cc
|
|
src/ui/components/panels.cc
|
|
src/ui/components/model_registry.cc
|
|
src/ui/components/training_dashboard.cc
|
|
src/ui/components/deployment_panel.cc
|
|
src/ui/components/comparison_view.cc
|
|
src/ui/components/graph_browser.cc
|
|
src/ui/components/graph_navigator.cc
|
|
src/ui/components/companion_panels.cc
|
|
src/ui/charts/quality_trends.cc
|
|
src/ui/charts/generator_efficiency.cc
|
|
src/ui/charts/coverage_density.cc
|
|
src/ui/panels/chat_panel.cc
|
|
src/ui/shortcuts.cc
|
|
src/widgets/text_editor.cc
|
|
src/widgets/sample_review.cc
|
|
${IMGUI_SOURCES}
|
|
${IMPLOT_SOURCES}
|
|
)
|
|
|
|
target_include_directories(afs_studio PRIVATE
|
|
${CMAKE_CURRENT_SOURCE_DIR}/src
|
|
${imgui_SOURCE_DIR}
|
|
${imgui_SOURCE_DIR}/backends
|
|
${implot_SOURCE_DIR}
|
|
)
|
|
|
|
target_compile_definitions(afs_studio PRIVATE
|
|
IMGUI_IMPL_OPENGL_LOADER_GLAD=0
|
|
)
|
|
|
|
if(TARGET OpenGL::OpenGL)
|
|
set(AFS_OPENGL_TARGET OpenGL::OpenGL)
|
|
else()
|
|
set(AFS_OPENGL_TARGET OpenGL::GL)
|
|
endif()
|
|
|
|
target_link_libraries(afs_studio PRIVATE
|
|
glfw
|
|
${AFS_OPENGL_TARGET}
|
|
nlohmann_json::nlohmann_json
|
|
)
|
|
|
|
# macOS specific
|
|
if(APPLE)
|
|
target_link_libraries(afs_studio PRIVATE
|
|
"-framework Cocoa"
|
|
"-framework IOKit"
|
|
"-framework CoreVideo"
|
|
)
|
|
endif()
|
|
|
|
# Install
|
|
install(TARGETS afs_studio RUNTIME DESTINATION bin)
|
|
|
|
message(STATUS "afs_studio will be built")
|