cc3dsfs/CMakeLists.txt

170 lines
6.6 KiB
CMake

cmake_minimum_required(VERSION 3.16)
project(CMakeSFMLProject LANGUAGES CXX)
set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/bin)
option(BUILD_SHARED_LIBS "Build shared libraries" OFF)
set(CMAKE_HOST_CXX_COMPILER "g++" CACHE STRING "Host Compiler")
set(WINDOWS_FTD3XX_USE_SHARED_LIB 0)
set(FETCHCONTENT_QUIET FALSE)
set(EXTRA_LINUX_CXX_FLAGS "-DXLIB_BASED 1" CACHE STRING "Extra Linux CXX flags")
include(FetchContent)
FetchContent_Declare(SFML
GIT_REPOSITORY https://github.com/SFML/SFML.git
GIT_TAG 2.6.1)
set(FTD3XX_BASE_URL https://ftdichip.com/wp-content/uploads/)
if(${CMAKE_SYSTEM_NAME} STREQUAL "Windows")
set(FTD3XX_URL_TIME 2024/01)
set(FTD3XX_VER 1.3.0.9)
set(FTD3XX_VOL FTD3XXLibrary_v${FTD3XX_VER})
set(FTD3XX_ARCHIVE ${FTD3XX_VOL}.zip)
set(FTD3XX_LIB libftd3xx.lib)
set(FTD3XX_DLL FTD3XX.dll)
set(FTD3XX_SUBFOLDER win)
if(${WINDOWS_FTD3XX_USE_SHARED_LIB})
set(WINDOWS_PATH_SPECIFIER DLL)
else()
set(WINDOWS_PATH_SPECIFIER Static_Lib)
endif()
elseif(${CMAKE_SYSTEM_NAME} STREQUAL "Darwin")
set(FTD3XX_URL_TIME 2023/03)
set(FTD3XX_VER 1.0.5)
set(FTD3XX_VOL d3xx-osx.${FTD3XX_VER})
set(FTD3XX_ARCHIVE ${FTD3XX_VOL}.dmg)
set(FTD3XX_LIB libftd3xx-static.a)
set(FTD3XX_MOUNTED_FOLDER /Volumes/${FTD3XX_VOL})
set(FTD3XX_SUBFOLDER macos)
else()
set(FTD3XX_URL_TIME 2023/03)
set(FTD3XX_VER 1.0.5)
if((${CMAKE_SYSTEM_PROCESSOR} MATCHES "aarch") OR (${CMAKE_SYSTEM_PROCESSOR} MATCHES "arm"))
if((${CMAKE_SYSTEM_PROCESSOR} MATCHES "64") OR (${CMAKE_SYSTEM_PROCESSOR} MATCHES "v8"))
set(FTD3XX_VOL libftd3xx-linux-arm-v8-${FTD3XX_VER})
elseif(${CMAKE_SYSTEM_PROCESSOR} MATCHES "v7")
set(FTD3XX_VOL libftd3xx-linux-arm-v7_32-${FTD3XX_VER})
endif()
else()
if(${CMAKE_SYSTEM_PROCESSOR} MATCHES "64")
set(FTD3XX_VOL libftd3xx-linux-x86_64-${FTD3XX_VER})
elseif((${CMAKE_SYSTEM_PROCESSOR} MATCHES "32") OR (${CMAKE_SYSTEM_PROCESSOR} MATCHES "86"))
set(FTD3XX_VOL libftd3xx-linux-x86_32-${FTD3XX_VER})
endif()
endif()
set(FTD3XX_ARCHIVE ${FTD3XX_VOL}.tgz)
set(FTD3XX_LIB libftd3xx-static.a)
set(FTD3XX_SUBFOLDER linux)
endif()
if(${CMAKE_SYSTEM_NAME} STREQUAL "Darwin")
FetchContent_Declare(FTD3XX
URL ${FTD3XX_BASE_URL}${FTD3XX_URL_TIME}/${FTD3XX_ARCHIVE}
DOWNLOAD_NO_EXTRACT TRUE
)
else()
FetchContent_Declare(FTD3XX
URL ${FTD3XX_BASE_URL}${FTD3XX_URL_TIME}/${FTD3XX_ARCHIVE}
)
endif()
FetchContent_MakeAvailable(FTD3XX SFML)
file(MAKE_DIRECTORY ${ftd3xx_BINARY_DIR}/win)
file(MAKE_DIRECTORY ${ftd3xx_BINARY_DIR}/macos)
file(MAKE_DIRECTORY ${ftd3xx_BINARY_DIR}/linux)
set(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER)
# search headers and libraries in the target environment
set(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY)
set(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY)
set(TOOLS_DATA_DIR ${CMAKE_BINARY_DIR}/tools_and_data)
file(MAKE_DIRECTORY ${TOOLS_DATA_DIR})
set(OUTPUT_NAME cc3dsfs)
add_custom_target(CMakeFTD3XX)
add_custom_target(CMakeBin2C)
add_executable(${OUTPUT_NAME} source/cc3dsfs.cpp source/utils.cpp source/audio_data.cpp source/audio.cpp source/frontend.cpp source/TextRectangle.cpp source/WindowScreen.cpp source/3dscapture.cpp source/conversions.cpp ${TOOLS_DATA_DIR}/font_ttf.cpp)
add_dependencies(${OUTPUT_NAME} CMakeFTD3XX)
if(${CMAKE_SYSTEM_NAME} STREQUAL "Windows")
target_link_libraries(${OUTPUT_NAME} PRIVATE sfml-graphics sfml-audio sfml-window sfml-system FTD3XX)
else()
target_link_libraries(${OUTPUT_NAME} PRIVATE sfml-graphics sfml-audio sfml-window sfml-system ftd3xx-static)
endif()
target_link_directories(${OUTPUT_NAME} PRIVATE ${ftd3xx_BINARY_DIR}/${FTD3XX_SUBFOLDER})
target_include_directories(${OUTPUT_NAME} PRIVATE ${ftd3xx_BINARY_DIR}/${FTD3XX_SUBFOLDER} ${TOOLS_DATA_DIR} ${CMAKE_SOURCE_DIR}/include)
target_compile_features(${OUTPUT_NAME} PRIVATE cxx_std_17)
target_compile_options(${OUTPUT_NAME} PRIVATE "-std=c++17" ${EXTRA_LINUX_CXX_FLAGS})
add_custom_command(
TARGET CMakeBin2C
COMMENT "Create Bin2C"
PRE_BUILD COMMAND ${CMAKE_HOST_CXX_COMPILER} ${CMAKE_SOURCE_DIR}/tools/bin2c.cpp -o ${TOOLS_DATA_DIR}/bin2c
)
add_custom_command(
OUTPUT ${TOOLS_DATA_DIR}/font_ttf.cpp
COMMENT "Convert font to binary"
COMMAND ${TOOLS_DATA_DIR}/bin2c ${CMAKE_SOURCE_DIR}/data/font.ttf ${TOOLS_DATA_DIR} font_ttf font_ttf
DEPENDS ${CMAKE_SOURCE_DIR}/data/font.ttf CMakeBin2C
)
if(${CMAKE_SYSTEM_NAME} STREQUAL "Windows")
add_custom_command(
TARGET CMakeFTD3XX
COMMENT "Copy FTD3XX header"
PRE_BUILD COMMAND ${CMAKE_COMMAND} -E copy ${ftd3xx_SOURCE_DIR}/FTD3XX.h ${ftd3xx_BINARY_DIR}/${FTD3XX_SUBFOLDER}
)
if(WIN32)
set(PATH_WINDOWS_ARCH Win32)
else ()
set(PATH_WINDOWS_ARCH x64)
endif()
add_custom_command(
TARGET CMakeFTD3XX
COMMENT "Copy FTD3XX lib file"
PRE_BUILD COMMAND ${CMAKE_COMMAND} -E copy ${ftd3xx_SOURCE_DIR}/${PATH_WINDOWS_ARCH}/${WINDOWS_PATH_SPECIFIER}/FTD3XX.lib ${ftd3xx_BINARY_DIR}/${FTD3XX_SUBFOLDER}
)
if(${WINDOWS_FTD3XX_USE_SHARED_LIB})
add_custom_command(
TARGET CMakeFTD3XX
COMMENT "Copy FTD3XX lib file"
PRE_BUILD COMMAND ${CMAKE_COMMAND} -E copy ${ftd3xx_SOURCE_DIR}/${PATH_WINDOWS_ARCH}/${WINDOWS_PATH_SPECIFIER}/FTD3XX.dll ${ftd3xx_BINARY_DIR}/${FTD3XX_SUBFOLDER}
)
endif()
elseif(${CMAKE_SYSTEM_NAME} STREQUAL "Darwin")
add_custom_command(
TARGET CMakeFTD3XX
COMMENT "Copy FTD3XX files"
PRE_BUILD COMMAND macos_setup_ftd3xx.sh ${ftd3xx_SOURCE_DIR}/${FTD3XX_ARCHIVE} ${FTD3XX_MOUNTED_FOLDER} ${ftd3xx_BINARY_DIR}/${FTD3XX_SUBFOLDER} ${FTD3XX_LIB}
)
else()
add_custom_command(
TARGET CMakeFTD3XX
COMMENT "Copy FTD3XX headers"
PRE_BUILD COMMAND ${CMAKE_COMMAND} -E copy ${ftd3xx_SOURCE_DIR}/*.h ${ftd3xx_BINARY_DIR}/${FTD3XX_SUBFOLDER}
)
add_custom_command(
TARGET CMakeFTD3XX
COMMENT "Copy FTD3XX lib files"
PRE_BUILD COMMAND ${CMAKE_COMMAND} -E copy ${ftd3xx_SOURCE_DIR}/${FTD3XX_LIB} ${ftd3xx_BINARY_DIR}/${FTD3XX_SUBFOLDER}
)
endif()
if(WIN32)
add_custom_command(
TARGET ${OUTPUT_NAME}
COMMENT "Copy OpenAL DLL"
PRE_BUILD COMMAND ${CMAKE_COMMAND} -E copy ${sfml_SOURCE_DIR}/extlibs/bin/$<IF:$<EQUAL:${CMAKE_SIZEOF_VOID_P},8>,x64,x86>/openal32.dll ${CMAKE_SOURCE_DIR}
VERBATIM
)
endif()
add_custom_command(
TARGET ${OUTPUT_NAME}
COMMENT "Copy OpenAL DLL"
POST_BUILD COMMAND ${CMAKE_COMMAND} -E copy $<TARGET_FILE:${OUTPUT_NAME}> ${CMAKE_SOURCE_DIR}
VERBATIM
)
install(TARGETS ${OUTPUT_NAME})