Files
afs/apps/studio/CMakeLists.txt
2025-12-30 18:09:34 -05:00

162 lines
4.0 KiB
CMake

cmake_minimum_required(VERSION 3.15)
project(afs_studio VERSION 0.0.0 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
AFS_STUDIO_VERSION="${PROJECT_VERSION}"
)
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")