chore: switch to CMake build system instead of native Visual Studio project
This commit is contained in:
@ -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>
|
||||
# )
|
||||
|
||||
|
Reference in New Issue
Block a user