update cmake

This commit is contained in:
2026-01-11 13:13:45 -05:00
parent bd3fdbf930
commit a39a816ea9
4 changed files with 173 additions and 177 deletions
+164 -175
View File
@@ -1,70 +1,74 @@
cmake_minimum_required(VERSION 3.27) cmake_minimum_required(VERSION 3.27)
project(anm2ed LANGUAGES C CXX) project(anm2ed LANGUAGES C CXX)
if (WIN32 AND DEFINED ENV{VCPKG_ROOT} AND NOT DEFINED CMAKE_TOOLCHAIN_FILE) if(WIN32 AND DEFINED ENV{VCPKG_ROOT} AND NOT DEFINED CMAKE_TOOLCHAIN_FILE)
set(CMAKE_TOOLCHAIN_FILE "$ENV{VCPKG_ROOT}/scripts/buildsystems/vcpkg.cmake" set(CMAKE_TOOLCHAIN_FILE
CACHE STRING "Vcpkg toolchain file") "$ENV{VCPKG_ROOT}/scripts/buildsystems/vcpkg.cmake"
endif () CACHE STRING "Vcpkg toolchain file")
endif()
set(CMAKE_EXPORT_COMPILE_COMMANDS ON) set(CMAKE_EXPORT_COMPILE_COMMANDS ON)
if (CMAKE_EXPORT_COMPILE_COMMANDS AND NOT WIN32) if(CMAKE_EXPORT_COMPILE_COMMANDS AND NOT WIN32)
execute_process(COMMAND ${CMAKE_COMMAND} -E create_symlink execute_process(COMMAND ${CMAKE_COMMAND} -E create_symlink ${CMAKE_BINARY_DIR}/compile_commands.json
${CMAKE_BINARY_DIR}/compile_commands.json ${CMAKE_SOURCE_DIR}/compile_commands.json)
${CMAKE_SOURCE_DIR}/compile_commands.json endif()
)
endif ()
set(CMAKE_CXX_STANDARD 23) set(CMAKE_CXX_STANDARD 23)
set(CMAKE_CXX_STANDARD_REQUIRED ON) set(CMAKE_CXX_STANDARD_REQUIRED ON)
set(CMAKE_CXX_EXTENSIONS OFF) set(CMAKE_CXX_EXTENSIONS OFF)
if (MSVC) if(MSVC)
set(CMAKE_MSVC_RUNTIME_LIBRARY "MultiThreadedDLL") set(CMAKE_MSVC_RUNTIME_LIBRARY "MultiThreadedDLL")
endif () set(CMAKE_MSVC_DEBUG_INFORMATION_FORMAT "$<$<CONFIG:Debug>:ProgramDatabase>")
endif()
set(BUILD_SHARED_LIBS OFF CACHE BOOL "" FORCE) set(BUILD_SHARED_LIBS OFF CACHE BOOL "" FORCE)
set(SDL_STATIC ON CACHE BOOL "" FORCE) macro(anm2ed_set_cache_bool name value)
set(SDL_SHARED OFF CACHE BOOL "" FORCE) set(${name} ${value} CACHE BOOL "" FORCE)
if (NOT WIN32) endmacro()
set(SDL_ALSA ON CACHE BOOL "" FORCE)
set(SDL_ALSA_SHARED ON CACHE BOOL "" FORCE) anm2ed_set_cache_bool(SDL_STATIC ON)
set(SDL_JACK ON CACHE BOOL "" FORCE) anm2ed_set_cache_bool(SDL_SHARED OFF)
set(SDL_JACK_SHARED ON CACHE BOOL "" FORCE) if(NOT WIN32)
set(SDL_PIPEWIRE ON CACHE BOOL "" FORCE) anm2ed_set_cache_bool(SDL_ALSA ON)
set(SDL_PIPEWIRE_SHARED ON CACHE BOOL "" FORCE) anm2ed_set_cache_bool(SDL_ALSA_SHARED ON)
set(SDL_SNDIO ON CACHE BOOL "" FORCE) anm2ed_set_cache_bool(SDL_JACK ON)
set(SDL_SNDIO_SHARED ON CACHE BOOL "" FORCE) anm2ed_set_cache_bool(SDL_JACK_SHARED ON)
endif () anm2ed_set_cache_bool(SDL_PIPEWIRE ON)
set(SDL_HAPTIC OFF CACHE BOOL "" FORCE) anm2ed_set_cache_bool(SDL_PIPEWIRE_SHARED ON)
set(SDL_JOYSTICK OFF CACHE BOOL "" FORCE) anm2ed_set_cache_bool(SDL_SNDIO ON)
set(SDL_SENSOR OFF CACHE BOOL "" FORCE) anm2ed_set_cache_bool(SDL_SNDIO_SHARED ON)
set(SDL_HIDAPI OFF CACHE BOOL "" FORCE) endif()
set(SDL_CAMERA OFF CACHE BOOL "" FORCE) anm2ed_set_cache_bool(SDL_HAPTIC OFF)
set(SDL_TRAY OFF CACHE BOOL "" FORCE) anm2ed_set_cache_bool(SDL_JOYSTICK OFF)
set(SDL_VULKAN OFF CACHE BOOL "" FORCE) anm2ed_set_cache_bool(SDL_SENSOR OFF)
anm2ed_set_cache_bool(SDL_HIDAPI OFF)
anm2ed_set_cache_bool(SDL_CAMERA OFF)
anm2ed_set_cache_bool(SDL_TRAY OFF)
anm2ed_set_cache_bool(SDL_VULKAN OFF)
add_subdirectory(external/SDL EXCLUDE_FROM_ALL) add_subdirectory(external/SDL EXCLUDE_FROM_ALL)
set(SDLMIXER_DEPS_SHARED OFF CACHE BOOL "" FORCE) anm2ed_set_cache_bool(SDLMIXER_DEPS_SHARED OFF)
set(SDLMIXER_AIFF OFF CACHE BOOL "" FORCE) anm2ed_set_cache_bool(SDLMIXER_AIFF OFF)
set(SDLMIXER_AU OFF CACHE BOOL "" FORCE) anm2ed_set_cache_bool(SDLMIXER_AU OFF)
set(SDLMIXER_FLAC_LIBFLAC OFF CACHE BOOL "" FORCE) anm2ed_set_cache_bool(SDLMIXER_FLAC_LIBFLAC OFF)
set(SDLMIXER_FLAC_DRFLAC OFF CACHE BOOL "" FORCE) anm2ed_set_cache_bool(SDLMIXER_FLAC_DRFLAC OFF)
set(SDLMIXER_GME OFF CACHE BOOL "" FORCE) anm2ed_set_cache_bool(SDLMIXER_GME OFF)
set(SDLMIXER_MOD_XMP OFF CACHE BOOL "" FORCE) anm2ed_set_cache_bool(SDLMIXER_MOD_XMP OFF)
set(SDLMIXER_MP3_DRMP3 OFF CACHE BOOL "" FORCE) anm2ed_set_cache_bool(SDLMIXER_MP3_DRMP3 OFF)
set(SDLMIXER_MP3_MPG123 OFF CACHE BOOL "" FORCE) anm2ed_set_cache_bool(SDLMIXER_MP3_MPG123 OFF)
set(SDLMIXER_MIDI_FLUIDSYNTH OFF CACHE BOOL "" FORCE) anm2ed_set_cache_bool(SDLMIXER_MIDI_FLUIDSYNTH OFF)
set(SDLMIXER_MIDI_TIMIDITY OFF CACHE BOOL "" FORCE) anm2ed_set_cache_bool(SDLMIXER_MIDI_TIMIDITY OFF)
set(SDLMIXER_OPUS ON CACHE BOOL "" FORCE) anm2ed_set_cache_bool(SDLMIXER_OPUS ON)
set(SDLMIXER_VOC OFF CACHE BOOL "" FORCE) anm2ed_set_cache_bool(SDLMIXER_VOC OFF)
set(SDLMIXER_VORBIS_STB ON CACHE BOOL "" FORCE) anm2ed_set_cache_bool(SDLMIXER_VORBIS_STB ON)
set(SDLMIXER_VORBIS_VORBISFILE OFF CACHE BOOL "" FORCE) anm2ed_set_cache_bool(SDLMIXER_VORBIS_VORBISFILE OFF)
set(SDLMIXER_VORBIS_TREMOR OFF CACHE BOOL "" FORCE) anm2ed_set_cache_bool(SDLMIXER_VORBIS_TREMOR OFF)
set(SDLMIXER_WAVE ON CACHE BOOL "" FORCE) anm2ed_set_cache_bool(SDLMIXER_WAVE ON)
set(SDLMIXER_WAVPACK OFF CACHE BOOL "" FORCE) anm2ed_set_cache_bool(SDLMIXER_WAVPACK OFF)
set(SDLMIXER_TEST OFF CACHE BOOL "" FORCE) anm2ed_set_cache_bool(SDLMIXER_TEST OFF)
set(SDLMIXER_INSTALL OFF CACHE BOOL "" FORCE) anm2ed_set_cache_bool(SDLMIXER_INSTALL OFF)
add_subdirectory(external/SDL_mixer EXCLUDE_FROM_ALL) add_subdirectory(external/SDL_mixer EXCLUDE_FROM_ALL)
add_subdirectory(external/lunasvg) add_subdirectory(external/lunasvg)
@@ -72,149 +76,134 @@ add_subdirectory(external/lunasvg)
set(GLAD_SRC ${CMAKE_CURRENT_SOURCE_DIR}/include/glad/glad.cpp) set(GLAD_SRC ${CMAKE_CURRENT_SOURCE_DIR}/include/glad/glad.cpp)
set(IMGUI_SRC set(IMGUI_SRC
external/imgui/imgui.cpp external/imgui/imgui.cpp
external/imgui/imgui_draw.cpp external/imgui/imgui_draw.cpp
external/imgui/imgui_widgets.cpp external/imgui/imgui_widgets.cpp
external/imgui/imgui_tables.cpp external/imgui/imgui_tables.cpp
external/imgui/backends/imgui_impl_sdl3.cpp external/imgui/backends/imgui_impl_sdl3.cpp
external/imgui/backends/imgui_impl_opengl3.cpp external/imgui/backends/imgui_impl_opengl3.cpp)
)
set(TINYXML2_SRC external/tinyxml2/tinyxml2.cpp) set(TINYXML2_SRC external/tinyxml2/tinyxml2.cpp)
file(GLOB PROJECT_SRC CONFIGURE_DEPENDS file(GLOB PROJECT_SRC CONFIGURE_DEPENDS
src/anm2/*.cpp src/anm2/*.cpp
src/anm2/*.h src/anm2/*.h
src/resource/*.cpp src/resource/*.cpp
src/resource/*.h src/resource/*.h
src/imgui/*.cpp src/imgui/*.cpp
src/imgui/*.h src/imgui/*.h
src/imgui/window/*.cpp src/imgui/window/*.cpp
src/imgui/window/*.h src/imgui/window/*.h
src/imgui/wizard/*.cpp src/imgui/wizard/*.cpp
src/imgui/wizard/*.h src/imgui/wizard/*.h
src/util/*.cpp src/util/*.cpp
src/util/*.h src/util/*.h
src/window/*.cpp src/window/*.cpp
src/window/*.h src/window/*.h
src/*.cpp src/*.cpp
src/*.h src/*.h)
)
add_executable(${PROJECT_NAME} add_executable(${PROJECT_NAME} ${GLAD_SRC} ${IMGUI_SRC} ${TINYXML2_SRC} ${PROJECT_SRC})
${GLAD_SRC}
${IMGUI_SRC} target_compile_definitions(${PROJECT_NAME} PRIVATE IMGUI_DISABLE_OBSOLETE_FUNCTIONS IMGUI_DEBUG_PARANOID
${TINYXML2_SRC} IMGUI_ENABLE_DOCKING)
${PROJECT_SRC}
) target_include_directories(
if (MSVC) ${PROJECT_NAME}
target_compile_options(${PROJECT_NAME} PRIVATE "$<$<COMPILE_LANGUAGE:CXX>:/std:c++latest>") PRIVATE include
include/glad
external
external/imgui
external/glm
external/tinyxml2
external/lunasvg
external/SDL
external/SDL_mixer
external/SDL_mixer/include
src
src/imgui
src/resource
src/util)
if(WIN32)
enable_language(RC)
target_sources(${PROJECT_NAME} PRIVATE anm2ed.rc)
target_compile_options(${PROJECT_NAME} PRIVATE /EHsc)
target_link_options(${PROJECT_NAME} PRIVATE /STACK:0xffffff)
target_link_options(
${PROJECT_NAME}
PRIVATE "$<$<AND:$<CONFIG:Release>,$<CXX_COMPILER_ID:MSVC>>:/SUBSYSTEM:WINDOWS>"
"$<$<AND:$<CONFIG:Release>,$<NOT:$<CXX_COMPILER_ID:MSVC>>>:-mwindows>")
else()
target_compile_options(${PROJECT_NAME} PRIVATE -Wall -Wextra -pedantic)
if(CMAKE_BUILD_TYPE STREQUAL "Debug")
target_compile_definitions(${PROJECT_NAME} PRIVATE DEBUG)
target_compile_options(${PROJECT_NAME} PRIVATE -O0 -pg)
else()
set(CMAKE_BUILD_TYPE "Release")
target_compile_options(${PROJECT_NAME} PRIVATE -Os)
endif()
target_link_libraries(${PROJECT_NAME} PRIVATE m)
endif() endif()
if (WIN32) if(MSVC)
enable_language(RC) target_compile_options(${PROJECT_NAME} PRIVATE "$<$<COMPILE_LANGUAGE:CXX>:/std:c++latest>")
target_sources(${PROJECT_NAME} PRIVATE anm2ed.rc) target_compile_options(${PROJECT_NAME} PRIVATE "$<$<CONFIG:Debug>:/Zi>")
target_compile_options(${PROJECT_NAME} PRIVATE /EHsc) target_link_options(${PROJECT_NAME} PRIVATE "$<$<CONFIG:Debug>:/DEBUG>")
target_link_options(${PROJECT_NAME} PRIVATE /STACK:0xffffff) endif()
target_link_options(${PROJECT_NAME} PRIVATE
"$<$<AND:$<CONFIG:Release>,$<CXX_COMPILER_ID:MSVC>>:/SUBSYSTEM:WINDOWS>"
"$<$<AND:$<CONFIG:Release>,$<NOT:$<CXX_COMPILER_ID:MSVC>>>:-mwindows>"
)
else ()
target_compile_options(${PROJECT_NAME} PRIVATE
-Wall -Wextra -pedantic
)
if (CMAKE_BUILD_TYPE STREQUAL "Debug")
target_compile_definitions(${PROJECT_NAME} PRIVATE DEBUG)
target_compile_options(${PROJECT_NAME} PRIVATE -O0 -pg)
else ()
set(CMAKE_BUILD_TYPE "Release")
target_compile_options(${PROJECT_NAME} PRIVATE -Os)
endif ()
target_link_libraries(${PROJECT_NAME} PRIVATE m) if(WIN32)
endif () set(OPENGL_LIB opengl32)
set(PLATFORM_LIBS
target_compile_definitions(${PROJECT_NAME} PRIVATE ws2_32
IMGUI_DISABLE_OBSOLETE_FUNCTIONS bcrypt
IMGUI_DEBUG_PARANOID imm32
IMGUI_ENABLE_DOCKING version
) winmm
shell32
target_include_directories(${PROJECT_NAME} PRIVATE ole32
include advapi32
include/glad gdi32
external user32
external/imgui setupapi
external/glm legacy_stdio_definitions)
external/tinyxml2 if(TARGET SDL3::SDL3main)
external/lunasvg set(SDL_MAIN_TARGET SDL3::SDL3main)
external/SDL else()
external/SDL_mixer
external/SDL_mixer/include
src
src/imgui
src/resource
src/util
)
if (WIN32)
set(OPENGL_LIB opengl32)
set(PLATFORM_LIBS
ws2_32
bcrypt
imm32
version
winmm
shell32
ole32
advapi32
gdi32
user32
setupapi
legacy_stdio_definitions
)
if (TARGET SDL3::SDL3main)
set(SDL_MAIN_TARGET SDL3::SDL3main)
else ()
set(SDL_MAIN_TARGET)
endif ()
else ()
set(OPENGL_LIB GL)
set(PLATFORM_LIBS)
set(SDL_MAIN_TARGET) set(SDL_MAIN_TARGET)
endif () endif()
else()
set(OPENGL_LIB GL)
set(PLATFORM_LIBS)
set(SDL_MAIN_TARGET)
endif()
target_link_libraries(${PROJECT_NAME} PRIVATE target_link_libraries(${PROJECT_NAME} PRIVATE ${OPENGL_LIB} SDL3-static ${SDL_MAIN_TARGET}
${OPENGL_LIB} SDL3_mixer::SDL3_mixer lunasvg ${PLATFORM_LIBS})
SDL3-static
${SDL_MAIN_TARGET}
SDL3_mixer::SDL3_mixer
lunasvg
${PLATFORM_LIBS}
)
message(STATUS "System: ${CMAKE_SYSTEM_NAME}") message(STATUS "System: ${CMAKE_SYSTEM_NAME}")
message(STATUS "Project: ${PROJECT_NAME}") message(STATUS "Project: ${PROJECT_NAME}")
message(STATUS "Compiler: ${CMAKE_CXX_COMPILER}") message(STATUS "Compiler: ${CMAKE_CXX_COMPILER}")
get_target_property(PROJECT_COMPILE_OPTIONS ${PROJECT_NAME} COMPILE_OPTIONS) get_target_property(PROJECT_COMPILE_OPTIONS ${PROJECT_NAME} COMPILE_OPTIONS)
if (NOT PROJECT_COMPILE_OPTIONS) if(NOT PROJECT_COMPILE_OPTIONS)
set(PROJECT_COMPILE_OPTIONS "<none>") set(PROJECT_COMPILE_OPTIONS "<none>")
endif () endif()
string(TOUPPER "${CMAKE_BUILD_TYPE}" BUILD_TYPE_UPPER) string(TOUPPER "${CMAKE_BUILD_TYPE}" BUILD_TYPE_UPPER)
set(EFFECTIVE_CXX_FLAGS "${CMAKE_CXX_FLAGS}") set(EFFECTIVE_CXX_FLAGS "${CMAKE_CXX_FLAGS}")
if (BUILD_TYPE_UPPER) if(BUILD_TYPE_UPPER)
set(CONFIG_FLAGS_VAR "CMAKE_CXX_FLAGS_${BUILD_TYPE_UPPER}") set(CONFIG_FLAGS_VAR "CMAKE_CXX_FLAGS_${BUILD_TYPE_UPPER}")
if (DEFINED ${CONFIG_FLAGS_VAR}) if(DEFINED ${CONFIG_FLAGS_VAR})
string(APPEND EFFECTIVE_CXX_FLAGS " ${${CONFIG_FLAGS_VAR}}") string(APPEND EFFECTIVE_CXX_FLAGS " ${${CONFIG_FLAGS_VAR}}")
endif () endif()
endif () endif()
string(STRIP "${EFFECTIVE_CXX_FLAGS}" EFFECTIVE_CXX_FLAGS) string(STRIP "${EFFECTIVE_CXX_FLAGS}" EFFECTIVE_CXX_FLAGS)
if (EFFECTIVE_CXX_FLAGS STREQUAL "") if(EFFECTIVE_CXX_FLAGS STREQUAL "")
set(EFFECTIVE_CXX_FLAGS "<none>") set(EFFECTIVE_CXX_FLAGS "<none>")
endif () endif()
message(STATUS "Compiler Flags: ${EFFECTIVE_CXX_FLAGS}") message(STATUS "Compiler Flags: ${EFFECTIVE_CXX_FLAGS}")
message(STATUS "Target Compile Options: ${PROJECT_COMPILE_OPTIONS}") message(STATUS "Target Compile Options: ${PROJECT_COMPILE_OPTIONS}")
+1 -1
View File
@@ -1 +1 @@
/home/anon/sda/Personal/Repos/anm2ed/build/compile_commands.json /home/anon/sda/Personal/Repos/anm2ed/build-cmake-cleancheck/compile_commands.json
+7 -1
View File
@@ -65,10 +65,16 @@ namespace anm2ed::anm2
XMLDocument document; XMLDocument document;
document.InsertFirstChild(to_element(document)); document.InsertFirstChild(to_element(document));
if (!std::filesystem::exists(path))
{
if (errorString) *errorString = localize.get(ERROR_FILE_NOT_FOUND);
return false;
}
File file(path, "wb"); File file(path, "wb");
if (!file) if (!file)
{ {
if (errorString) *errorString = localize.get(ERROR_FILE_NOT_FOUND); if (errorString) *errorString = localize.get(ERROR_FILE_PERMISSIONS);
return false; return false;
} }
+1
View File
@@ -419,6 +419,7 @@ namespace anm2ed
X(TOAST_PNG_FORMAT_INVALID, "PNG format invalid. Make sure it contains \"{}\".", "Formato PNG inválido. Asegúrate de que contenga \"{}\".", "Недопустимый формат PNG. Убедитесь, что он содержит \"{}\".", "PNG 格式无效。请确保其中包含 \"{}\"。", "PNG 형식이 잘못되었습니다. \"{}\"을 포함하는지 확인하세요.") \ X(TOAST_PNG_FORMAT_INVALID, "PNG format invalid. Make sure it contains \"{}\".", "Formato PNG inválido. Asegúrate de que contenga \"{}\".", "Недопустимый формат PNG. Убедитесь, что он содержит \"{}\".", "PNG 格式无效。请确保其中包含 \"{}\"。", "PNG 형식이 잘못되었습니다. \"{}\"을 포함하는지 확인하세요.") \
X(TOAST_REDO, "Redo: {0}", "Rehacer: {0}", "Повтор: {0}", "重做: {0}", "다시 실행: {0}") \ X(TOAST_REDO, "Redo: {0}", "Rehacer: {0}", "Повтор: {0}", "重做: {0}", "다시 실행: {0}") \
X(ERROR_FILE_NOT_FOUND, "File not found!", "¡Archivo no encontrado!", "Файл не найден!", "找不到文件!", "파일을 찾을 수 없습니다!") \ X(ERROR_FILE_NOT_FOUND, "File not found!", "¡Archivo no encontrado!", "Файл не найден!", "找不到文件!", "파일을 찾을 수 없습니다!") \
X(ERROR_FILE_PERMISSIONS, "File does not have write permissions!", "¡El archivo no tiene permisos de escritura!", "У файла нет прав на запись!", "文件没有写入权限!", "파일에 쓰기 권한이 없습니다!") \
X(TOAST_RELOAD_SPRITESHEET, "Reloaded spritesheet #{0}: {1}", "Se ha recargado spritesheet #{0}: {1}", "Спрайт-лист #{0} перезагружен: {1}", "重新加载了图集 #{0}: {1}", "{0}번 스프라이트 시트 다시 불러옴: {1}") \ X(TOAST_RELOAD_SPRITESHEET, "Reloaded spritesheet #{0}: {1}", "Se ha recargado spritesheet #{0}: {1}", "Спрайт-лист #{0} перезагружен: {1}", "重新加载了图集 #{0}: {1}", "{0}번 스프라이트 시트 다시 불러옴: {1}") \
X(TOAST_RELOAD_SOUND, "Reloaded sound #{0}: {1}", "Se ha recargado sonido #{0}: {1}", "Звук #{0} перезагружен: {1}", "重新加载了声音 #{0}: {1}", "{0}번 사운드 다시 불러옴: {1}") \ X(TOAST_RELOAD_SOUND, "Reloaded sound #{0}: {1}", "Se ha recargado sonido #{0}: {1}", "Звук #{0} перезагружен: {1}", "重新加载了声音 #{0}: {1}", "{0}번 사운드 다시 불러옴: {1}") \
X(TOAST_REMOVE_SPRITESHEET, "Removed spritesheet #{0}: {1}", "Se ha removido spritesheet #{0}: {1}", "Спрайт-лист #{0} удален: {1}", "去除了图集 #{0}: {1}", "{0}번 스프라이트 시트 제거됨: {1}") \ X(TOAST_REMOVE_SPRITESHEET, "Removed spritesheet #{0}: {1}", "Se ha removido spritesheet #{0}: {1}", "Спрайт-лист #{0} удален: {1}", "去除了图集 #{0}: {1}", "{0}번 스프라이트 시트 제거됨: {1}") \