diff --git a/CMakeModules/LibWebRTCConfig.cmake b/CMakeModules/LibWebRTCConfig.cmake new file mode 100644 index 0000000..818abac --- /dev/null +++ b/CMakeModules/LibWebRTCConfig.cmake @@ -0,0 +1,25 @@ +# +# Retrieve WebRTC source code +# +file(WRITE ${CMAKE_BINARY_DIR}/.gclient "solutions = [ + { + \"url\": \"https://chromium.googlesource.com/external/webrtc.git\", + \"managed\": False, + \"name\": \"src\", + \"deps_file\": \"DEPS\", + \"custom_deps\": {}, + }, +] +") + +if (TARGET_OS STREQUAL "android") + file(APPEND ${CMAKE_BINARY_DIR}/.gclient "target_os = [\"android\", \"unix\"]") +elseif (TARGET_OS STREQUAL "ios") + file(APPEND ${CMAKE_BINARY_DIR}/.gclient "target_os = [\"ios\", \"mac\"]") +elseif (TARGET_OS STREQUAL "linux") + file(APPEND ${CMAKE_BINARY_DIR}/.gclient "target_os = [\"unix\"]") +elseif (TARGET_OS STREQUAL "mac") + file(APPEND ${CMAKE_BINARY_DIR}/.gclient "target_os = [\"mac\"]") +elseif (TARGET_OS STREQUAL "win") + file(APPEND ${CMAKE_BINARY_DIR}/.gclient "target_os = [\"win\"]") +endif (TARGET_OS STREQUAL "android") \ No newline at end of file diff --git a/CMakeModules/LibWebRTCPrefix.cmake b/CMakeModules/LibWebRTCPrefix.cmake new file mode 100644 index 0000000..ecd68cb --- /dev/null +++ b/CMakeModules/LibWebRTCPrefix.cmake @@ -0,0 +1,48 @@ +# +# Generate environment variables +# +set(WEBRTC_PATH ${CMAKE_SOURCE_DIR}/Dependencies/depot_tools) + +if (WIN32) + get_filename_component(DEPOT_TOOLS_PYTHON_PATH + "${WEBRTC_PATH}/python276_bin" + REALPATH) + list(APPEND WEBRTC_PATH ${DEPOT_TOOLS_PYTHON_PATH}) +endif (WIN32) + +list(APPEND WEBRTC_PATH $ENV{PATH}) + +if (WIN32) + string(REGEX REPLACE "/" "\\\\" WEBRTC_PATH "${WEBRTC_PATH}") + string(REGEX REPLACE ";" "\\\;" WEBRTC_PATH "${WEBRTC_PATH}") +else (WIN32) + string(REGEX REPLACE ";" ":" WEBRTC_PATH "${WEBRTC_PATH}") +endif (WIN32) + +get_filename_component(CHROMIUM_PYTHONPATH + "${CMAKE_BINARY_DIR}/src/build" + REALPATH) + +if (WIN32) + set(PREFIX_FILENAME ${CMAKE_BINARY_DIR}/prefix.bat) + set(PREFIX_COMMAND set) + set(PREFIX_HEADER "@ECHO OFF") + set(PREFIX_EVAL "%*") + set(PREFIX_EXECUTE cmd /c ${PREFIX_FILENAME}) + set(PREFIX_NEWLINE \r\n) +else (WIN32) + set(PREFIX_FILENAME ${CMAKE_BINARY_DIR}/prefix.sh) + set(PREFIX_COMMAND export) + set(PREFIX_HEADER "") + set(PREFIX_EVAL eval\ $@) + set(PREFIX_EXECUTE /bin/sh ${PREFIX_FILENAME}) + set(PREFIX_NEWLINE \n) +endif (WIN32) + +file(WRITE ${PREFIX_FILENAME} ${PREFIX_HEADER}${PREFIX_NEWLINE}) +file(APPEND ${PREFIX_FILENAME} ${PREFIX_COMMAND}\ PATH=${WEBRTC_PATH}${PREFIX_NEWLINE}) +file(APPEND ${PREFIX_FILENAME} ${PREFIX_COMMAND}\ PYTHONPATH=${CHROMIUM_PYTHONPATH}${PREFIX_NEWLINE}) +file(APPEND ${PREFIX_FILENAME} ${PREFIX_COMMAND}\ DEPOT_TOOLS_WIN_TOOLCHAIN=0${PREFIX_NEWLINE}) +file(APPEND ${PREFIX_FILENAME} ${PREFIX_COMMAND}\ DEPOT_TOOLS_UPDATE=0${PREFIX_NEWLINE}) +file(APPEND ${PREFIX_FILENAME} ${PREFIX_COMMAND}\ CHROME_HEADLESS=1${PREFIX_NEWLINE}) +file(APPEND ${PREFIX_FILENAME} ${PREFIX_EVAL}${PREFIX_NEWLINE}) diff --git a/Targets/Package/CMakeLists.txt b/Targets/Package/CMakeLists.txt index e8f9bd8..6fff9c0 100644 --- a/Targets/Package/CMakeLists.txt +++ b/Targets/Package/CMakeLists.txt @@ -15,32 +15,8 @@ else (WIN32) set(CPACK_GENERATOR "TGZ") endif (WIN32) -if (CMAKE_SYSTEM_NAME MATCHES "Linux") - set(LIBWEBRTC_PLATFORM "linux") -elseif (CMAKE_SYSTEM_NAME MATCHES "Darwin") - set(LIBWEBRTC_PLATFORM "mac") -elseif (CMAKE_SYSTEM_NAME MATCHES "Windows") - set(LIBWEBRTC_PLATFORM "win32") -endif () - -if (CMAKE_SYSTEM_PROCESSOR MATCHES "^arm") - set(LIBWEBRTC_ARCH "arm") -elseif (CMAKE_SYSTEM_PROCESSOR MATCHES "^i.86$") - set(LIBWEBRTC_ARCH "x86") -elseif (CMAKE_SYSTEM_PROCESSOR MATCHES "^x86.64$") - set(LIBWEBRTC_ARCH "x64") -elseif (CMAKE_SYSTEM_PROCESSOR STREQUAL "AMD64") - set(LIBWEBRTC_ARCH "x64") -elseif (CMAKE_SYSTEM_PROCESSOR STREQUAL "powerpc") - set(LIBWEBRTC_ARCH "ppc") -elseif (CMAKE_SYSTEM_PROCESSOR STREQUAL "powerpc64") - set(LIBWEBRTC_ARCH "ppc64") -else () - set(LIBWEBRTC_ARCH "${CMAKE_SYSTEM_PROCESSOR}") -endif () - set(CPACK_INCLUDE_TOPLEVEL_DIRECTORY 0) -set(CPACK_PACKAGE_FILE_NAME "libwebrtc-${LIBWEBRTC_VERSION}-${LIBWEBRTC_PLATFORM}-${LIBWEBRTC_ARCH}") +set(CPACK_PACKAGE_FILE_NAME "libwebrtc-${LIBWEBRTC_VERSION}-${TARGET_OS}-${TARGET_ARCH}") set(CPACK_PACKAGE_INSTALL_DIRECTORY "libwebrtc") include(CPack) \ No newline at end of file diff --git a/Targets/WebRTC/CMakeLists.txt b/Targets/WebRTC/CMakeLists.txt index cd9eff6..0ef477d 100644 --- a/Targets/WebRTC/CMakeLists.txt +++ b/Targets/WebRTC/CMakeLists.txt @@ -1,61 +1,10 @@ include(ExternalProject) - -# -# Generate environment variables -# -set(WEBRTC_PATH ${CMAKE_SOURCE_DIR}/Dependencies/depot_tools) - -if (WIN32) - get_filename_component(DEPOT_TOOLS_PYTHON_PATH - "${DEPOT_TOOLS_PATH}/python276_bin" - REALPATH) - list(APPEND WEBRTC_PATH ${DEPOT_TOOLS_PYTHON_PATH}) -endif (WIN32) - -list(APPEND WEBRTC_PATH $ENV{PATH}) - -if (WIN32) - string(REGEX REPLACE "/" "\\\\" WEBRTC_PATH "${WEBRTC_PATH}") - string(REGEX REPLACE ";" "\\\;" WEBRTC_PATH "${WEBRTC_PATH}") -else (WIN32) - string(REGEX REPLACE ";" ":" WEBRTC_PATH "${WEBRTC_PATH}") -endif (WIN32) - -get_filename_component(CHROMIUM_PYTHONPATH - "${CMAKE_BINARY_DIR}/src/build" - REALPATH) - -if (WIN32) - set(PREFIX_FILENAME ${CMAKE_BINARY_DIR}/prefix.bat) - set(PREFIX_COMMAND set) - set(PREFIX_HEADER "@ECHO OFF") - set(PREFIX_EVAL "%*") - set(PREFIX_EXECUTE cmd /c ${PREFIX_FILENAME}) - set(PREFIX_NEWLINE \r\n) -else (WIN32) - set(PREFIX_FILENAME ${CMAKE_BINARY_DIR}/prefix.sh) - set(PREFIX_COMMAND export) - set(PREFIX_HEADER "") - set(PREFIX_EVAL eval\ $@) - set(PREFIX_EXECUTE /bin/sh ${PREFIX_FILENAME}) - set(PREFIX_NEWLINE \n) -endif (WIN32) - -file(WRITE ${PREFIX_FILENAME} ${PREFIX_HEADER}${PREFIX_NEWLINE}) -file(APPEND ${PREFIX_FILENAME} ${PREFIX_COMMAND}\ PATH=${WEBRTC_PATH}${PREFIX_NEWLINE}) -file(APPEND ${PREFIX_FILENAME} ${PREFIX_COMMAND}\ PYTHONPATH=${CHROMIUM_PYTHONPATH}${PREFIX_NEWLINE}) -file(APPEND ${PREFIX_FILENAME} ${PREFIX_COMMAND}\ DEPOT_TOOLS_WIN_TOOLCHAIN=0${PREFIX_NEWLINE}) -file(APPEND ${PREFIX_FILENAME} ${PREFIX_COMMAND}\ DEPOT_TOOLS_UPDATE=0${PREFIX_NEWLINE}) -file(APPEND ${PREFIX_FILENAME} ${PREFIX_EVAL}${PREFIX_NEWLINE}) - -# -# Retrieve WebRTC source code -# -set(GCLIENT_CONFIG_COMMAND ${DEPOTTOOLS_GCLIENT_EXECUTABLE} config --name src https://chromium.googlesource.com/external/webrtc.git) +include(LibWebRTCPrefix) +include(LibWebRTCConfig) set(GCLIENT_SYNC_COMMAND ${DEPOTTOOLS_GCLIENT_EXECUTABLE} sync - --revision ${LIBWEBRTC_WEBRTC_REVISION} -n -D) + --revision ${LIBWEBRTC_WEBRTC_REVISION} -D) set(RETRIEVE_SYSROOT_COMMAND echo) if (UNIX AND NOT APPLE) @@ -70,9 +19,9 @@ ExternalProject_Add(webrtc-src SOURCE_DIR ${CMAKE_BINARY_DIR} DOWNLOAD_DIR ${CMAKE_BINARY_DIR} - DOWNLOAD_COMMAND ${PREFIX_EXECUTE} ${GCLIENT_CONFIG_COMMAND} - UPDATE_COMMAND ${PREFIX_EXECUTE} ${GCLIENT_SYNC_COMMAND} - CONFIGURE_COMMAND ${PREFIX_EXECUTE} ${UPDATE_CLANG_COMMAND} + #DOWNLOAD_COMMAND ${PREFIX_EXECUTE} ${GCLIENT_CONFIG_COMMAND} + DOWNLOAD_COMMAND ${PREFIX_EXECUTE} ${GCLIENT_SYNC_COMMAND} + UPDATE_COMMAND ${PREFIX_EXECUTE} ${UPDATE_CLANG_COMMAND} BUILD_COMMAND ${RETRIEVE_SYSROOT_COMMAND} INSTALL_COMMAND "" @@ -104,7 +53,7 @@ add_dependencies(webrtc-buildtools webrtc-src) # # Generate build files # -set(LIBWEBRTC_GEN_ARGS use_gold=false) +set(LIBWEBRTC_GEN_ARGS use_gold=false target_cpu=\\"${TARGET_CPU}\\" target_os=\\"${TARGET_OS}\\") if (NOT CMAKE_BUILD_TYPE MATCHES DEBUG) set(LIBWEBRTC_GEN_ARGS ${LIBWEBRTC_GEN_ARGS} is_debug=false) @@ -174,4 +123,5 @@ ExternalProject_Add(libwebrtc CMAKE_ARGS -DCMAKE_INSTALL_PREFIX=${CMAKE_BINARY_DIR} -DLIBWEBRTC_INCLUDE_DIR:STRING=${CMAKE_BINARY_DIR}/src/webrtc - -DLIBWEBRTC_OUTPUT_DIR:PATH=${CMAKE_BINARY_DIR}/src/out/Default) \ No newline at end of file + -DLIBWEBRTC_OUTPUT_DIR:PATH=${CMAKE_BINARY_DIR}/src/out/Default + -DTARGET_OS:STRING=${TARGET_OS}) \ No newline at end of file diff --git a/Targets/libwebrtc/CMakeLists.txt b/Targets/libwebrtc/CMakeLists.txt index e784d6d..9199f23 100644 --- a/Targets/libwebrtc/CMakeLists.txt +++ b/Targets/libwebrtc/CMakeLists.txt @@ -27,11 +27,16 @@ file(GLOB_RECURSE LIBWEBRTC_OBJ_EXCLUDED list(LENGTH LIBWEBRTC_OBJ_EXCLUDED LIBWEBRTC_OBJ_EXCLUDED_LEN) -if(${LIBWEBRTC_OBJ_EXCLUDED_LEN} GREATER "0") +if (${LIBWEBRTC_OBJ_EXCLUDED_LEN} GREATER "0") list(REMOVE_ITEM LIBWEBRTC_OBJ_FILES ${LIBWEBRTC_OBJ_EXCLUDED}) -endif() +endif () -add_library(webrtc STATIC ${LIBWEBRTC_OBJ_FILES}) +if (TARGET_OS STREQUAL "android") + set(ANDROID_NDK ${CMAKE_INSTALL_PREFIX}/src/third_party/android_tools/ndk) + add_library(webrtc SHARED ${LIBWEBRTC_OBJ_FILES}) +else () + add_library(webrtc STATIC ${LIBWEBRTC_OBJ_FILES}) +endif () set_source_files_properties(${LIBWEBRTC_OBJ_FILES} PROPERTIES EXTERNAL_OBJECT true