【问题标题】:How to import third party library in GN?如何在 GN 中导入第三方库?
【发布时间】:2020-03-24 01:26:48
【问题描述】:

我的一个项目是由 gn+ninja 构建的。 我想使用平面缓冲区https://github.com/dvidelabs/flatcc,但它是用cmake编写的。

因为我的项目应该建立在旧的 red hat 6 上,所以没有合适的 cmake 版本来构建 flatcc。 将它作为我项目子目录的一部分导入并使用 gn 构建的更好方法是什么。

【问题讨论】:

    标签: gn


    【解决方案1】:

    在这里查看我的答案:https://stackoverflow.com/a/63326374/12529885

    如果有.so二进制文件,使用上面的脚本,否则只能使用static_libraryshared_library作为源代码目标导入。

    例如

    # RocksDB 
    #--------------------------
    import("//gn_build/platform_support.gni") ## variable SSE42 here. 
    
    config("rocksdb_export") {
        include_dirs = ["rocksdb/include"]
        visibility = [":rocksdb"]
    }
    config("rocksdb_build") {
        defines = [
            "ROCKSDB_SUPPORT_THREAD_LOCAL",  # HAVE_THREAD_LOCAL
            # "NUMA",  # build with NUMA policy support(numactl-devel)
            "TBB",   # build with Threading Building Blocks (TBB)
            "ROCKSDB_USE_RTTI",
            "ZSTD",
            "GFLAGS=1"
        ]
    
        if (is_win) {
            defines += ["ROCKSDB_WINDOWS_UTF8_FILENAMES", "WIN32", "OS_WIN", "_MBCS", "WIN64", "NOMINMAX"]
            # defines += ["ROCKSDB_DLL", "ROCKSDB_LIBRARY_EXPORTS"]
            libs = ["shlwapi.lib", "rpcrt4.lib"]
            cflags_cc = ["/wd4127", "/wd4800", "/wd4996", 
                "/wd4351", "/wd4100", "/wd4204", "/wd4324"]
        }else {
            defines += ["ROCKSDB_PLATFORM_POSIX", "ROCKSDB_LIB_IO_POSIX"]
        }
    
        if (is_linux) {
            defines += [
                "OS_LINUX",
                "ROCKSDB_PTHREAD_ADAPTIVE_MUTEX",
                "ROCKSDB_SCHED_GETCPU_PRESENT",
                "ROCKSDB_AUXV_GETAUXVAL_PRESENT",
                "ROCKSDB_RANGESYNC_PRESENT",
            ]
            if (!is_llvm) {
                cflags_cc = ["-fno-builtin-memcmp"]
            }
        }
    
        if (SSE42) {
            defines += ["HAVE_SSE42", "HAVE_PCLMUL"]
        }
    
        include_dirs = ["rocksdb"]
    }
    
    static_library("rocksdb") {
        configs += [":rocksdb_build"]
        slist = read_file("rocksdb-master.gn_helper", "scope")
    
        base = "rocksdb"
        include_dirs = ["$base"]
        sources = slist.SOURCES
        base_pth = rebase_path("$base")
        
        if (is_win) {
            sources += slist.PORTWIN32
        }
    
        if (is_linux) {
            sources += slist.PORTLINUX
        }
    
        #Enable folly mutex
        include_dirs += ["$base/third-party/folly"]
        sources += slist.FOLLY_DISTRIBUTED_MUTEX
        #End folly mutex
    
        deps = [":zstd_static", ":gflags"]
        public_deps = [":tbb"]
        public_configs = [":rocksdb_export"]
    }
    

    文件 rocksdb-master.gn_helper

    SOURCES = [
        "rocksdb/cache/cache.cc",
        "rocksdb/cache/clock_cache.cc",
        ...
    ]
    
    PORTWIN32 = [
        "rocksdb/port/win/io_win.cc",
        "rocksdb/port/win/env_win.cc",
        ...
    ]
    ...
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-07-22
      • 2023-01-22
      • 1970-01-01
      • 2016-11-06
      相关资源
      最近更新 更多