mirror of https://github.com/libAthena/athena.git
241 lines
7.6 KiB
CMake
241 lines
7.6 KiB
CMake
cmake_minimum_required(VERSION 3.0)
|
|
project(Athena)
|
|
|
|
##################
|
|
# Athena Version #
|
|
##################
|
|
|
|
set(ATHENA_MAJOR_VERSION 2)
|
|
set(ATHENA_MINOR_VERSION 0)
|
|
set(ATHENA_PATCH_VERSION 0)
|
|
set(ATHENA_VERSION
|
|
${ATHENA_MAJOR_VERSION}.${ATHENA_MINOR_VERSION}.${ATHENA_PATCH_VERSION})
|
|
|
|
################
|
|
# Athena Build #
|
|
################
|
|
|
|
add_subdirectory(extern)
|
|
|
|
include_directories(include ${LZO_INCLUDE_DIR} ${ZLIB_INCLUDE_DIR})
|
|
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11")
|
|
|
|
if(WIN32)
|
|
list(APPEND CORE_EXTRA src/win32_largefilewrapper.c)
|
|
elseif(APPLE)
|
|
list(APPEND CORE_EXTRA src/osx_largefilewrapper.c)
|
|
endif()
|
|
|
|
add_library(AthenaCore
|
|
src/Athena/Utility.cpp
|
|
src/Athena/FileReader.cpp
|
|
src/Athena/FileWriter.cpp
|
|
src/Athena/MemoryReader.cpp
|
|
src/Athena/MemoryWriter.cpp
|
|
src/Athena/Global.cpp
|
|
src/Athena/Checksums.cpp
|
|
src/Athena/Compression.cpp
|
|
src/LZ77/LZLookupTable.cpp
|
|
src/LZ77/LZType10.cpp
|
|
src/LZ77/LZType11.cpp
|
|
src/LZ77/LZBase.cpp
|
|
src/Athena/FileInfo.cpp
|
|
src/Athena/Dir.cpp
|
|
src/gekko_support.c
|
|
${CORE_EXTRA}
|
|
|
|
include/Athena/IStream.hpp
|
|
include/Athena/IStreamReader.hpp
|
|
include/Athena/IStreamWriter.hpp
|
|
include/Athena/Types.hpp
|
|
include/Athena/Utility.hpp
|
|
include/Athena/Global.hpp
|
|
include/Athena/Exception.hpp
|
|
include/Athena/FileNotFoundException.hpp
|
|
include/Athena/IOException.hpp
|
|
include/Athena/InvalidDataException.hpp
|
|
include/Athena/InvalidOperationException.hpp
|
|
include/Athena/FileReader.hpp
|
|
include/Athena/FileWriter.hpp
|
|
include/Athena/MemoryReader.hpp
|
|
include/Athena/MemoryWriter.hpp
|
|
include/Athena/NotImplementedException.hpp
|
|
include/Athena/Checksums.hpp
|
|
include/Athena/Compression.hpp
|
|
include/LZ77/LZBase.hpp
|
|
include/LZ77/LZLookupTable.hpp
|
|
include/LZ77/LZType10.hpp
|
|
include/LZ77/LZType11.hpp
|
|
include/Athena/FileInfo.hpp
|
|
include/Athena/Dir.hpp
|
|
include/gekko_support.h
|
|
include/Athena/DNA.hpp
|
|
)
|
|
|
|
add_library(AthenaSakura
|
|
src/Athena/Sprite.cpp
|
|
src/Athena/SpriteFile.cpp
|
|
src/Athena/SpriteFileReader.cpp
|
|
src/Athena/SpriteFileWriter.cpp
|
|
src/Athena/SpriteFrame.cpp
|
|
src/Athena/SpritePart.cpp
|
|
|
|
include/Athena/Sprite.hpp
|
|
include/Athena/SpriteFile.hpp
|
|
include/Athena/SpriteFileReader.hpp
|
|
include/Athena/SpriteFileWriter.hpp
|
|
include/Athena/SpriteFrame.hpp
|
|
include/Athena/SpritePart.hpp
|
|
)
|
|
|
|
add_library(AthenaWiiSave
|
|
src/Athena/WiiBanner.cpp
|
|
src/Athena/WiiFile.cpp
|
|
src/Athena/WiiImage.cpp
|
|
src/Athena/WiiSave.cpp
|
|
src/Athena/WiiSaveReader.cpp
|
|
src/Athena/WiiSaveWriter.cpp
|
|
src/bn.cpp
|
|
src/ec.cpp
|
|
src/md5.cpp
|
|
src/sha1.cpp
|
|
src/aes.cpp
|
|
|
|
include/Athena/WiiBanner.hpp
|
|
include/Athena/WiiFile.hpp
|
|
include/Athena/WiiImage.hpp
|
|
include/Athena/WiiSave.hpp
|
|
include/Athena/WiiSaveReader.hpp
|
|
include/Athena/WiiSaveWriter.hpp
|
|
include/aes.hpp
|
|
include/bn.h
|
|
include/ec.h
|
|
include/md5.h
|
|
include/sha1.h
|
|
)
|
|
set_source_files_properties(src/aes.cpp PROPERTIES COMPILE_FLAGS -maes)
|
|
|
|
add_library(AthenaZelda
|
|
src/Athena/ALTTPFile.cpp
|
|
src/Athena/ALTTPFileReader.cpp
|
|
src/Athena/ALTTPFileWriter.cpp
|
|
src/Athena/ALTTPQuest.cpp
|
|
src/Athena/MCFile.cpp
|
|
src/Athena/MCFileReader.cpp
|
|
src/Athena/MCFileWriter.cpp
|
|
src/Athena/MCSlot.cpp
|
|
src/Athena/SkywardSwordFile.cpp
|
|
src/Athena/SkywardSwordFileReader.cpp
|
|
src/Athena/SkywardSwordFileWriter.cpp
|
|
src/Athena/SkywardSwordQuest.cpp
|
|
src/Athena/ZQuestFile.cpp
|
|
src/Athena/ZQuestFileReader.cpp
|
|
src/Athena/ZQuestFileWriter.cpp
|
|
|
|
include/Athena/ALTTPEnums.hpp
|
|
include/Athena/ALTTPFile.hpp
|
|
include/Athena/ALTTPFileReader.hpp
|
|
include/Athena/ALTTPFileWriter.hpp
|
|
include/Athena/ALTTPQuest.hpp
|
|
include/Athena/ALTTPStructs.hpp
|
|
include/Athena/MCFile.hpp
|
|
include/Athena/MCFileReader.hpp
|
|
include/Athena/MCFileWriter.hpp
|
|
include/Athena/SkywardSwordFile.hpp
|
|
include/Athena/SkywardSwordFileReader.hpp
|
|
include/Athena/SkywardSwordFileWriter.hpp
|
|
include/Athena/SkywardSwordQuest.hpp
|
|
)
|
|
|
|
# Offer the user the choice of overriding the installation directories
|
|
set(INSTALL_LIB_DIR lib CACHE PATH "Installation directory for libraries")
|
|
set(INSTALL_INCLUDE_DIR include CACHE PATH "Installation directory for header files")
|
|
if(WIN32 AND NOT CYGWIN)
|
|
set(DEF_INSTALL_CMAKE_DIR cmake)
|
|
else()
|
|
set(DEF_INSTALL_CMAKE_DIR lib/cmake/Athena)
|
|
endif()
|
|
set(INSTALL_CMAKE_DIR ${DEF_INSTALL_CMAKE_DIR} CACHE PATH "Installation directory for CMake files")
|
|
|
|
# Make relative paths absolute (needed later on)
|
|
foreach(p LIB INCLUDE CMAKE)
|
|
set(var INSTALL_${p}_DIR)
|
|
if(NOT IS_ABSOLUTE "${${var}}")
|
|
set(ABS_${var} "${CMAKE_INSTALL_PREFIX}/${${var}}")
|
|
else()
|
|
set(ABS_${var} "${${var}}")
|
|
endif()
|
|
endforeach()
|
|
|
|
# Define installs
|
|
install(DIRECTORY include/ DESTINATION ${INSTALL_INCLUDE_DIR}/Athena)
|
|
install(TARGETS AthenaCore AthenaSakura AthenaWiiSave AthenaZelda
|
|
DESTINATION ${INSTALL_LIB_DIR} EXPORT AthenaTargets)
|
|
if(WIN32 AND NOT CYGWIN)
|
|
install(FILES Athena.ico DESTINATION ${INSTALL_LIB_DIR})
|
|
elseif(UNIX)
|
|
install(FILES lib/pkgconfig/libAthena.pc
|
|
DESTINATION ${INSTALL_LIB_DIR}/pkgconfig)
|
|
endif()
|
|
|
|
##################
|
|
# Package Export #
|
|
##################
|
|
|
|
# Add all targets to the build-tree export set
|
|
export(TARGETS AthenaCore AthenaSakura AthenaWiiSave AthenaZelda
|
|
FILE "${PROJECT_BINARY_DIR}/AthenaTargets.cmake")
|
|
|
|
# Export the package for use from the build-tree
|
|
# (this registers the build-tree with a global CMake-registry)
|
|
export(PACKAGE Athena)
|
|
|
|
# Create the AthenaConfig.cmake
|
|
# ... for the build tree
|
|
set(CONF_INCLUDE_DIR "${PROJECT_SOURCE_DIR}/include")
|
|
set(CONF_ICON_DIR "${PROJECT_SOURCE_DIR}/Athena.ico")
|
|
configure_file(AthenaConfig.cmake.in "${PROJECT_BINARY_DIR}/AthenaConfig.cmake" @ONLY)
|
|
# ... for the install tree
|
|
file(RELATIVE_PATH REL_INCLUDE_DIR "${ABS_INSTALL_CMAKE_DIR}" "${ABS_INSTALL_INCLUDE_DIR}")
|
|
file(RELATIVE_PATH REL_ICON_DIR "${ABS_INSTALL_CMAKE_DIR}" "${ABS_INSTALL_LIB_DIR}/Athena.ico")
|
|
set(CONF_INCLUDE_DIR "\${ATHENA_CMAKE_DIR}/${REL_INCLUDE_DIR}")
|
|
set(CONF_ICON_DIR "\${ATHENA_CMAKE_DIR}/${REL_ICON_DIR}")
|
|
configure_file(AthenaConfig.cmake.in "${PROJECT_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/AthenaConfig.cmake" @ONLY)
|
|
# ... for both
|
|
configure_file(AthenaConfigVersion.cmake.in "${PROJECT_BINARY_DIR}/AthenaConfigVersion.cmake" @ONLY)
|
|
|
|
# Install AthenaConfig.cmake
|
|
install(FILES
|
|
"${PROJECT_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/AthenaConfig.cmake"
|
|
"${PROJECT_BINARY_DIR}/AthenaConfigVersion.cmake"
|
|
DESTINATION ${INSTALL_CMAKE_DIR} COMPONENT dev)
|
|
|
|
# Install the export set for use with the install-tree
|
|
install(EXPORT AthenaTargets DESTINATION ${INSTALL_CMAKE_DIR} COMPONENT dev)
|
|
|
|
#########
|
|
# CPack #
|
|
#########
|
|
|
|
include(InstallRequiredSystemLibraries)
|
|
set(CPACK_PACKAGE_DESCRIPTION_SUMMARY "Athena")
|
|
set(CPACK_PACKAGE_VENDOR "2015 Antidote / Jackoalan")
|
|
set(CPACK_PACKAGE_DESCRIPTION_FILE "${CMAKE_CURRENT_SOURCE_DIR}/README.md")
|
|
set(CPACK_RESOURCE_FILE_LICENSE "${CMAKE_CURRENT_SOURCE_DIR}/LICENSE")
|
|
set(CPACK_PACKAGE_VERSION_MAJOR ${ATHENA_MAJOR_VERSION})
|
|
set(CPACK_PACKAGE_VERSION_MINOR ${ATHENA_MINOR_VERSION})
|
|
set(CPACK_PACKAGE_VERSION_PATCH ${ATHENA_PATCH_VERSION})
|
|
set(CPACK_PACKAGE_INSTALL_DIRECTORY "Athena")
|
|
if(WIN32 AND NOT UNIX)
|
|
# There is a bug in NSI that does not handle full unix paths properly. Make
|
|
# sure there is at least one set of four (4) backlasshes.
|
|
set(CPACK_PACKAGE_ICON "${CMAKE_CURRENT_SOURCE_DIR}/Athena.ico")
|
|
set(CPACK_NSIS_INSTALLED_ICON_NAME "Athena.ico")
|
|
set(CPACK_NSIS_DISPLAY_NAME "Athena")
|
|
set(CPACK_NSIS_URL_INFO_ABOUT "http://libathena.github.io")
|
|
set(CPACK_NSIS_CONTACT "antidote.crk@gmail.com")
|
|
set(CPACK_NSIS_MODIFY_PATH ON)
|
|
endif()
|
|
include(CPack)
|
|
|