emscripten-core / emscripten-core/emscripten

emcmake doesn't work with freetype 2.12.1 port

Open
#17,007 6 comments 0 reactions 0 assignees View on GitHub
Dominant language
C++
Stars
27.6k
Forks
3.6k
Avg merge
1d 1h
Merged PRs (30d)
105

Description

I'm working on an updated freetype port to update it to upstream's 2.12.1 and it doesn't seem to be able to compile with either emcmake, emmake, or by updating the file list in the ports file.

For cmake, it doesn't consistently find fcntl.h or unistd.h as a port. It sometimes does work - I believe that it's the port compilation order.

I've confirmed that they're there in upstream/emscripten. cmake works just fine without the emcmake component or by compiling it with emcmake + emmake. I've tried manually including the path with EO_SOURCE_DIR, but no luck.

Please include the following in your bug report:

**Version of emscripten/emsdk:**
3.1.8

**Failing command line in full:**
```
-DCMAKE_VERBOSE_MAKEFILE:BOOL=ON -DCMAKE_CXX_FLAGS="-pthread" -DCMAKE_C_FLAGS="-pthread" -DCMAKE_TOOLCHAIN_FILE=/local/emsdk/upstream/emscripten/cmake/Modules/Platform/Emscripten.cmake -DCMAKE_CROSSCOMPILING_EMULATOR=/local/emsdk/node/14.18.2_64bit/bin/node;--experimental-wasm-threads
-DCMAKE_BUILD_TYPE=Release

-- Could NOT find PkgConfig (missing: PKG_CONFIG_EXECUTABLE)
CMake Warning at builds/cmake/FindHarfBuzz.cmake:99 (message):
Required version (2.0.0) is higher than found version ()
Call Stack (most recent call first):
CMakeLists.txt:253 (find_package)

-- Found ZLIB: /local/emsdk/upstream/emscripten/cache/sysroot/lib/wasm32-emscripten/libz.a (found version "1.2.12")
-- Found PNG: /local/emsdk/upstream/emscripten/cache/sysroot/lib/wasm32-emscripten/libpng.a (found version "1.6.37")
-- Could NOT find BZip2 (missing: BZIP2_LIBRARIES BZIP2_INCLUDE_DIR)
-- Could NOT find BrotliDec (missing: BROTLIDEC_INCLUDE_DIRS BROTLIDEC_LIBRARIES)
-- Looking for unistd.h
-- Looking for unistd.h - not found
-- Looking for fcntl.h
-- Looking for fcntl.h - not found
-- Configuring done
-- Generating done
CMake Warning:
Manually-specified variables were not used by the project:

CMAKE_CXX_FLAGS
EO_SOURCE_DIR

-- Build files have been written to: /local/emsdk/upstream/emscripten/cache/ports-builds/freetype
/usr/bin/cmake -S/local/emsdk/upstream/emscripten/cache/ports/freetype/freetype-VER-2-12-1 -B/local/emsdk/upstream/emscripten/cache/ports-builds/freetype --check-build-system CMakeFiles/Makefile.cmake 0
/usr/bin/cmake -E cmake_progress_start /local/emsdk/upstream/emscripten/cache/ports-builds/freetype/CMakeFiles /local/emsdk/upstream/emscripten/cache/ports-builds/freetype/CMakeFiles/progress.marks
/usr/bin/make -f CMakeFiles/Makefile2 all
make[1]: Entering directory '/local/emsdk/upstream/emscripten/cache/ports-builds/freetype'
/usr/bin/make -f CMakeFiles/freetype.dir/build.make CMakeFiles/freetype.dir/depend
make[2]: Entering directory '/local/emsdk/upstream/emscripten/cache/ports-builds/freetype'
cd /local/emsdk/upstream/emscripten/cache/ports-builds/freetype && /usr/bin/cmake -E cmake_depends "Unix Makefiles" /local/emsdk/upstream/emscripten/cache/ports/freetype/freetype-VER-2-12-1 /local/emsdk/upstream/emscripten/cache/ports/freetype/freetype-VER-2-12-1 /local/emsdk/upstream/emscripten/cache/ports-builds/freetype /local/emsdk/upstream/emscripten/cache/ports-builds/freetype /local/emsdk/upstream/emscripten/cache/ports-builds/freetype/CMakeFiles/freetype.dir/DependInfo.cmake --color=
Dependee "/local/emsdk/upstream/emscripten/cache/ports-builds/freetype/CMakeFiles/freetype.dir/DependInfo.cmake" is newer than depender "/local/emsdk/upstream/emscripten/cache/ports-builds/freetype/CMakeFiles/freetype.dir/depend.internal".
Dependee "/local/emsdk/upstream/emscripten/cache/ports-builds/freetype/CMakeFiles/CMakeDirectoryInformation.cmake" is newer than depender "/local/emsdk/upstream/emscripten/cache/ports-builds/freetype/CMakeFiles/freetype.dir/depend.internal".
Scanning dependencies of target freetype
make[2]: Leaving directory '/local/emsdk/upstream/emscripten/cache/ports-builds/freetype'
/usr/bin/make -f CMakeFiles/freetype.dir/build.make CMakeFiles/freetype.dir/build
make[2]: Entering directory '/local/emsdk/upstream/emscripten/cache/ports-builds/freetype'

[ 95%] Building C object CMakeFiles/freetype.dir/builds/unix/ftsystem.c.o
/local/emsdk/upstream/emscripten/emcc -DFT2_BUILD_LIBRARY @CMakeFiles/freetype.dir/includes_C.rsp "-pthread" -O3 -DNDEBUG -fvisibility=hidden -o CMakeFiles/freetype.dir/builds/unix/ftsystem.c.o -c /local/emsdk/upstream/emscripten/cache/ports/freetype/freetype-VER-2-12-1/builds/unix/ftsystem.c
/local/emsdk/upstream/emscripten/cache/ports/freetype/freetype-VER-2-12-1/builds/unix/ftsystem.c:258:12: error: implicit declaration of function 'open' is invalid in C99 [-Werror,-Wimplicit-function-declaration]
file = open( filepathname, O_RDONLY );
^
/local/emsdk/upstream/emscripten/cache/ports/freetype/freetype-VER-2-12-1/builds/unix/ftsystem.c:258:32: error: use of undeclared identifier 'O_RDONLY'
file = open( filepathname, O_RDONLY );
^
/local/emsdk/upstream/emscripten/cache/ports/freetype/freetype-VER-2-12-1/builds/unix/ftsystem.c:341:22: error: implicit declaration of function 'read' is invalid in C99 [-Werror,-Wimplicit-function-declaration]
read_count = read( file,
^
/local/emsdk/upstream/emscripten/cache/ports/freetype/freetype-VER-2-12-1/builds/unix/ftsystem.c:341:22: note: did you mean 'fread'?
/local/emsdk/upstream/emscripten/cache/sysroot/include/stdio.h:106:8: note: 'fread' declared here
size_t fread(void *__restrict, size_t, size_t, FILE *__restrict);
^
/local/emsdk/upstream/emscripten/cache/ports/freetype/freetype-VER-2-12-1/builds/unix/ftsystem.c:362:5: error: implicit declaration of function 'close' is invalid in C99 [-Werror,-Wimplicit-function-declaration]
close( file );
^
4 errors generated.
emcc: error: '/local/emsdk/upstream/bin/clang -target wasm32-unknown-emscripten -D__EMSCRIPTEN_SHARED_MEMORY__=1 -DEMSCRIPTEN -D__EMSCRIPTEN_major__=3 -D__EMSCRIPTEN_minor__=1 -D__EMSCRIPTEN_tiny__=8 -fignore-exceptions -mllvm -combiner-global-alias-analysis=false -mllvm -enable-emscripten-sjlj -mllvm -disable-lsr -Werror=implicit-function-declaration -Xclang -iwithsysroot/include/SDL --sysroot=/local/emsdk/upstream/emscripten/cache/sysroot -Xclang -iwithsysroot/include/compat -DFT2_BUILD_LIBRARY -I/local/emsdk/upstream/emscripten/cache/ports-builds/freetype/include -I/local/emsdk/upstream/emscripten/cache/ports/freetype/freetype-VER-2-12-1/include -I/local/emsdk/upstream/emscripten/cache/ports-builds/freetype/include/freetype/config -I/local/emsdk/upstream/emscripten/cache/sysroot/include -pthread -O3 -DNDEBUG -fvisibility=hidden -c -matomics -mbulk-memory /local/emsdk/upstream/emscripten/cache/ports/freetype/freetype-VER-2-12-1/builds/unix/ftsystem.c -o CMakeFiles/freetype.dir/builds/unix/ftsystem.c.o' failed (returned 1)

For comparison, using the non-port emcmake/emmake works fine.

emcmake cmake -B target -S freetype-2.12.1 -DEO_SOURCE_DIR:PATH=/local/emsdk/upstream/emscripten/system/lib/libc/musl/include/ -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX=/local/emsdk/upstream/emscripten/cache/ports-builds/freetype -DCMAKE_VERBOSE_MAKEFILE:BOOL=ON -DCMAKE_CXX_FLAGS="-pthread" -DCMAKE_C_FLAGS="-pthread" -DCMAKE_TOOLCHAIN_FILE=/local/emsdk/upstream/emscripten/cmake/Modules/Platform/Emscripten.cmake -DCMAKE_CROSSCOMPILING_EMULATOR=/local/emsdk/node/14.18.2_64bit/bin/node;--experimental-wasm-threadsconfigure: cmake -B target -S freetype-2.12.1 -DEO_SOURCE_DIR:PATH=/local/emsdk/upstream/emscripten/system/lib/libc/musl/include/ -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX=/local/emsdk/upstream/emscripten/cache/ports-builds/freetype -DCMAKE_VERBOSE_MAKEFILE:BOOL=ON -DCMAKE_CXX_FLAGS=-pthread -DCMAKE_C_FLAGS=-pthread -DCMAKE_TOOLCHAIN_FILE=/local/emsdk/upstream/emscripten/cmake/Modules/Platform/Emscripten.cmake -DCMAKE_CROSSCOMPILING_EMULATOR=/local/emsdk/node/14.18.2_64bit/bin/node
-- Found PkgConfig: /usr/bin/pkg-config (found version "0.29.2")
CMake Warning at builds/cmake/FindHarfBuzz.cmake:99 (message):
Required version (2.0.0) is higher than found version ()
Call Stack (most recent call first):
CMakeLists.txt:253 (find_package)

-- Found ZLIB: /local/emsdk/upstream/emscripten/cache/sysroot/lib/wasm32-emscripten/libz.a (found version "1.2.12")
-- Found PNG: /local/emsdk/upstream/emscripten/cache/sysroot/lib/wasm32-emscripten/libpng.a (found version "1.6.37")
-- Could NOT find BZip2 (missing: BZIP2_LIBRARIES BZIP2_INCLUDE_DIR)
-- Checking for module 'bzip2'
-- No package 'bzip2' found
-- Could NOT find BrotliDec (missing: BROTLIDEC_INCLUDE_DIRS BROTLIDEC_LIBRARIES)
-- Looking for unistd.h
-- Looking for unistd.h - found
-- Looking for fcntl.h
-- Looking for fcntl.h - found
-- Configuring done
-- Generating done
CMake Warning:
Manually-specified variables were not used by the project:

CMAKE_CXX_FLAGS
EO_SOURCE_DIR

-- Build files have been written to: target
$ emmake
emmake is a helper for make, setting various environment
variables so that emcc etc. are used. Typical usage:

emmake make [FLAGS]

(but you can run any command instead of make)
$ emmake make -C target
make: make

[ 95%] Building C object CMakeFiles/freetype.dir/builds/unix/ftsystem.c.o
[ 97%] Building C object CMakeFiles/freetype.dir/src/base/ftdebug.c.o
[100%] Linking C static library libfreetype.a
[100%] Built target freetype
```

Contributor guide

Open the contributing guide

Assessment

This issue has not been assessed yet.

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.