157 lines
5.6 KiB
CMake
157 lines
5.6 KiB
CMake
# As this script is run in a new cmake instance, it does not have access to
|
|
# the existing cache variables. Pass them in via the configure_file command.
|
|
set(CMAKE_BINARY_DIR @CMAKE_BINARY_DIR@)
|
|
set(CMAKE_SOURCE_DIR @CMAKE_SOURCE_DIR@)
|
|
set(USE_INTERNAL_CODEC2 @USE_INTERNAL_CODEC2@)
|
|
set(UNIX @UNIX@)
|
|
set(WIN32 @WIN32@)
|
|
set(CMAKE_CROSSCOMPILING @CMAKE_CROSSCOMPILING@)
|
|
set(CMAKE_FIND_LIBRARY_SUFFIXES @CMAKE_FIND_LIBRARY_SUFFIXES@)
|
|
set(CMAKE_FIND_LIBRARY_PREFIXES @CMAKE_FIND_LIBRARY_PREFIXES@)
|
|
set(CMAKE_SYSTEM_LIBRARY_PATH @CMAKE_SYSTEM_LIBRARY_PATH@)
|
|
set(CMAKE_FIND_ROOT_PATH @CMAKE_FIND_ROOT_PATH@)
|
|
if(USE_INTERNAL_CODEC2)
|
|
set(CODEC2_BUILD_DIR ${CMAKE_BINARY_DIR}/codec2_build)
|
|
set(LPCNET_BUILD_DIR ${CMAKE_BINARY_DIR}/LPCNet_build)
|
|
else()
|
|
set(CODEC2_BUILD_DIR @CODEC2_BUILD_DIR@)
|
|
set(LPCNET_BUILD_DIR @LPCNET_BUILD_DIR@)
|
|
endif()
|
|
|
|
|
|
set(FREEDV_USING_LLVM_MINGW @FREEDV_USING_LLVM_MINGW@)
|
|
set(FREEDV_PACKAGE_SEARCH_PATHS @FREEDV_PACKAGE_SEARCH_PATHS@)
|
|
list(APPEND FREEDV_PACKAGE_SEARCH_PATHS ${CMAKE_BINARY_DIR}/external/dist/bin)
|
|
|
|
set(CMAKE_GET_RUNTIME_DEPENDENCIES_PLATFORM windows+pe)
|
|
set(CMAKE_GET_RUNTIME_DEPENDENCIES_TOOL objdump)
|
|
set(CMAKE_GET_RUNTIME_DEPENDENCIES_COMMAND ${CMAKE_OBJDUMP})
|
|
|
|
#message("dependency platform: ${CMAKE_GET_RUNTIME_DEPENDENCIES_PLATFORM}")
|
|
#message("dependency tool: ${CMAKE_GET_RUNTIME_DEPENDENCIES_TOOL}")
|
|
#message("dependency command: ${CMAKE_GET_RUNTIME_DEPENDENCIES_COMMAND}")
|
|
|
|
set(FREEDV_EXE ${CMAKE_BINARY_DIR}/src/freedv.exe)
|
|
|
|
# Implement our own GetDependencies because the CMake one
|
|
# isn't working for some reason when using LLVM.
|
|
macro(freedv_get_dependencies OUTPUT_VAR FILENAME)
|
|
execute_process(
|
|
COMMAND ${CMAKE_OBJDUMP} -p ${FILENAME}
|
|
COMMAND grep "DLL Name:"
|
|
COMMAND awk "{ printf \"%s;\", \$3; }"
|
|
COMMAND sed "s/;$//"
|
|
OUTPUT_VARIABLE ${OUTPUT_VAR})
|
|
endmacro()
|
|
|
|
freedv_get_dependencies(_deps ${FREEDV_EXE})
|
|
|
|
message("Found Win32 dependencies: ${_deps}")
|
|
|
|
# Filter libraries known to be provided by Windows
|
|
set( _windlls
|
|
ADVAPI32.dll
|
|
GDI32.dll
|
|
KERNEL32.dll
|
|
SHELL32.dll
|
|
USER32.dll
|
|
WS2_32.dll
|
|
WSOCK32.dll
|
|
WSOCK32.DLL
|
|
WINMM.dll
|
|
WINMM.DLL
|
|
ole32.dll
|
|
COMCTL32.dll
|
|
COMCTL32.DLL
|
|
OLEAUT32.dll
|
|
RPCRT4.dll
|
|
comdlg32.dll
|
|
COMDLG32.DLL
|
|
SETUPAPI.dll
|
|
WINSPOOL.DRV
|
|
VERSION.dll
|
|
SHLWAPI.dll
|
|
UxTheme.dll
|
|
OLEACC.dll
|
|
msvcrt.dll
|
|
bcrypt.dll
|
|
|
|
# The below are additional DLLs required when compiled
|
|
# using the LLVM version of MinGW.
|
|
|
|
api-ms-win-crt-locale-l1-1-0.dll
|
|
api-ms-win-crt-filesystem-l1-1-0.dll
|
|
api-ms-win-crt-environment-l1-1-0.dll
|
|
api-ms-win-crt-utility-l1-1-0.dll
|
|
api-ms-win-crt-time-l1-1-0.dll
|
|
api-ms-win-crt-string-l1-1-0.dll
|
|
api-ms-win-crt-stdio-l1-1-0.dll
|
|
api-ms-win-crt-runtime-l1-1-0.dll
|
|
api-ms-win-crt-private-l1-1-0.dll
|
|
api-ms-win-crt-math-l1-1-0.dll
|
|
api-ms-win-crt-heap-l1-1-0.dll
|
|
api-ms-win-crt-convert-l1-1-0.dll
|
|
api-ms-win-crt-multibyte-l1-1-0.dll
|
|
)
|
|
list(REMOVE_ITEM _deps ${_windlls})
|
|
|
|
# Handle internal libraries separately.
|
|
if(CODEC2_BUILD_DIR)
|
|
list(REMOVE_ITEM _deps libcodec2.dll)
|
|
find_library(CODEC2 codec2 NO_DEFAULT_PATH PATHS ${CODEC2_BUILD_DIR}/src REQUIRED)
|
|
string(REPLACE ".a" "" CODEC2_FINAL ${CODEC2})
|
|
file(INSTALL DESTINATION "${CMAKE_INSTALL_PREFIX}/bin"
|
|
TYPE EXECUTABLE FILES ${CODEC2_FINAL})
|
|
endif()
|
|
if(LPCNET_BUILD_DIR)
|
|
list(REMOVE_ITEM _deps liblpcnetfreedv.dll)
|
|
find_library(LPCNET lpcnetfreedv NO_DEFAULT_PATH PATHS ${LPCNET_BUILD_DIR}/src REQUIRED)
|
|
string(REPLACE ".a" "" LPCNET_FINAL ${LPCNET})
|
|
file(INSTALL DESTINATION "${CMAKE_INSTALL_PREFIX}/bin"
|
|
TYPE EXECUTABLE FILES ${LPCNET_FINAL})
|
|
endif()
|
|
|
|
if(FREEDV_USING_LLVM_MINGW)
|
|
# Use the bin/ folder for the platform as an additional
|
|
# search path for find_library.
|
|
find_program(OBJDUMP_PATH ${CMAKE_OBJDUMP})
|
|
string(REPLACE "-objdump" "" LLVM_ARCH_TRIPLE ${CMAKE_OBJDUMP})
|
|
|
|
string(REPLACE ${CMAKE_OBJDUMP} "" OBJDUMP_PATH ${OBJDUMP_PATH})
|
|
string(APPEND LLVM_ADDITIONAL_LIB_PATH ${OBJDUMP_PATH} "../" ${LLVM_ARCH_TRIPLE} "/bin")
|
|
cmake_path(NORMAL_PATH LLVM_ADDITIONAL_LIB_PATH)
|
|
message("Using ${LLVM_ADDITIONAL_LIB_PATH} for dependency searches.")
|
|
list(APPEND FREEDV_PACKAGE_SEARCH_PATHS ${LLVM_ADDITIONAL_LIB_PATH})
|
|
endif(FREEDV_USING_LLVM_MINGW)
|
|
|
|
message("dependency search paths: ${FREEDV_PACKAGE_SEARCH_PATHS}")
|
|
|
|
# Process remaining dependencies.
|
|
list(LENGTH _deps _dep_len)
|
|
message("There are ${_dep_len} dependencies to scan.")
|
|
while(_deps)
|
|
foreach(_runtime ${_deps})
|
|
message("Looking for ${_runtime}")
|
|
#if(FREEDV_USING_LLVM_MINGW)
|
|
find_file(RUNTIME_${_runtime} NAMES ${_runtime} PATHS ${FREEDV_PACKAGE_SEARCH_PATHS} REQUIRED)
|
|
#else(FREEDV_USING_LLVM_MINGW)
|
|
# find_library(RUNTIME_${_runtime} NAMES ${_runtime} PATHS ${FREEDV_PACKAGE_SEARCH_PATHS} REQUIRED)
|
|
#endif(FREEDV_USING_LLVM_MINGW)
|
|
if(RUNTIME_${_runtime})
|
|
message("Found: ${RUNTIME_${_runtime}}")
|
|
file(INSTALL DESTINATION "${CMAKE_INSTALL_PREFIX}/bin"
|
|
TYPE EXECUTABLE FILES "${RUNTIME_${_runtime}}")
|
|
freedv_get_dependencies(_newdep "${RUNTIME_${_runtime}}")
|
|
list(APPEND _newdeps ${_newdep})
|
|
list(APPEND _good_deps ${_runtime})
|
|
else()
|
|
message("Warning: ${_runtime} not found.")
|
|
list(APPEND _bad_deps ${_runtime})
|
|
endif()
|
|
endforeach()
|
|
# Try to figure out if there are new dependencies or not.
|
|
list(REMOVE_DUPLICATES _newdeps)
|
|
list(REMOVE_ITEM _newdeps ${_deps};${_good_deps};${_bad_deps};${_windlls})
|
|
set(_deps ${_newdeps})
|
|
endwhile()
|