爲WebRTC引入libuv-編譯

我目前僅僅在Mac上測試過而已(編譯了它所有的測試Demo),需要編譯的文件是參考它裏面其他的編譯腳本寫的,所以就是以gn格式抄一遍而已。

  • 編譯靜態庫libuv,並public了它的頭文件目錄
  • 寫了一個可執行程序的模板,可以編譯所有的測試Demo
  • 目前僅僅在Mac平臺測試了一下可行而已,其他平臺參考改一下就好了
#----------------------------------------------------
# Author: [email protected]
# Time  : Mon Mar  4 19:09:25 CST 2019
#----------------------------------------------------

# platform: win/mac/linux

config("libuv_public_config") {
    include_dirs = [ "include" ]
}

static_library("libuv") {
  sources = [
    "src/fs-poll.c",
    "src/heap-inl.h",
    "src/idna.c",
    "src/idna.h",
    "src/inet.c",
    "src/queue.h",
    "src/strscpy.c",
    "src/strscpy.h",
    "src/threadpool.c",
    "src/timer.c",
    "src/uv-common.c",
    "src/uv-common.h",
    "src/uv-data-getter-setters.c",
    "src/version.c",
  ]

  defines = []

  include_dirs = [
    "include",
    "src",
  ]

  cflags = []

  public_configs = [ ":libuv_public_config" ]

  if (is_win) {
    defines += [
      "_LARGEFILE_SOURCE",
      "_FILE_OFFSET_BITS=64",
      "_WIN32_WINNT=0x0600",
      "_GNU_SOURCE",
    ]

    sources += [
      "src/win/thread.c",
      "src/win/async.c",
      "src/win/process.c",
      "src/win/pipe.c",
      "src/win/util.c",
      "src/win/loop-watcher.c",
      "src/win/handle.c",
      "src/win/poll.c",
      "src/win/detect-wakeup.c",
      "src/win/udp.c",
      "src/win/fs.c",
      "src/win/process-stdio.c",
      "src/win/winsock.c",
      "src/win/core.c",
      "src/win/winapi.c",
      "src/win/snprintf.c",
      "src/win/tcp.c",
      "src/win/getaddrinfo.c",
      "src/win/error.c",
      "src/win/getnameinfo.c",
      "src/win/tty.c",
      "src/win/fs-event.c",
      "src/win/signal.c",
      "src/win/dl.c",
      "src/win/stream.c",
    ]
  } else if (is_mac || is_linux) {
    sources += [
      "src/unix/async.c",
      "src/unix/core.c",
      "src/unix/dl.c",
      "src/unix/fs.c",
      "src/unix/getaddrinfo.c",
      "src/unix/getnameinfo.c",
      "src/unix/internal.h",
      "src/unix/loop.c",
      "src/unix/loop-watcher.c",
      "src/unix/pipe.c",
      "src/unix/poll.c",
      "src/unix/process.c",
      "src/unix/signal.c",
      "src/unix/stream.c",
      "src/unix/tcp.c",
      "src/unix/thread.c",
      "src/unix/tty.c",
      "src/unix/udp.c",
    ]

    if (is_mac) {
      defines += [
        "_DARWIN_USE_64_BIT_INODE=1",
        "_DARWIN_UNLIMITED_SELECT=1",
      ]

      sources += [
        "src/unix/darwin.c",
        "src/unix/fsevents.c",
        "src/unix/proctitle.c",
        "src/unix/darwin-proctitle.c",
        "src/unix/kqueue.c",
        "src/unix/bsd-ifaddrs.c",
      ]
    } else if (is_linux) {
      defines += [
        "_POSIX_C_SOURCE=200112",
        "_GNU_SOURCE",
      ]

      sources += [
        "src/unix/linux-core.c",
        "src/unix/linux-inotify.c",
        "src/unix/linux-syscalls.c",
        "src/unix/procfs-exepath.c",
        "src/unix/sysinfo-loadavg.c",
        "src/unix/sysinfo-memory.c",
      ]
    }
  }

  deps = [
    "//webrtc/system_wrappers",
    "//webrtc/system_wrappers:system_wrappers_default",
  ]
}

template("libuv_executable") {
    target("executable", target_name) {
        forward_variables_from(invoker, "*", [ "sources" ])
        sources = invoker.sources
        deps = [ ":libuv" ]
    }
}

libuv_executable("uv-pipe-echo-server") { sources = [ "docs/code/pipe-echo-server/main.c" ] }
libuv_executable("uv-locks") { sources = [ "docs/code/locks/main.c" ] }
libuv_executable("uv-helloworld") { sources = [ "docs/code/helloworld/main.c" ] }
libuv_executable("uv-thread-create") { sources = [ "docs/code/thread-create/main.c" ] }
libuv_executable("uv-detach") { sources = [ "docs/code/detach/main.c" ] }
libuv_executable("uv-tty") { sources = [ "docs/code/tty/main.c" ] }
libuv_executable("uv-uvstop") { sources = [ "docs/code/uvstop/main.c" ] }
libuv_executable("uv-progress") { sources = [ "docs/code/progress/main.c" ] }
libuv_executable("uv-ref-timer") { sources = [ "docs/code/ref-timer/main.c" ] }
libuv_executable("uv-uvwget") { sources = [ "docs/code/uvwget/main.c" ] }
libuv_executable("uv-plugin") { sources = [ "docs/code/plugin/main.c" ] }
libuv_executable("uv-tcp-echo-server") { sources = [ "docs/code/tcp-echo-server/main.c" ] }
libuv_executable("uv-queue-cancel") { sources = [ "docs/code/queue-cancel/main.c" ] }
libuv_executable("uv-cgi") { sources = [ "docs/code/cgi/main.c" ] }
libuv_executable("uv-idle-compute") { sources = [ "docs/code/idle-compute/main.c" ] }
libuv_executable("uv-udp-dhcp") { sources = [ "docs/code/udp-dhcp/main.c" ] }
libuv_executable("uv-idle-basic") { sources = [ "docs/code/idle-basic/main.c" ] }
libuv_executable("uv-queue-work") { sources = [ "docs/code/queue-work/main.c" ] }
libuv_executable("uv-tty-gravity") { sources = [ "docs/code/tty-gravity/main.c" ] }
libuv_executable("uv-uvtee") { sources = [ "docs/code/uvtee/main.c" ] }
libuv_executable("uv-multi-echo-server") { sources = [ "docs/code/multi-echo-server/main.c" ] }
libuv_executable("uv-uvcat") { sources = [ "docs/code/uvcat/main.c" ] }
libuv_executable("uv-dns") { sources = [ "docs/code/dns/main.c" ] }
libuv_executable("uv-proc-streams") { sources = [ "docs/code/proc-streams/main.c" ] }
libuv_executable("uv-signal") { sources = [ "docs/code/signal/main.c" ] }
libuv_executable("uv-spawn") { sources = [ "docs/code/spawn/main.c" ] }
libuv_executable("uv-onchange") { sources = [ "docs/code/onchange/main.c" ] }
libuv_executable("uv-interfaces") { sources = [ "docs/code/interfaces/main.c" ] }
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章