Skip to content

编译wasm程序没有引入依赖的头文件路径 #6556

@hotaery

Description

@hotaery

Xmake 版本

3.0.0

操作系统版本和架构

Debian 6.1.124-1

描述问题

openssl依赖已经安装完毕

$ cat build/.conan/openssl/3.5.0#62d21a127982d5ddc42a83cffc147a4b/conanbuildinfo_openssl.xmake.lua
{
  Emscripten_wasm_Release =
  {
    includedirs    = {".conan2/p/b/opens307b88b6834d8/p/include"},
    linkdirs       = {".conan2/p/b/opens307b88b6834d8/p/lib"},
    links          = {"ssl", "crypto"},
    frameworkdirs  = {},
    frameworks     = {},
    syslinks       = {},
    defines        = {},
    cxxflags       = {},
    cflags         = {},
    shflags        = {},
    ldflags        = {},
    __bindirs      = {".conan2/p/b/opens307b88b6834d8/p/bin"},
    __resdirs      = {},
    __srcdirs      = {}
  }
}

构建的时候,如下日志

[ 23%]: cache compiling.debug main.cpp
emcc -c -g -O0 -o build/.objs/rsa_example/wasm/wasm/debug/main.cpp.o main.cpp
error: @programdir/core/main.lua:329: @programdir/actions/build/main.lua:146: @programdir/modules/async/runjobs.lua:331: @programdir/modules/private/action/build/object.lua:100: @programdir/modules/core/tools/gcc.lua:1035: main.cpp:1:10: fatal error: 'openssl/rsa.h' file not found
    1 | #include <openssl/rsa.h>
      |          ^~~~~~~~~~~~~~~
1 error generated.
stack traceback:
    [C]: in function 'error'
    [@programdir/core/base/os.lua:1075]:
    [@programdir/modules/core/tools/gcc.lua:1035]: in function 'catch'
    [@programdir/core/sandbox/modules/try.lua:123]: in function 'try'
    [@programdir/modules/core/tools/gcc.lua:976]:
    [C]: in function 'xpcall'
    [@programdir/core/base/utils.lua:246]:
    [@programdir/core/tool/compiler.lua:288]: in function 'compile'
    [@programdir/modules/private/action/build/object.lua:100]: in function 'script'
    [@programdir/modules/private/action/build/object.lua:131]: in function 'build_object'
    [@programdir/modules/private/action/build/object.lua:171]: in function 'jobfunc'
    [@programdir/modules/async/runjobs.lua:247]:
    [C]: in function 'xpcall'
    [@programdir/core/base/utils.lua:246]: in function 'trycall'
    [@programdir/core/sandbox/modules/try.lua:117]: in function 'try'
    [@programdir/modules/async/runjobs.lua:230]: in function 'cotask'
    [@programdir/core/base/scheduler.lua:406]:

stack traceback:
        [C]: in function 'error'
        @programdir/core/base/os.lua:1075: in function 'os.raiselevel'
        (...tail calls...)
        @programdir/core/main.lua:329: in upvalue 'cotask'
        @programdir/core/base/scheduler.lua:406: in function <@programdir/core/base/scheduler.lua:399>

期待的结果

期待在使用emcc编译的时候应该带上-I,引入依赖的头文件路径

工程配置

local emsdk = os.getenv("EMSDK")
local emsdk_cmaketoolchain = path.join(emsdk, "upstream", "emscripten", "cmake", "Modules", "Platform", "Emscripten.cmake")

add_requires("conan::openssl/3.5.0#62d21a127982d5ddc42a83cffc147a4b", {
    configs = {
        alias = "openssl",
        options = {
            "openssl/*:no_zlib=True"
        },
        conf = {
            "tools.build:compiler_executables={'c':'emcc', 'cpp':'em++'}",
            "tools.cmake.cmaketoolchain:user_toolchain=[" .. emsdk_cmaketoolchain .. "]",
        }
    }
})
add_rules("mode.debug", "mode.release")

target("rsa_example")
    set_kind("binary")
    add_files("main.cpp")
    add_packages("openssl")

附加信息和错误日志

配置的日志

$ xmake f -p wasm -a wasm -vD -y -m debug
checking for emsdk directory ... emsdk
checking for emcc ... emcc
checking for git ... /usr/bin/git
checking for gzip ... /usr/bin/gzip
checking for tar ... /usr/bin/tar
checking for ping ... /usr/bin/ping
pinging the host(gitlab.com) ... 4 ms
pinging the host(github.com) ... 40 ms
pinging the host(gitee.com) ... 56 ms
finding openssl/3.5.0#62d21a127982d5ddc42a83cffc147a4b from conan ..
checking for conan::openssl/3.5.0#62d21a127982d5ddc42a83cffc147a4b ... no
installing openssl/3.5.0#62d21a127982d5ddc42a83cffc147a4b from conan ..
checking for conan ... /usr/bin/conan
/usr/bin/conan config install /opt/local-path-provisioner/workspace/harry.wongzl/xmake-v3.0.0/install/share/xmake/scripts/conan
generate /opt/local-path-provisioner/workspace/harry.wongzl/examples/wasm-examples/openssl_wasm/build/.conan/openssl/3.5.0#62d21a127982d5ddc42a83cffc147a4b/conanfile.txt ..
checking for gcc ... /usr/bin/gcc
checking for the c compiler (cc) ... gcc
checking for /usr/bin/gcc ... ok
/usr/bin/conan install . -g XmakeGenerator --profile:build=profile_build.txt --profile:host=profile_host.txt --build=missing -c "tools.build:compiler_executables={'c':'emcc', 'cpp':'em++'}" -c tools.cmake.cmaketoolchain:user_toolchain=[Emscripten.cmake]

======== Input profiles ========
Profile host:
[settings]
arch=wasm
build_type=Release
compiler=gcc
compiler.cppstd=gnu17
compiler.libcxx=libstdc++11
compiler.version=12
os=Emscripten
[conf]
tools.build:compiler_executables={'c': 'emcc', 'cpp': 'em++'}
tools.cmake.cmaketoolchain:user_toolchain=[Emscripten.cmake]

Profile build:
[settings]
arch=x86_64
build_type=Release
compiler=gcc
compiler.cppstd=gnu17
compiler.libcxx=libstdc++11
compiler.version=12
os=Linux


======== Computing dependency graph ========
Graph root
    conanfile.txt: wasm-examples/openssl_wasm/build/.conan/openssl/3.5.0#62d21a127982d5ddc42a83cffc147a4b/conanfile.txt
Requirements
    openssl/3.5.0#62d21a127982d5ddc42a83cffc147a4b - Cache

======== Computing necessary packages ========
Requirements
    openssl/3.5.0#62d21a127982d5ddc42a83cffc147a4b:edf1e76789aeaca07d645344eaacb022f85ee784#ccfbd38fbcfdcea12cbf61be25ea6c72 - Cache

======== Installing packages ========
openssl/3.5.0: Already installed! (1 of 1)

======== Finalizing install (deploy, generators) ========
conanfile.txt: Writing generators to examples/wasm-examples/openssl_wasm/build/.conan/openssl/3.5.0#62d21a127982d5ddc42a83cffc147a4b
conanfile.txt: Generator 'XmakeGenerator' calling 'generate()'
XmakeGenerator: generating build info ..
openssl {
  Emscripten_wasm_Release =
  {
    includedirs    = {".conan2/p/b/opens307b88b6834d8/p/include"},
    linkdirs       = {".conan2/p/b/opens307b88b6834d8/p/lib"},
    links          = {"ssl", "crypto"},
    frameworkdirs  = {},
    frameworks     = {},
    syslinks       = {},
    defines        = {},
    cxxflags       = {},
    cflags         = {},
    shflags        = {},
    ldflags        = {},
    __bindirs      = {".conan2/p/b/opens307b88b6834d8/p/bin"},
    __resdirs      = {},
    __srcdirs      = {}
  }
}
{
  Emscripten_wasm_Release =
  {
    includedirs    = {".conan2/p/b/opens307b88b6834d8/p/include"},
    linkdirs       = {".conan2/p/b/opens307b88b6834d8/p/lib"},
    links          = {"ssl", "crypto"},
    frameworkdirs  = {},
    frameworks     = {},
    syslinks       = {},
    defines        = {},
    cxxflags       = {},
    cflags         = {},
    shflags        = {},
    ldflags        = {},
    __bindirs      = {".conan2/p/b/opens307b88b6834d8/p/bin"},
    __resdirs      = {},
    __srcdirs      = {},
    __dep_names    = {}
  }
}
conanfile.txt: Generating aggregated env files
conanfile.txt: Generated aggregated env files: ['conanbuild.sh', 'conanrun.sh']
Install finished successfully
finding openssl/3.5.0#62d21a127982d5ddc42a83cffc147a4b from conan ..
checking for conan::openssl/3.5.0#62d21a127982d5ddc42a83cffc147a4b ... openssl/3.5.0#62d21a127982d5ddc42a83cffc147a4b
{
  linkdirs = ".conan2/p/b/opens307b88b6834d8/p/lib",
  static = true,
  sysincludedirs = ".conan2/p/b/opens307b88b6834d8/p/include",
  links = {
    "ssl",
    "crypto"
  },
  libfiles = {
    ".conan2/p/b/opens307b88b6834d8/p/lib/libcrypto.a",
    ".conan2/p/b/opens307b88b6834d8/p/lib/libssl.a"
  }
}

  => install conan::openssl/3.5.0#62d21a127982d5ddc42a83cffc147a4b latest .. ok
configure
{
    kind = static
    plat = wasm
    builddir = build
    ccache = true
    host = linux
    arch = wasm
    ndk_stdcxx = true
    emsdk =emsdk
    mode = debug
}
warning: we cannot get tool(cc) in toolchain(cross) with linux/x86_64, because it has been not checked yet!
warning: we cannot load toolchain(cross), because it has been not checked yet!

构建的日志

checking for emcc ... emcc
checking for the c++ compiler (cxx) ... emcc
checking for emcc ... ok
checking for flags (-fPIC) ... ok
> emcc "-fPIC"
checking for flags (-fvisibility-inlines-hidden) ... ok
> emcc "-fvisibility-inlines-hidden"
checking for flags (-O0) ... ok
> emcc "-O0"
[ 23%]: cache compiling.debug main.cpp
emcc -c -g -O0 -o build/.objs/rsa_example/wasm/wasm/debug/main.cpp.o main.cpp
checking for flags (-MMD -MF) ... ok
> emcc "-MMD" "-MF" "/dev/null"
checking for flags (-fdiagnostics-color=always) ... ok
> emcc "-fdiagnostics-color=always"
error: @programdir/core/main.lua:329: @programdir/actions/build/main.lua:146: @programdir/modules/async/runjobs.lua:331: @programdir/modules/private/action/build/object.lua:100: @programdir/modules/core/tools/gcc.lua:1035: main.cpp:1:10: fatal error: 'openssl/rsa.h' file not found
    1 | #include <openssl/rsa.h>
      |          ^~~~~~~~~~~~~~~
1 error generated.
stack traceback:
    [C]: in function 'error'
    [@programdir/core/base/os.lua:1075]:
    [@programdir/modules/core/tools/gcc.lua:1035]: in function 'catch'
    [@programdir/core/sandbox/modules/try.lua:123]: in function 'try'
    [@programdir/modules/core/tools/gcc.lua:976]:
    [C]: in function 'xpcall'
    [@programdir/core/base/utils.lua:246]:
    [@programdir/core/tool/compiler.lua:288]: in function 'compile'
    [@programdir/modules/private/action/build/object.lua:100]: in function 'script'
    [@programdir/modules/private/action/build/object.lua:131]: in function 'build_object'
    [@programdir/modules/private/action/build/object.lua:171]: in function 'jobfunc'
    [@programdir/modules/async/runjobs.lua:247]:
    [C]: in function 'xpcall'
    [@programdir/core/base/utils.lua:246]: in function 'trycall'
    [@programdir/core/sandbox/modules/try.lua:117]: in function 'try'
    [@programdir/modules/async/runjobs.lua:230]: in function 'cotask'
    [@programdir/core/base/scheduler.lua:406]:

stack traceback:
        [C]: in function 'error'
        @programdir/core/base/os.lua:1075: in function 'os.raiselevel'
        (...tail calls...)
        @programdir/core/main.lua:329: in upvalue 'cotask'
        @programdir/core/base/scheduler.lua:406: in function <@programdir/core/base/scheduler.lua:399>

Metadata

Metadata

Assignees

No one assigned

    Type

    No type

    Projects

    No projects

    Milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions