freedv-gui/cmake/BuildRADE.cmake

157 lines
6.1 KiB
CMake

if(CMAKE_CROSSCOMPILING)
set(RADE_CMAKE_ARGS ${RADE_CMAKE_ARGS} -DPython3_ROOT_DIR=${Python3_ROOT_DIR} -DCMAKE_TOOLCHAIN_FILE=${CMAKE_TOOLCHAIN_FILE})
elseif(APPLE)
set(RADE_CMAKE_ARGS ${RADE_CMAKE_ARGS} -DPython3_ROOT_DIR=${Python3_ROOT_DIR})
endif()
if(BUILD_OSX_UNIVERSAL)
set(RADE_CMAKE_ARGS ${RADE_CMAKE_ARGS} -DBUILD_OSX_UNIVERSAL=1)
endif(BUILD_OSX_UNIVERSAL)
include(ExternalProject)
ExternalProject_Add(build_rade
SOURCE_DIR rade_src
BINARY_DIR rade_build
GIT_REPOSITORY https://github.com/drowe67/radae.git
GIT_TAG main
CMAKE_ARGS ${RADE_CMAKE_ARGS}
#CMAKE_CACHE_ARGS -DCMAKE_OSX_DEPLOYMENT_TARGET:STRING=${CMAKE_OSX_DEPLOYMENT_TARGET}
INSTALL_COMMAND ""
)
ExternalProject_Get_Property(build_rade BINARY_DIR)
ExternalProject_Get_Property(build_rade SOURCE_DIR)
add_library(rade SHARED IMPORTED)
add_dependencies(rade build_rade)
include_directories(${SOURCE_DIR}/src)
set_target_properties(rade PROPERTIES
IMPORTED_LOCATION "${BINARY_DIR}/src/librade${CMAKE_SHARED_LIBRARY_SUFFIX}"
IMPORTED_IMPLIB "${BINARY_DIR}/src/librade${CMAKE_IMPORT_LIBRARY_SUFFIX}"
)
list(APPEND FREEDV_PACKAGE_SEARCH_PATHS ${BINARY_DIR}/src)
set(rade_BINARY_DIR ${BINARY_DIR})
add_library(opus STATIC IMPORTED)
add_dependencies(opus build_rade)
set(FARGAN_ARM_CONFIG_H_FILE "${BINARY_DIR}/build_opus_arm-prefix/src/build_opus_arm/config.h")
set(FARGAN_X86_CONFIG_H_FILE "${BINARY_DIR}/build_opus_x86-prefix/src/build_opus_x86/config.h")
if(APPLE AND BUILD_OSX_UNIVERSAL)
include_directories(
${BINARY_DIR}/build_opus_arm-prefix/src/build_opus_arm/dnn
${BINARY_DIR}/build_opus_arm-prefix/src/build_opus_arm/celt
${BINARY_DIR}/build_opus_arm-prefix/src/build_opus_arm/include)
set_target_properties(opus PROPERTIES
IMPORTED_LOCATION "${BINARY_DIR}/libopus${CMAKE_STATIC_LIBRARY_SUFFIX}"
)
set(FARGAN_CONFIG_H_FILE "${BINARY_DIR}/build_opus_arm-prefix/src/build_opus_arm/config.h")
else(APPLE AND BUILD_OSX_UNIVERSAL)
include_directories(
${BINARY_DIR}/build_opus-prefix/src/build_opus/dnn
${BINARY_DIR}/build_opus-prefix/src/build_opus/celt
${BINARY_DIR}/build_opus-prefix/src/build_opus/include)
set_target_properties(opus PROPERTIES
IMPORTED_LOCATION "${BINARY_DIR}/build_opus-prefix/src/build_opus/.libs/libopus${CMAKE_STATIC_LIBRARY_SUFFIX}"
)
set(FARGAN_CONFIG_H_FILE "${BINARY_DIR}/build_opus-prefix/src/build_opus/config.h")
set(FARGAN_ARM_CONFIG_H_FILE "${FARGAN_CONFIG_H_FILE}")
set(FARGAN_X86_CONFIG_H_FILE "${FARGAN_CONFIG_H_FILE}")
endif(APPLE AND BUILD_OSX_UNIVERSAL)
configure_file("${CMAKE_CURRENT_SOURCE_DIR}/fargan_config.h.in" "${CMAKE_CURRENT_BINARY_DIR}/fargan_config.h")
if(WIN32)
# XXX only x86_64 supported for now
set(PYTHON_URL https://www.python.org/ftp/python/3.12.7/python-3.12.7-embed-amd64.zip)
set(PYTHON_HASH 4c0a5a44d4ca1d0bc76fe08ea8b76adc)
# Download Python. This is only included in the installer.
FetchContent_Declare(download_python3
URL ${PYTHON_URL}
URL_HASH MD5=${PYTHON_HASH})
if (NOT download_python3_POPULATED)
FetchContent_Populate(download_python3)
endif (NOT download_python3_POPULATED)
# Also download pip so we can install RADE dependencies after
# program installation.
FetchContent_Declare(download_pip
URL https://bootstrap.pypa.io/get-pip.py
DOWNLOAD_NO_EXTRACT TRUE)
if (NOT download_pip_POPULATED)
FetchContent_Populate(download_pip)
endif (NOT download_pip_POPULATED)
# PyTorch needs the Visual Studio redistributable to be installed.
FetchContent_Declare(download_vsr
URL https://aka.ms/vs/16/release/vc_redist.x64.exe
DOWNLOAD_NO_EXTRACT TRUE)
if (NOT download_vsr_POPULATED)
FetchContent_Populate(download_vsr)
endif (NOT download_vsr_POPULATED)
# Per https://bnikolic.co.uk/blog/python/2022/03/14/python-embedwin.html
# there are some tweaks we need to make to the embeddable package first
# before FreeDV can use it. Additionally, renaming python312._pth does not
# allow pip to work; additional content should be added to this file instead
# (see example at https://github.com/sergeyyurkov1/make_portable_python_env/blob/master/make_portable_python_env.bat).
file(MAKE_DIRECTORY ${download_python3_SOURCE_DIR}/DLLs)
file(WRITE ${download_python3_SOURCE_DIR}/python312._pth "Lib/site-packages\r\npython312.zip\r\n.\r\n\r\n# Uncomment to run site.main() automatically\r\nimport site")
# Tell NSIS to install Python and pip into the same folder freedv.exe is in.
# This makes looking for python3.dll easier later.
# Note: the trailing slash below is needed to make sure a "download_python3"
# directory isn't created.
install(
DIRECTORY ${download_python3_SOURCE_DIR}/
DESTINATION bin)
install(
FILES ${download_pip_SOURCE_DIR}/get-pip.py
DESTINATION bin)
# Install files needed for post-install to work.
install(
FILES ${CMAKE_SOURCE_DIR}/cmake/rade-requirements.txt
DESTINATION bin)
install(
FILES ${CMAKE_SOURCE_DIR}/cmake/rade-setup.bat
DESTINATION bin)
# Install RADE Python files
install(
DIRECTORY ${SOURCE_DIR}/radae
DESTINATION bin)
install(
FILES ${BINARY_DIR}/src/radae_rx.exe
DESTINATION bin)
install(
FILES ${BINARY_DIR}/src/radae_tx.exe
DESTINATION bin)
install(
FILES ${SOURCE_DIR}/radae_txe.py ${SOURCE_DIR}/radae_rxe.py
DESTINATION bin)
install(
FILES ${SOURCE_DIR}/model19_check3/checkpoints/checkpoint_epoch_100.pth
DESTINATION bin/model19_check3/checkpoints
)
# Install VS Redistributable
install(
FILES ${download_vsr_SOURCE_DIR}/vc_redist.x64.exe
DESTINATION bin)
# Ensure that rade-setup.bat is executed by the installer,
# otherwise no packages will be installed.
set(CPACK_NSIS_EXTRA_INSTALL_COMMANDS
"ExecWait '\\\"\$INSTDIR\\\\bin\\\\vc_redist.x64.exe\\\" /install /passive'
ExecShellWait '' '\$INSTDIR\\\\bin\\\\rade-setup.bat' ''")
# Make sure we fully clean up after Python on uninstall.
set(CPACK_NSIS_EXTRA_UNINSTALL_COMMANDS
"${CPACK_NSIS_EXTRA_UNINSTALL_COMMANDS}\r\nRMDir /r /REBOOTOK '\$INSTDIR\\\\bin\\\\Lib'\r\nRMDir /r /REBOOTOK '\$INSTDIR\\\\bin\\\\scripts'\r\nRMDir /r /REBOOTOK '\$INSTDIR\\\\bin\\\\share'\r\nRMDir /r /REBOOTOK '\$INSTDIR\\\\bin\\\\__pycache__'\r\nRMDir /r /REBOOTOK '\$INSTDIR\\\\bin\\\\radae\\\\__pycache__'")
endif(WIN32)