build / Windows (push) Has been cancelled
build / Linux (push) Has been cancelled
build / MacOS (push) Has been cancelled
build / iOS (push) Has been cancelled
build / Emscripten (push) Has been cancelled
build / Android (push) Has been cancelled
scheduled / scheduled (push) Has been cancelled
137 lines
5.4 KiB
CMake
137 lines
5.4 KiB
CMake
cmake_minimum_required(VERSION 3.20)
|
|
project(example_win32_directx11)
|
|
|
|
# ---------------------------------------------------------------------------
|
|
# C++ standard
|
|
# The original .vcxproj used "stdcpplatest" on x64 configs. CMake 3.20+
|
|
# supports C++23; adjust downward to 20 if your toolchain doesn't support 23.
|
|
# ---------------------------------------------------------------------------
|
|
set(CMAKE_CXX_STANDARD 23)
|
|
set(CMAKE_CXX_STANDARD_REQUIRED ON)
|
|
set(CMAKE_CXX_EXTENSIONS OFF)
|
|
|
|
# ---------------------------------------------------------------------------
|
|
# Source files
|
|
# Paths are relative to this CMakeLists.txt, which lives at:
|
|
# astral/examples/example_win32_directx11/
|
|
# ---------------------------------------------------------------------------
|
|
set(IMGUI_ROOT "${CMAKE_CURRENT_SOURCE_DIR}/../..")
|
|
|
|
set(SOURCES
|
|
main.cpp
|
|
|
|
# core imgui
|
|
${IMGUI_ROOT}/imgui.cpp
|
|
${IMGUI_ROOT}/imgui_demo.cpp
|
|
${IMGUI_ROOT}/imgui_draw.cpp
|
|
${IMGUI_ROOT}/imgui_tables.cpp
|
|
${IMGUI_ROOT}/imgui_widgets.cpp
|
|
|
|
# Win32 + DirectX 11 backends
|
|
${IMGUI_ROOT}/backends/imgui_impl_dx11.cpp
|
|
${IMGUI_ROOT}/backends/imgui_impl_win32.cpp
|
|
|
|
# FreeType font rasterizer — always compiled because imconfig.h defines
|
|
# IMGUI_ENABLE_FREETYPE unconditionally.
|
|
${IMGUI_ROOT}/misc/freetype/imgui_freetype.cpp
|
|
)
|
|
|
|
# ---------------------------------------------------------------------------
|
|
# Target
|
|
# ---------------------------------------------------------------------------
|
|
add_executable(${PROJECT_NAME} ${SOURCES})
|
|
|
|
# ---------------------------------------------------------------------------
|
|
# Include directories
|
|
# ---------------------------------------------------------------------------
|
|
target_include_directories(${PROJECT_NAME} PRIVATE
|
|
${IMGUI_ROOT}
|
|
${IMGUI_ROOT}/backends
|
|
)
|
|
|
|
# ---------------------------------------------------------------------------
|
|
# Preprocessor definitions
|
|
# ---------------------------------------------------------------------------
|
|
|
|
# The original project used Unicode on Win32 and MultiByte on x64.
|
|
# We default to Unicode (the more modern choice). Override with -DUSE_MBCS=ON.
|
|
option(USE_MBCS "Use Multi-Byte Character Set instead of Unicode" OFF)
|
|
if(USE_MBCS)
|
|
target_compile_definitions(${PROJECT_NAME} PRIVATE _MBCS)
|
|
else()
|
|
target_compile_definitions(${PROJECT_NAME} PRIVATE UNICODE _UNICODE)
|
|
endif()
|
|
|
|
# ---------------------------------------------------------------------------
|
|
# Compiler options (MSVC)
|
|
# ---------------------------------------------------------------------------
|
|
if(MSVC)
|
|
target_compile_options(${PROJECT_NAME} PRIVATE
|
|
/W4 # Warning level 4 (original setting)
|
|
/utf-8 # Source and execution charset = UTF-8
|
|
/MP # Multi-processor compilation (was enabled on x64 configs)
|
|
)
|
|
|
|
# Debug-specific flags
|
|
target_compile_options(${PROJECT_NAME} PRIVATE
|
|
$<$<CONFIG:Debug>:/Od> # Disable optimization
|
|
)
|
|
|
|
# Release-specific flags
|
|
target_compile_options(${PROJECT_NAME} PRIVATE
|
|
$<$<CONFIG:Release>:/O2> # Max speed
|
|
$<$<CONFIG:Release>:/Gy> # Function-level linking
|
|
$<$<CONFIG:Release>:/Oi> # Intrinsic functions
|
|
$<$<CONFIG:Release>:/GS-> # Disable buffer security check (as in original)
|
|
)
|
|
|
|
# Link-time code generation / whole-program optimisation for Release
|
|
set_property(TARGET ${PROJECT_NAME} PROPERTY
|
|
INTERPROCEDURAL_OPTIMIZATION_RELEASE TRUE
|
|
)
|
|
|
|
# Linker: COMDAT folding + reference optimisation for Release
|
|
target_link_options(${PROJECT_NAME} PRIVATE
|
|
$<$<CONFIG:Release>:/OPT:REF>
|
|
$<$<CONFIG:Release>:/OPT:ICF>
|
|
)
|
|
|
|
# Always emit PDB debug info (GenerateDebugInformation was true in all configs)
|
|
target_link_options(${PROJECT_NAME} PRIVATE /DEBUG)
|
|
|
|
# Console subsystem (SubSystem = Console in original)
|
|
target_link_options(${PROJECT_NAME} PRIVATE /SUBSYSTEM:CONSOLE)
|
|
endif()
|
|
|
|
# ---------------------------------------------------------------------------
|
|
# Link libraries
|
|
# ---------------------------------------------------------------------------
|
|
target_link_libraries(${PROJECT_NAME} PRIVATE
|
|
d3d11
|
|
d3dcompiler
|
|
dxgi
|
|
dwmapi # Required for DwmIsCompositionEnabled / DwmEnableBlurBehindWindow etc.
|
|
)
|
|
|
|
# FreeType — try a system/vcpkg install first, fall back to the local libs/ copy.
|
|
find_package(Freetype QUIET)
|
|
if(Freetype_FOUND)
|
|
target_link_libraries(${PROJECT_NAME} PRIVATE Freetype::Freetype)
|
|
else()
|
|
message(STATUS "System FreeType not found, falling back to local libs/freetype")
|
|
target_include_directories(${PROJECT_NAME} PRIVATE
|
|
${CMAKE_CURRENT_SOURCE_DIR}/../libs/freetype/include
|
|
)
|
|
target_link_directories(${PROJECT_NAME} PRIVATE
|
|
${CMAKE_CURRENT_SOURCE_DIR}/../libs/freetype/objs
|
|
)
|
|
target_link_libraries(${PROJECT_NAME} PRIVATE freetype)
|
|
endif()
|
|
|
|
# ---------------------------------------------------------------------------
|
|
# Output directories (mirrors the original build\debug / build\release layout)
|
|
# ---------------------------------------------------------------------------
|
|
set_target_properties(${PROJECT_NAME} PROPERTIES
|
|
RUNTIME_OUTPUT_DIRECTORY_DEBUG "${CMAKE_CURRENT_SOURCE_DIR}/build/debug"
|
|
RUNTIME_OUTPUT_DIRECTORY_RELEASE "${CMAKE_CURRENT_SOURCE_DIR}/build/release"
|
|
) |