chore: switch to CMake build system instead of native Visual Studio project

This commit is contained in:
2024-08-15 22:20:51 +08:00
parent da575e42f5
commit afa06339b2
26 changed files with 3349 additions and 1794 deletions

View File

@ -1,27 +1,13 @@
cmake_minimum_required(VERSION 3.12)
project(LibCmo LANGUAGES CXX)
# find packages
find_package(ZLIB REQUIRED)
find_package(Iconv REQUIRED)
# manually check stb image path
if (NOT STB_IMAGE_PATH)
message(FATAL_ERROR "You must assign your stb_image library root path to STB_IMAGE_PATH when compiling this project.")
endif ()
if ((NOT EXISTS "${STB_IMAGE_PATH}/stb_image.h") OR (NOT EXISTS "${STB_IMAGE_PATH}/stb_image_resize.h") OR (NOT EXISTS "${STB_IMAGE_PATH}/stb_image_write.h"))
message(FATAL_ERROR "Invalid stb_image library path.")
endif ()
# set up file list
set(libcmo_headers ".")
set(libcmo_vt_src
# Create static library
add_library(LibCmo STATIC "")
# Setup static library sources
target_sources(LibCmo
PRIVATE
# Assistant source files
VTUtils.cpp
VTEncoding.cpp
VTImage.cpp
)
set(libcmo_ck2_src
# CK2
CK2/CKBitmapData.cpp
CK2/CKContext.cpp
CK2/CKFileOthers.cpp
@ -31,16 +17,13 @@ set(libcmo_ck2_src
CK2/CKStateChunkOthers.cpp
CK2/CKStateChunkReader.cpp
CK2/CKStateChunkWriter.cpp
)
set(libcmo_ck2_dh_src
# CK2 Data Handler
CK2/DataHandlers/CKBitmapHandler.cpp
)
set(libcmo_ck2_mgr_src
# CK2 Manager
CK2/MgrImpls/CKBaseManager.cpp
CK2/MgrImpls/CKObjectManager.cpp
CK2/MgrImpls/CKPathManager.cpp
)
set(libcmo_ck2_obj_src
# CK2 Object
CK2/ObjImpls/CK3dEntity.cpp
CK2/ObjImpls/CKBeObject.cpp
CK2/ObjImpls/CKGroup.cpp
@ -48,53 +31,205 @@ set(libcmo_ck2_obj_src
CK2/ObjImpls/CKMesh.cpp
CK2/ObjImpls/CKObject.cpp
CK2/ObjImpls/CKTexture.cpp
)
set(libcmo_vxmath_src
# VxMath
VxMath/VxMemoryMappedFile.cpp
VxMath/VxMath.cpp
)
set(libcmo_xcontainer_src
# X Container
XContainer/XTypes.cpp
)
# create static library
add_library(LibCmo
STATIC
${libcmo_vt_src}
${libcmo_ck2_src}
${libcmo_ck2_dh_src}
${libcmo_ck2_mgr_src}
${libcmo_ck2_obj_src}
${libcmo_vxmath_src}
${libcmo_xcontainer_src}
)
target_link_libraries(LibCmo
PRIVATE
${ZLIB_LIBRARIES}
${Iconv_LIBRARIES}
# Setup static library headers
target_sources(LibCmo
PUBLIC
FILE_SET HEADERS
FILES
# Asststant header files
VTAll.hpp
VTEncoding.hpp
VTUserAll.hpp
VTUtils.hpp
# CK2
CK2/CKDefines.hpp
CK2/CKEnums.hpp
CK2/CKGlobals.hpp
CK2/CKIdentifiers.hpp
CK2/CKTypes.hpp
CK2/CKBitmapData.hpp
CK2/CKContext.hpp
CK2/CKFile.hpp
CK2/CKStateChunk.hpp
# CK2 Data Handler
CK2/DataHandlers/CKBitmapHandler.hpp
# CK2 Manager
CK2/MgrImpls/CKBaseManager.hpp
CK2/MgrImpls/CKObjectManager.hpp
CK2/MgrImpls/CKPathManager.hpp
# CK2 Object
CK2/ObjImpls/CK3dEntity.hpp
CK2/ObjImpls/CKBeObject.hpp
CK2/ObjImpls/CKGroup.hpp
CK2/ObjImpls/CKMaterial.hpp
CK2/ObjImpls/CKMesh.hpp
CK2/ObjImpls/CKObject.hpp
CK2/ObjImpls/CKTexture.hpp
CK2/ObjImpls/CK3dObject.hpp
CK2/ObjImpls/CKRenderObject.hpp
CK2/ObjImpls/CKSceneObject.hpp
# VxMath
VxMath/VxTypes.hpp
VxMath/VxMath.hpp
VxMath/VxEnums.hpp
VxMath/VxMemoryMappedFile.hpp
# X Container
XContainer/XTypes.hpp
)
# Setup include infomation
target_include_directories(LibCmo
PUBLIC
${libcmo_headers}
"$<BUILD_INTERFACE:${CMAKE_CURRENT_LIST_DIR}>"
"$<INSTALL_INTERFACE:${CMAKE_INSTALL_INCLUDEDIR}>"
PRIVATE
${STB_IMAGE_PATH}
${ZLIB_INCLUDE_DIRS}
${Iconv_INCLUDE_DIRS}
YYCC::YYCCommonplace
ZLIB::ZLIB
stb::stb-image
$<$<NOT:$<BOOL:${WIN32}>>:Iconv::Iconv>
)
# set project standard
# Setup linked library infomation
target_link_libraries(LibCmo
PRIVATE
YYCC::YYCCommonplace
ZLIB::ZLIB
stb::stb-image
$<$<NOT:$<BOOL:${WIN32}>>:Iconv::Iconv>
)
# Setup C++ standard
set_target_properties(LibCmo
PROPERTIES
CXX_STANDARD 20
CXX_STANDARD_REQUIRED 20
CXX_EXTENSION OFF
CXX_STANDARD 20
CXX_STANDARD_REQUIRED 20
CXX_EXTENSION OFF
)
# add essential build macro and populate them
target_compile_definitions(LibCmo
# LibCmo build type
PUBLIC
$<$<CONFIG:Debug>:LIBCMO_BUILD_DEBUG>
$<$<CONFIG:Release>:LIBCMO_BUILD_RELEASE>
$<$<CONFIG:RelWithDebInfo>:LIBCMO_BUILD_RELEASE>
$<$<CONFIG:MinSizeRel>:LIBCMO_BUILD_RELEASE>
"$<$<CONFIG:Debug>:LIBCMO_BUILD_DEBUG>"
"$<$<CONFIG:Release,RelWithDebInfo,MinSize>:LIBCMO_BUILD_RELEASE>"
# Unicode charset for private using
PRIVATE
$<$<CXX_COMPILER_ID:MSVC>:UNICODE>
$<$<CXX_COMPILER_ID:MSVC>:_UNICODE>
)
target_compile_options(LibCmo
# Order build as UTF-8 in MSVC
PRIVATE
$<$<CXX_COMPILER_ID:MSVC>:/utf-8>
)
# Install binary and headers
install(TARGETS LibCmo
EXPORT LibCmoTargets
LIBRARY DESTINATION ${NEMO_INSTALL_LIB_PATH}
ARCHIVE DESTINATION ${NEMO_INSTALL_LIB_PATH}
INCLUDES DESTINATION ${NEMO_INSTALL_INCLUDE_PATH}
FILE_SET HEADERS DESTINATION ${NEMO_INSTALL_INCLUDE_PATH}
)
# cmake_minimum_required(VERSION 3.12)
# project(LibCmo LANGUAGES CXX)
# # find packages
# find_package(ZLIB REQUIRED)
# find_package(Iconv REQUIRED)
# # manually check stb image path
# if (NOT STB_IMAGE_PATH)
# message(FATAL_ERROR "You must assign your stb_image library root path to STB_IMAGE_PATH when compiling this project.")
# endif ()
# if ((NOT EXISTS "${STB_IMAGE_PATH}/stb_image.h") OR (NOT EXISTS "${STB_IMAGE_PATH}/stb_image_resize.h") OR (NOT EXISTS "${STB_IMAGE_PATH}/stb_image_write.h"))
# message(FATAL_ERROR "Invalid stb_image library path.")
# endif ()
# # set up file list
# set(libcmo_headers ".")
# set(libcmo_vt_src
# VTUtils.cpp
# VTEncoding.cpp
# VTImage.cpp
# )
# set(libcmo_ck2_src
# CK2/CKBitmapData.cpp
# CK2/CKContext.cpp
# CK2/CKFileOthers.cpp
# CK2/CKFileReader.cpp
# CK2/CKFileWriter.cpp
# CK2/CKGlobals.cpp
# CK2/CKStateChunkOthers.cpp
# CK2/CKStateChunkReader.cpp
# CK2/CKStateChunkWriter.cpp
# )
# set(libcmo_ck2_dh_src
# CK2/DataHandlers/CKBitmapHandler.cpp
# )
# set(libcmo_ck2_mgr_src
# CK2/MgrImpls/CKBaseManager.cpp
# CK2/MgrImpls/CKObjectManager.cpp
# CK2/MgrImpls/CKPathManager.cpp
# )
# set(libcmo_ck2_obj_src
# CK2/ObjImpls/CK3dEntity.cpp
# CK2/ObjImpls/CKBeObject.cpp
# CK2/ObjImpls/CKGroup.cpp
# CK2/ObjImpls/CKMaterial.cpp
# CK2/ObjImpls/CKMesh.cpp
# CK2/ObjImpls/CKObject.cpp
# CK2/ObjImpls/CKTexture.cpp
# )
# set(libcmo_vxmath_src
# VxMath/VxMemoryMappedFile.cpp
# VxMath/VxMath.cpp
# )
# set(libcmo_xcontainer_src
# XContainer/XTypes.cpp
# )
# # create static library
# add_library(LibCmo
# STATIC
# ${libcmo_vt_src}
# ${libcmo_ck2_src}
# ${libcmo_ck2_dh_src}
# ${libcmo_ck2_mgr_src}
# ${libcmo_ck2_obj_src}
# ${libcmo_vxmath_src}
# ${libcmo_xcontainer_src}
# )
# target_link_libraries(LibCmo
# PRIVATE
# ${ZLIB_LIBRARIES}
# ${Iconv_LIBRARIES}
# )
# target_include_directories(LibCmo
# PUBLIC
# ${libcmo_headers}
# PRIVATE
# ${STB_IMAGE_PATH}
# ${ZLIB_INCLUDE_DIRS}
# ${Iconv_INCLUDE_DIRS}
# )
# # set project standard
# set_target_properties(LibCmo
# PROPERTIES
# CXX_STANDARD 20
# CXX_STANDARD_REQUIRED 20
# CXX_EXTENSION OFF
# )
# # add essential build macro and populate them
# target_compile_definitions(LibCmo
# PUBLIC
# $<$<CONFIG:Debug>:LIBCMO_BUILD_DEBUG>
# $<$<CONFIG:Release>:LIBCMO_BUILD_RELEASE>
# $<$<CONFIG:RelWithDebInfo>:LIBCMO_BUILD_RELEASE>
# $<$<CONFIG:MinSizeRel>:LIBCMO_BUILD_RELEASE>
# )