agg-rust 1.1.0

Pure Rust port of Anti-Grain Geometry (AGG) 2.6 - high quality 2D vector graphics rendering
Documentation
cmake_minimum_required(VERSION 3.15)
project(agg_render CXX)

set(CMAKE_CXX_STANDARD 11)
set(CMAKE_CXX_STANDARD_REQUIRED ON)

if(NOT CMAKE_BUILD_TYPE)
    set(CMAKE_BUILD_TYPE Release)
endif()

# Locate the original AGG 2.6 C++ sources shipped in the repo.
set(AGG_ROOT "${CMAKE_CURRENT_SOURCE_DIR}/../../cpp-references/agg-src")

include_directories(
    "${AGG_ROOT}/include"
    "${AGG_ROOT}/examples"
)

# Core AGG implementation files (everything under src/ except the platform/ GUI
# backends, which we replace with a headless harness).
file(GLOB AGG_CORE_SRC "${AGG_ROOT}/src/*.cpp")
file(GLOB AGG_CTRL_SRC "${AGG_ROOT}/src/ctrl/*.cpp")

# Example helper translation units reused by the demos.
set(AGG_EXAMPLE_HELPERS
    "${AGG_ROOT}/examples/parse_lion.cpp"
    "${AGG_ROOT}/examples/interactive_polygon.cpp"
)

file(GLOB RENDERER_SRC "${CMAKE_CURRENT_SOURCE_DIR}/src/*.cpp")

add_executable(agg-render
    ${RENDERER_SRC}
    ${AGG_CORE_SRC}
    ${AGG_CTRL_SRC}
    ${AGG_EXAMPLE_HELPERS}
)

# Demo data assets (shapes.txt, spheres.ppm, compositing.ppm live under art/;
# spheres.bmp used by the Rust side lives under demo/wasm/src/).
target_compile_definitions(agg-render PRIVATE
    AGG_ASSET_DIR="${AGG_ROOT}/examples/art"
    AGG_SPHERES_BMP="${CMAKE_CURRENT_SOURCE_DIR}/../../demo/wasm/src/spheres.bmp")

if(MSVC)
    target_compile_options(agg-render PRIVATE /wd4244 /wd4267 /wd4996 /EHsc)
    target_compile_definitions(agg-render PRIVATE _CRT_SECURE_NO_WARNINGS)
endif()