From 79de9c27eefe5ab3b0263f850a2bf7e49c739480 Mon Sep 17 00:00:00 2001 From: stonesxd Date: Tue, 8 Feb 2022 16:22:52 +0800 Subject: [PATCH] add cross compiple for ohos Signed-off-by: stonesxd --- meson.build | 11 +++++-- meson_options.txt | 4 +-- ohos_cross.ini | 52 +++++++++++++++++++++++++++++++++ pkgconfig/expat.pc | 10 +++++++ pkgconfig/libdrm.pc | 9 ++++++ pkgconfig/zlib.pc | 13 +++++++++ src/egl/drivers/dri2/egl_dri2.c | 3 ++ src/egl/main/egldisplay.c | 1 + src/egl/main/egldisplay.h | 1 + src/egl/meson.build | 2 +- 10 files changed, 100 insertions(+), 6 deletions(-) create mode 100644 ohos_cross.ini create mode 100644 pkgconfig/expat.pc create mode 100644 pkgconfig/libdrm.pc create mode 100644 pkgconfig/zlib.pc diff --git a/meson.build b/meson.build index 0aea31260bb..35d621944ac 100644 --- a/meson.build +++ b/meson.build @@ -347,10 +347,11 @@ with_platform_x11 = _platforms.contains('x11') with_platform_wayland = _platforms.contains('wayland') with_platform_haiku = _platforms.contains('haiku') with_platform_windows = _platforms.contains('windows') +with_platform_ohos = _platforms.contains('ohos') with_glx = get_option('glx') if with_glx == 'auto' - if with_platform_android + if with_platform_android or with_platform_ohos with_glx = 'disabled' elif with_dri with_glx = 'dri' @@ -474,7 +475,7 @@ endif if with_egl _platforms += 'surfaceless' - if with_gbm and not with_platform_android + if with_gbm and not with_platform_android and not with_platform_ohos _platforms += 'drm' endif endif @@ -936,7 +937,7 @@ else pre_args += '-DEGL_NO_X11' gl_pkgconfig_c_flags += '-DEGL_NO_X11' endif -if with_gbm and not with_platform_android +if with_gbm and not with_platform_android and not with_platform_ohos pre_args += '-DHAVE_DRM_PLATFORM' endif if with_platform_windows @@ -974,6 +975,10 @@ if with_platform_haiku pre_args += '-DHAVE_HAIKU_PLATFORM' endif +if with_platform_ohos + pre_args += '-DHAVE_OHOS_PLATFORM' +endif + prog_python = import('python').find_installation('python3') has_mako = run_command( prog_python, '-c', diff --git a/meson_options.txt b/meson_options.txt index 32c7593ee8e..49c685bc4fc 100644 --- a/meson_options.txt +++ b/meson_options.txt @@ -23,7 +23,7 @@ option( type : 'array', value : ['auto'], choices : [ - 'auto', 'x11', 'wayland', 'haiku', 'android', 'windows', + 'auto', 'x11', 'wayland', 'haiku', 'android', 'windows', 'ohos' ], description : 'window systems to support. If this is set to `auto`, all platforms applicable will be enabled.' ) @@ -33,7 +33,7 @@ option( value : 'auto', choices : [ 'auto', 'x11', 'wayland', 'haiku', 'android', 'windows', - 'surfaceless', 'drm', + 'surfaceless', 'drm', 'ohos' ], description : 'the window system EGL assumes for EGL_DEFAULT_DISPLAY', ) diff --git a/ohos_cross.ini b/ohos_cross.ini new file mode 100644 index 00000000000..5981861ea2c --- /dev/null +++ b/ohos_cross.ini @@ -0,0 +1,52 @@ +[properties] + c_args = [ + '-march=armv7-a', + '-mfloat-abi=softfp', + '-mtune=generic-armv7-a', + '-mfpu=neon', + '-mthumb', + '-fPIC', + '--target=arm-linux-ohos', + '--sysroot=/home/stone/code/openhm/dev_master/out/rk3568/obj/third_party/musl', + ] + + cpp_args = [ + '-march=armv7-a', + '--target=arm-linux-ohos', + '-fPIC', + '--sysroot=/home/stone/code/openhm/dev_master/out/rk3568/obj/third_party/musl', + ] + + c_link_args = [ + '-march=armv7-a', + '--target=arm-linux-ohos', + '-fPIC', + '--sysroot=/home/stone/code/openhm/dev_master/out/rk3568/obj/third_party/musl', + '-L/home/stone/code/openhm/dev_master/out/rk3568/obj/third_party/musl/usr/lib/arm-linux-ohos', + '--rtlib=compiler-rt', + ] + + cpp_link_args = [ + '-march=armv7-a', + '--target=arm-linux-ohos', + '-fPIC', + '--sysroot=/home/stone/code/openhm/dev_master/out/rk3568/obj/third_party/musl', + '-L/home/stone/code/openhm/dev_master/out/rk3568/obj/third_party/musl/usr/lib/arm-linux-ohos', + '--rtlib=compiler-rt', + ] + needs_exe_wrapper = true + +[binaries] + ar = '/home/stone/code/openhm/dev_master/prebuilts/clang/ohos/linux-x86_64/llvm/bin/llvm-ar' + c = ['ccache', '/home/stone/code/openhm/dev_master/prebuilts/clang/ohos/linux-x86_64/llvm/bin/clang'] + cpp = ['ccache', '/home/stone/code/openhm/dev_master/prebuilts/clang/ohos/linux-x86_64/llvm/bin/clang++'] + c_ld= 'lld' + cpp_ld = 'lld' + strip = '/home/stone/code/openhm/dev_master/prebuilts/clang/ohos/linux-x86_64/llvm/bin/llvm-strip' + pkgconfig = ['env', 'PKG_CONFIG_LIBDIR=/home/stone/code/openhm/dev_master/third_party/mesa3d/pkgconfig', '/usr/bin/pkg-config'] + +[host_machine] + system = 'linux' + cpu_family = 'arm' + cpu = 'armv7' + endian = 'little' diff --git a/pkgconfig/expat.pc b/pkgconfig/expat.pc new file mode 100644 index 00000000000..55ae9ac473b --- /dev/null +++ b/pkgconfig/expat.pc @@ -0,0 +1,10 @@ +ohos_project_dir=/home/stone/code/openhm/dev_master +libdir=${ohos_project_dir}/out/rk3568/obj/third_party/expat +includedir=${ohos_project_dir}/third_party/expat/lib + +Name: expat +Version: 2.4.1 +Description: expat XML parser +URL: http://www.libexpat.org +Libs: -L${libdir} -lexpat +Cflags: -I${includedir} \ No newline at end of file diff --git a/pkgconfig/libdrm.pc b/pkgconfig/libdrm.pc new file mode 100644 index 00000000000..28af009ea0a --- /dev/null +++ b/pkgconfig/libdrm.pc @@ -0,0 +1,9 @@ +ohos_project_dir=/home/stone/code/openhm/dev_master +libdir=${ohos_project_dir}/out/rk3568/graphic/graphic_standard/ +includedir=${ohos_project_dir}/third_party/libdrm + +Name: libdrm +Description: Userspace interface to kernel DRM services +Version: 2.4.102 +Libs: -L${libdir} -ldrm +Cflags: -I${includedir} -I${includedir}/include/drm/ \ No newline at end of file diff --git a/pkgconfig/zlib.pc b/pkgconfig/zlib.pc new file mode 100644 index 00000000000..17d7ac84ce9 --- /dev/null +++ b/pkgconfig/zlib.pc @@ -0,0 +1,13 @@ +prefix=/home/stone/code/openhm/dev_master +exec_prefix=${prefix} +libdir=${prefix}/out/rk3568/obj/third_party/zlib +sharedlibdir=${libdir} +includedir=${prefix}/third_party/zlib + +Name: zlib +Description: zlib compression library +Version: 1.2.12 + +Requires: +Libs: -L${libdir} -L${sharedlibdir} -lz +Cflags: -I${includedir} \ No newline at end of file diff --git a/src/egl/drivers/dri2/egl_dri2.c b/src/egl/drivers/dri2/egl_dri2.c index d687533168b..dc73bd0619f 100644 --- a/src/egl/drivers/dri2/egl_dri2.c +++ b/src/egl/drivers/dri2/egl_dri2.c @@ -1186,6 +1186,9 @@ dri2_initialize(_EGLDisplay *disp) case _EGL_PLATFORM_ANDROID: ret = dri2_initialize_android(disp); break; + case _EGL_PLATFORM_OHOS: + // NEED add openharmony init for dri2 + break; default: unreachable("Callers ensure we cannot get here."); return EGL_FALSE; diff --git a/src/egl/main/egldisplay.c b/src/egl/main/egldisplay.c index 131fc22786f..b02d7f43ee0 100644 --- a/src/egl/main/egldisplay.c +++ b/src/egl/main/egldisplay.c @@ -85,6 +85,7 @@ static const struct { { _EGL_PLATFORM_SURFACELESS, "surfaceless" }, { _EGL_PLATFORM_DEVICE, "device" }, { _EGL_PLATFORM_WINDOWS, "windows" }, + { _EGL_PLATFORM_OHOS, "openharmony" }, }; diff --git a/src/egl/main/egldisplay.h b/src/egl/main/egldisplay.h index 0ee06a487c0..37ab5a7d872 100644 --- a/src/egl/main/egldisplay.h +++ b/src/egl/main/egldisplay.h @@ -53,6 +53,7 @@ enum _egl_platform_type { _EGL_PLATFORM_SURFACELESS, _EGL_PLATFORM_DEVICE, _EGL_PLATFORM_WINDOWS, + _EGL_PLATFORM_OHOS, _EGL_NUM_PLATFORMS, _EGL_INVALID_PLATFORM = -1 diff --git a/src/egl/meson.build b/src/egl/meson.build index 65faf607705..29a0e15ba97 100644 --- a/src/egl/meson.build +++ b/src/egl/meson.build @@ -106,7 +106,7 @@ if with_dri2 endif deps_for_egl += [dep_x11_xcb, dep_xcb_dri2, dep_xcb_xfixes] endif - if with_gbm and not with_platform_android + if with_gbm and not with_platform_android and not with_platform_ohos files_egl += files('drivers/dri2/platform_drm.c') link_for_egl += libgbm incs_for_egl += [inc_gbm, include_directories('../gbm/main')] -- Gitee