OP-TEE / optee_client

Normal World Client side of the TEE
Other
187 stars 233 forks source link

Build errors 3.20.0 #344

Closed phodina closed 1 year ago

phodina commented 1 year ago

Hi, I was attempting to build optee-client version 3.20.0 for musl-c PostmarketOS system and got the following errors:

>>> optee-client: Building pmos/optee-client 3.20.0-r0 (using abuild 3.10.0-r0) started Sat, 18 Feb 2023 13:46:19 +0000
>>> optee-client: Checking sanity of /home/pmos/build/APKBUILD...
>>> optee-client: Cleaning up srcdir
>>> optee-client: Cleaning up pkgdir
>>> optee-client: Fetching optee-client-3.20.0.tar.gz::https://github.com/OP-TEE/optee_client/archive/refs/tags/3.20.0.tar.gz
>>> optee-client: Fetching optee-client-3.20.0.tar.gz::https://github.com/OP-TEE/optee_client/archive/refs/tags/3.20.0.tar.gz
>>> optee-client: Checking sha512sums...
optee-client-3.20.0.tar.gz: OK
>>> optee-client: Unpacking /var/cache/distfiles/optee-client-3.20.0.tar.gz...
-- The C compiler identification is GNU 12.2.1
-- Detecting C compiler ABI info
-- Detecting C compiler ABI info - done
-- Check for working C compiler: /native/usr/lib/crossdirect/aarch64/gcc - skipped
-- Detecting C compile features
-- Detecting C compile features - done
-- Performing Test CMAKE_HAVE_LIBC_PTHREAD
-- Performing Test CMAKE_HAVE_LIBC_PTHREAD - Success
-- Found Threads: TRUE
-- Found PkgConfig: /usr/bin/pkg-config (found version "1.9.4")
-- Checking for module 'uuid'
--   Found uuid, version 1.6.2
-- Configuring done
-- Generating done
-- Build files have been written to: /home/pmos/build/src/optee_client-3.20.0/build
[1/32] Building C object libseteec/CMakeFiles/seteec.dir/src/se.c.o
[2/32] Building C object libteeacl/CMakeFiles/teeacl.dir/src/tee_uuid.c.o
[3/32] Building C object libteeacl/CMakeFiles/teeacl.dir/src/group.c.o
[4/32] Building C object libckteec/CMakeFiles/ckteec.dir/src/serialize_ck.c.o
[5/32] Building C object libckteec/CMakeFiles/ckteec.dir/src/serializer.c.o
[6/32] Building C object libckteec/CMakeFiles/ckteec.dir/src/pkcs11_token.c.o
[7/32] Building C object libckteec/CMakeFiles/ckteec.dir/src/pkcs11_processing.c.o
[8/32] Building C object libckteec/CMakeFiles/ckteec.dir/src/invoke_ta.c.o
[9/32] Building C object libckteec/CMakeFiles/ckteec.dir/src/ck_helpers.c.o
[10/32] Building C object libckteec/CMakeFiles/ckteec.dir/src/ck_debug.c.o
[11/32] Building C object libckteec/CMakeFiles/ckteec.dir/src/pkcs11_api.c.o
[12/32] Building C object tee-supplicant/CMakeFiles/tee-supplicant.dir/src/plugin.c.o
[13/32] Building C object tee-supplicant/CMakeFiles/tee-supplicant.dir/src/prof.c.o
[14/32] Building C object tee-supplicant/CMakeFiles/tee-supplicant.dir/src/tee_socket.c.o
[15/32] Building C object tee-supplicant/CMakeFiles/tee-supplicant.dir/src/teec_ta_load.c.o
[16/32] Building C object tee-supplicant/CMakeFiles/tee-supplicant.dir/src/tee_supplicant.c.o
[17/32] Building C object tee-supplicant/CMakeFiles/tee-supplicant.dir/src/tee_supp_fs.c.o
[18/32] Building C object tee-supplicant/CMakeFiles/tee-supplicant.dir/src/sha2.c.o
[19/32] Building C object tee-supplicant/CMakeFiles/tee-supplicant.dir/src/rpmb.c.o
[20/32] Building C object tee-supplicant/CMakeFiles/tee-supplicant.dir/src/hmac_sha2.c.o
[21/32] Building C object tee-supplicant/CMakeFiles/tee-supplicant.dir/src/handle.c.o
[22/32] Building C object libteec/CMakeFiles/teec.dir/src/teec_trace.c.o
[23/32] Building C object libteec/CMakeFiles/teec.dir/src/tee_client_api.c.o
ninja: job failed: ccache /native/usr/lib/crossdirect/aarch64/gcc -DBINARY_PREFIX=\"LT\" -D_GNU_SOURCE -Dteeacl_EXPORTS -I/home/pmos/build/src/optee_client-3.20.0/libteeacl/include -Os -fomit-frame-pointer -fPIC -Wall -Wbad-function-cast -Wcast-align -Werror-implicit-function-declaration -Wextra -Wfloat-equal -Wformat-nonliteral -Wformat-security -Wformat=2 -Winit-self -Wmissing-declarations -Wmissing-format-attribute -Wmissing-include-dirs -Wmissing-noreturn -Wmissing-prototypes -Wnested-externs -Wpointer-arith -Wshadow -Wstrict-prototypes -Wswitch-default -Wunsafe-loop-optimizations -Wwrite-strings -fPIC -Werror -MD -MT libteeacl/CMakeFiles/teeacl.dir/src/tee_uuid.c.o -MF libteeacl/CMakeFiles/teeacl.dir/src/tee_uuid.c.o.d -o libteeacl/CMakeFiles/teeacl.dir/src/tee_uuid.c.o -c /home/pmos/build/src/optee_client-3.20.0/libteeacl/src/tee_uuid.c
/home/pmos/build/src/optee_client-3.20.0/libteeacl/src/tee_uuid.c: In function 'teeacl_group_acl_uuid':
/home/pmos/build/src/optee_client-3.20.0/libteeacl/src/tee_uuid.c:13:9: error: variable 'g_uuid' has initializer but incomplete type
   13 |         uuid_t g_uuid = { 0 };
      |         ^~~~~~
/home/pmos/build/src/optee_client-3.20.0/libteeacl/src/tee_uuid.c:13:27: error: excess elements in struct initializer [-Werror]
   13 |         uuid_t g_uuid = { 0 };
      |                           ^
/home/pmos/build/src/optee_client-3.20.0/libteeacl/src/tee_uuid.c:13:27: note: (near initialization for 'g_uuid')
/home/pmos/build/src/optee_client-3.20.0/libteeacl/src/tee_uuid.c:13:16: error: storage size of 'g_uuid' isn't known
   13 |         uuid_t g_uuid = { 0 };
      |                ^~~~~~
/home/pmos/build/src/optee_client-3.20.0/libteeacl/src/tee_uuid.c:14:9: error: variable 'k_uuid' has initializer but incomplete type
   14 |         uuid_t k_uuid = { 0 };
      |         ^~~~~~
/home/pmos/build/src/optee_client-3.20.0/libteeacl/src/tee_uuid.c:14:27: error: excess elements in struct initializer [-Werror]
   14 |         uuid_t k_uuid = { 0 };
      |                           ^
/home/pmos/build/src/optee_client-3.20.0/libteeacl/src/tee_uuid.c:14:27: note: (near initialization for 'k_uuid')
/home/pmos/build/src/optee_client-3.20.0/libteeacl/src/tee_uuid.c:14:16: error: storage size of 'k_uuid' isn't known
   14 |         uuid_t k_uuid = { 0 };
      |                ^~~~~~
/home/pmos/build/src/optee_client-3.20.0/libteeacl/src/tee_uuid.c:24:14: error: implicit declaration of function 'uuid_parse'; did you mean 'uuid_make'? [-Werror=implicit-function-declaration]
   24 |         rv = uuid_parse(KERNEL_NAMESPACE, k_uuid);
      |              ^~~~~~~~~~
      |              uuid_make
/home/pmos/build/src/optee_client-3.20.0/libteeacl/src/tee_uuid.c:24:14: error: nested extern declaration of 'uuid_parse' [-Werror=nested-externs]
/home/pmos/build/src/optee_client-3.20.0/libteeacl/src/tee_uuid.c:30:9: error: implicit declaration of function 'uuid_generate_sha1' [-Werror=implicit-function-declaration]
   30 |         uuid_generate_sha1(g_uuid, k_uuid, gid_buf, gid_buf_len);
      |         ^~~~~~~~~~~~~~~~~~
/home/pmos/build/src/optee_client-3.20.0/libteeacl/src/tee_uuid.c:30:9: error: nested extern declaration of 'uuid_generate_sha1' [-Werror=nested-externs]
/home/pmos/build/src/optee_client-3.20.0/libteeacl/src/tee_uuid.c:33:9: error: implicit declaration of function 'uuid_unparse'; did you mean 'uuid_compare'? [-Werror=implicit-function-declaration]
   33 |         uuid_unparse(g_uuid, uuid_buf + gstr_len);
      |         ^~~~~~~~~~~~
      |         uuid_compare
/home/pmos/build/src/optee_client-3.20.0/libteeacl/src/tee_uuid.c:33:9: error: nested extern declaration of 'uuid_unparse' [-Werror=nested-externs]
/home/pmos/build/src/optee_client-3.20.0/libteeacl/src/tee_uuid.c:14:16: error: unused variable 'k_uuid' [-Werror=unused-variable]
   14 |         uuid_t k_uuid = { 0 };
      |                ^~~~~~
/home/pmos/build/src/optee_client-3.20.0/libteeacl/src/tee_uuid.c:13:16: error: unused variable 'g_uuid' [-Werror=unused-variable]
   13 |         uuid_t g_uuid = { 0 };
      |                ^~~~~~
cc1: all warnings being treated as errors
ninja: subcommand failed
>>> ERROR: optee-client: build failed

Build for 3.18.0 though works.

jforissier commented 1 year ago

Hello @phodina,

That's interesting... uuid_t is supposed to come from libuuid (util-linux), see here, and I would think that package is properly detected since you have these two lines in the log:

-- Checking for module 'uuid'
--   Found uuid, version 1.6.2

I suspect you build environment finds another uuid.h file than the one from libuuid. Perhaps linux/uuid.h? That one defines guid_t but not uuid_t. I recommend enabling a more verbose build, then re-run the compile line manually with -E added to show which header files get included.

phodina commented 1 year ago

Hi @jforissier I overcome the issue by using uuid directly from util-linux-dev package as you suggested. That way even the latest release builds.

It also exposes <uuid/uuid.h>.