158 lines
6.4 KiB
CMake
158 lines
6.4 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'
|
|
MessageBox MB_OK 'FreeDV will now open a Command Prompt window to finish installing the Python components needed for RADE. Please allow this process to complete without interruption. It may appear as though nothing is happening but rest assured, things are happening.' /SD IDOK
|
|
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)
|