import os import platform import shutil from awtk_config_common import TKC_STATIC_LIBS from awtk_config_common import joinPath, toWholeArchive, genIdlAndDefEx, setEnvSpawn,genDllLinkFlags,copySharedLib OS_NAME = platform.system() def joinPath(root, subdir): return os.path.normpath(os.path.join(root, subdir)) def lcd_devices_is_egl(lcd_devices): if lcd_devices =='egl_for_fsl' or lcd_devices =='egl_for_x11' or lcd_devices =='egl_for_gbm' : return True return False CWD=os.path.normpath(os.path.abspath(os.path.dirname(__file__))); TK_LINUX_FB_ROOT = CWD TK_ROOT = joinPath(TK_LINUX_FB_ROOT, '../awtk') TK_SRC = joinPath(TK_ROOT, 'src') TK_3RD_ROOT = joinPath(TK_ROOT, '3rd') GTEST_ROOT = joinPath(TK_ROOT, '3rd/gtest/googletest') BUILD_DIR = joinPath(TK_LINUX_FB_ROOT, 'build') BIN_DIR = joinPath(TK_LINUX_FB_ROOT, 'bin') LIB_DIR = joinPath(TK_LINUX_FB_ROOT, 'lib') VAR_DIR = joinPath(BUILD_DIR, 'var') TK_DEMO_ROOT = joinPath(TK_ROOT, 'demos') LCD_DIR = joinPath(TK_LINUX_FB_ROOT, 'awtk-port/lcd_linux') INPUT_DIR = joinPath(TK_LINUX_FB_ROOT, 'awtk-port/input_thread') # lcd devices LCD_DEVICES='fb' # LCD_DEVICES='drm' # LCD_DEVICES='egl_for_fsl' # LCD_DEVICES='egl_for_x11' # LCD_DEVICES='egl_for_gbm' NANOVG_BACKEND='' VGCANVAS='NANOVG' #VGCANVAS='CAIRO' #VGCANVAS='NANOVG_PLUS' if LCD_DEVICES =='fb' or LCD_DEVICES =='drm' : LCD='LINUX_FB' NANOVG_BACKEND='AGGE' elif lcd_devices_is_egl(LCD_DEVICES) : LCD='FB_GL' NANOVG_BACKEND='GLES2' #INPUT_ENGINE='null' #INPUT_ENGINE='spinyin' #INPUT_ENGINE='t9' #INPUT_ENGINE='t9ext' INPUT_ENGINE='pinyin' COMMON_CCFLAGS=' -DHAS_STD_MALLOC -DHAS_STDIO -DHAS_FAST_MEMCPY -DWITH_VGCANVAS -DWITH_UNICODE_BREAK -DLINUX' COMMON_CCFLAGS=COMMON_CCFLAGS+' -DLOAD_ASSET_WITH_MMAP=1 -DWITH_SOCKET=1 ' COMMON_CCFLAGS=COMMON_CCFLAGS+' -DWITH_ASSET_LOADER -DWITH_FS_RES -DHAS_GET_TIME_US64=1 ' COMMON_CCFLAGS=COMMON_CCFLAGS+' -DSTBTT_STATIC -DSTB_IMAGE_STATIC -DWITH_STB_IMAGE -DWITH_STB_FONT -DWITH_TEXT_BIDI=1 ' COMMON_CCFLAGS=COMMON_CCFLAGS+' -DAPP_TYPE=APP_MOBILE -DWITH_FAST_LCD_PORTRAIT -DLINUX_FB ' #COMMON_CCFLAGS=COMMON_CCFLAGS+' -DENABLE_CUSTOM_KEYS=1 ' #COMMON_CCFLAGS=COMMON_CCFLAGS+' -DCUSTOM_KEYS_FILEPATH=\"asset://custom_keys.json\" ' if LCD_DEVICES =='fb' : COMMON_CCFLAGS=COMMON_CCFLAGS+' -DWITH_NANOVG_AGGE -DWITH_LINUX_FB ' elif LCD_DEVICES =='drm' : COMMON_CCFLAGS=COMMON_CCFLAGS+' -DWITH_NANOVG_AGGE -DWITH_LINUX_DRM ' elif lcd_devices_is_egl(LCD_DEVICES) : COMMON_CCFLAGS=COMMON_CCFLAGS+' -DWITH_GPU_GL -DWITH_GPU_GLES2 -DWITH_GPU -DWITH_LINUX_EGL ' if INPUT_ENGINE == 't9': COMMON_CCFLAGS = COMMON_CCFLAGS + ' -DWITH_IME_T9 ' elif INPUT_ENGINE == 't9ext' : COMMON_CCFLAGS = COMMON_CCFLAGS + ' -DWITH_IME_T9EXT' elif INPUT_ENGINE == 'pinyin' : COMMON_CCFLAGS = COMMON_CCFLAGS + ' -DWITH_IME_PINYIN ' elif INPUT_ENGINE == 'spinyin' : COMMON_CCFLAGS = COMMON_CCFLAGS + ' -DWITH_IME_SPINYIN ' elif INPUT_ENGINE == 'null' : COMMON_CCFLAGS = COMMON_CCFLAGS + ' -DWITH_IME_NULL ' GRAPHIC_BUFFER='default' #GRAPHIC_BUFFER='jzgpu' #if GRAPHIC_BUFFER == 'jzgpu': # COMMON_CCFLAGS=COMMON_CCFLAGS+' -DWITH_JZGPU' #only for c compiler flags COMMON_CFLAGS='' COMMON_CFLAGS=COMMON_CFLAGS+' -std=gnu99 ' OS_LIBS=[] OS_LIBPATH=[] OS_CPPPATH=[] OS_LINKFLAGS='' OS_SUBSYSTEM_CONSOLE='' OS_SUBSYSTEM_WINDOWS='' OS_FLAGS='-Wall -Os -fno-strict-aliasing ' #OS_FLAGS='-g -Wall -Os -mfloat-abi=hard -fno-strict-aliasing ' #for build tslib #TSLIB_INC_DIR=joinPath(TK_LINUX_FB_ROOT, '3rd/tslib/src') #TSLIB_LIB_DIR=joinPath(TK_LINUX_FB_ROOT, '3rd/tslib/src/.libs') #for prebuild tslib TSLIB_LIB_DIR='/opt/28x/tslib/lib' TSLIB_INC_DIR='/opt/28x/tslib/include' TOOLS_PREFIX='/opt/28x/gcc-4.4.4-glibc-2.11.1-multilib-1.0/arm-fsl-linux-gnueabi/bin/arm-linux-' #TOOLS_PREFIX='/opt/poky/1.7/sysroots/x86_64-pokysdk-linux/usr/bin/arm-poky-linux-gnueabi/arm-poky-linux-gnueabi-' #for qemu TOOLS_PREFIX='/opt/qemu/buildroot-2021.02.2/output/host/bin/arm-linux-' TSLIB_LIB_DIR='' #TSLIB_LIB_DIR='' #TSLIB_INC_DIR='' #TOOLS_PREFIX='/opt/v3s/mango/tools/external-toolchain/bin/arm-linux-gnueabi-' #OS_FLAGS='-std=gnu99 -mthumb -mabi=aapcs-linux -mlittle-endian -fdata-sections -ffunction-sections -mcpu=cortex-a7 -mtune=cortex-a7 -mfpu=fpv4-sp-d16 -mfloat-abi=softfp ' #for pc build #TOOLS_PREFIX='' #TSLIB_LIB_DIR='' TARGET_ARCH = platform.architecture(); CC=TOOLS_PREFIX+'gcc', CXX=TOOLS_PREFIX+'g++', LD=TOOLS_PREFIX+'g++', AR=TOOLS_PREFIX+'ar', RANLIB=TOOLS_PREFIX+'ranlib', STRIP=TOOLS_PREFIX+'strip', OS_LIBS = ['stdc++', 'pthread', 'rt', 'm', 'dl'] #for android #TSLIB_LIB_DIR='' #TSLIB_INC_DIR='' #TOOLS_PREFIX='/opt/android-ndk-r20b/toolchains/llvm/prebuilt/linux-x86_64/bin/' #TOOLS_PREFIX='/Users/jim/android/android-ndk-r21d/toolchains/llvm/prebuilt/darwin-x86_64/bin/' #CC=TOOLS_PREFIX+'armv7a-linux-androideabi16-clang' #CXX=TOOLS_PREFIX+'armv7a-linux-androideabi16-clang++' #LD=TOOLS_PREFIX+'arm-linux-androideabi-ld' #AR=TOOLS_PREFIX+'arm-linux-androideabi-ar' #STRIP=TOOLS_PREFIX+'arm-linux-androideabi-strip' #RANLIB=TOOLS_PREFIX+"arm-linux-androideabi-ranlib" #OS_LINKFLAGS=' -Wl,--allow-multiple-definition ' #OS_LIBS = ['stdc++', 'm'] #OS_FLAGS='-Wall -Os -DFB_DEVICE_FILENAME=\\\"\"/dev/graphics/fb0\\\"\" ' OS_LINKFLAGS= OS_LINKFLAGS + ' -Wl,-rpath=./bin -Wl,-rpath=./ ' if LCD_DEVICES =='drm' : #for drm OS_FLAGS=OS_FLAGS + ' -DWITH_LINUX_DRM=1 -I/usr/include/libdrm ' OS_LIBS=OS_LIBS + ['drm'] elif LCD_DEVICES =='egl_for_fsl': #for egl for fsl OS_FLAGS=OS_FLAGS + ' -DEGL_API_FB ' OS_LIBS=OS_LIBS + [ 'GLESv2', 'EGL'] elif LCD_DEVICES =='egl_for_x11' : #for egl for fsl OS_FLAGS=OS_FLAGS + ' -fPIC ' OS_LIBS=OS_LIBS + [ 'X11', 'EGL', 'GLESv2' ] elif LCD_DEVICES =='egl_for_gbm' : #for egl for gbm OS_CPPPATH += ['/usr/include/libdrm', '/usr/include/GLES2'] OS_LIBS=OS_LIBS + [ 'drm', 'gbm', 'EGL', 'GLESv2' ] COMMON_CCFLAGS = COMMON_CCFLAGS + ' -DLINUX -DHAS_PTHREAD -DENABLE_CURSOR -fPIC ' COMMON_CCFLAGS=COMMON_CCFLAGS+' -DWITH_DATA_READER_WRITER=1 ' COMMON_CCFLAGS=COMMON_CCFLAGS+' -DWITH_EVENT_RECORDER_PLAYER=1 ' COMMON_CCFLAGS = COMMON_CCFLAGS + ' -DWITH_WIDGET_TYPE_CHECK=1 ' if TSLIB_LIB_DIR != '': COMMON_CCFLAGS = COMMON_CCFLAGS + ' -DHAS_TSLIB ' OS_PROJECTS=[] CFLAGS=COMMON_CFLAGS LINKFLAGS=OS_LINKFLAGS; LIBPATH=[LIB_DIR, BIN_DIR] + OS_LIBPATH CCFLAGS=OS_FLAGS + COMMON_CCFLAGS STATIC_LIBS =['awtk_global', 'fscript_ext_widgets', 'extwidgets', 'widgets', 'awtk_linux_fb', 'base', 'gpinyin', 'linebreak', 'fribidi'] STATIC_LIBS += TKC_STATIC_LIBS if TSLIB_LIB_DIR != '': SHARED_LIBS=['awtk', 'ts'] + OS_LIBS; else: SHARED_LIBS=['awtk'] + OS_LIBS; if VGCANVAS == 'NANOVG': TK_ROOT_VAR = joinPath(VAR_DIR, 'awtk') OS_PROJECTS = [ joinPath(TK_ROOT_VAR, '3rd/nanovg/SConscript') ] OS_CPPPATH += [joinPath(TK_3RD_ROOT, 'nanovg'), joinPath(TK_3RD_ROOT, 'nanovg/gl'), joinPath(TK_3RD_ROOT, 'nanovg/base') ] if LCD_DEVICES =='fb' or LCD_DEVICES =='drm' : STATIC_LIBS = STATIC_LIBS + ['nanovg-agge', 'agge', 'nanovg'] + OS_LIBS AWTK_DLL_DEPS_LIBS = ['nanovg-agge', 'agge', 'nanovg'] + OS_LIBS elif lcd_devices_is_egl(LCD_DEVICES) : CCFLAGS += ' -DWITH_NANOVG_GLES2 -DWITH_NANOVG_GL -DWITH_NANOVG_GPU ' STATIC_LIBS = STATIC_LIBS + ['glad', 'nanovg'] + OS_LIBS AWTK_DLL_DEPS_LIBS = ['glad', 'nanovg'] + OS_LIBS elif VGCANVAS == 'CAIRO': TK_ROOT_VAR = joinPath(VAR_DIR, 'awtk') OS_PROJECTS = [joinPath(TK_ROOT_VAR, '3rd/cairo/SConscript'), joinPath(TK_ROOT_VAR, '3rd/pixman/SConscript')] OS_CPPPATH += [joinPath(TK_3RD_ROOT, 'cairo'), joinPath(TK_3RD_ROOT, 'pixman') ] STATIC_LIBS = STATIC_LIBS + ['cairo', 'pixman'] + OS_LIBS AWTK_DLL_DEPS_LIBS= ['cairo', 'pixman'] + OS_LIBS CCFLAGS += ' -DWITH_VGCANVAS_CAIRO -DHAVE_CONFIG_H -DCAIRO_WIN32_STATIC_BUILD ' elif VGCANVAS == 'NANOVG_PLUS': TK_ROOT_VAR = joinPath(VAR_DIR, 'awtk') OS_PROJECTS = [ joinPath(TK_ROOT_VAR, '3rd/nanovg_plus/SConscript') ] OS_CPPPATH += [joinPath(TK_3RD_ROOT, 'nanovg_plus/gl'), joinPath(TK_3RD_ROOT, 'nanovg_plus/base') ] if lcd_devices_is_egl(LCD_DEVICES) : CCFLAGS += ' -DWITH_NANOVG_PLUS_GPU -DWITH_NANOVG_GPU -DWITH_GPU_GL -DWITH_GPU_GLES2 -DNVGP_GLES2 ' STATIC_LIBS = STATIC_LIBS + ['glad', 'nanovg_plus'] + OS_LIBS AWTK_DLL_DEPS_LIBS = ['glad', 'nanovg_plus'] + OS_LIBS LIBS=STATIC_LIBS AWTK_STATIC_LIBS = LIBS OS_WHOLE_ARCHIVE =toWholeArchive(LIBS) CPPPATH=[TK_ROOT, TK_SRC, TK_3RD_ROOT, LCD_DIR, INPUT_DIR, joinPath(TK_SRC, 'ext_widgets'), joinPath(TK_SRC, 'custom_widgets'), joinPath(TK_ROOT, 'tools'), joinPath(TK_3RD_ROOT, 'agge'), joinPath(TK_3RD_ROOT, 'agg/include'), joinPath(TK_3RD_ROOT, 'mbedtls/include'), joinPath(TK_3RD_ROOT, 'mbedtls/3rdparty/everest/include'), joinPath(TK_3RD_ROOT, 'fribidi'), joinPath(TK_3RD_ROOT, 'libunibreak'), joinPath(TK_3RD_ROOT, 'gpinyin/include'), joinPath(TK_3RD_ROOT, 'gtest/googletest'), joinPath(TK_3RD_ROOT, 'gtest/googletest/include'), ] + OS_CPPPATH if TSLIB_LIB_DIR != '': LIBS = ['ts'] + LIBS LIBPATH = [TSLIB_LIB_DIR] + LIBPATH; CPPPATH = [TSLIB_INC_DIR] + CPPPATH; os.environ['LCD'] = LCD os.environ['LCD_DEVICES'] = LCD_DEVICES os.environ['TARGET_ARCH'] = 'arm' os.environ['BIN_DIR'] = BIN_DIR; os.environ['LIB_DIR'] = LIB_DIR; os.environ['TK_ROOT'] = TK_ROOT; os.environ['CCFLAGS'] = CCFLAGS; os.environ['VGCANVAS'] = VGCANVAS os.environ['INPUT_ENGINE'] = INPUT_ENGINE; os.environ['TSLIB_LIB_DIR'] = TSLIB_LIB_DIR; os.environ['NANOVG_BACKEND'] = NANOVG_BACKEND; os.environ['TK_3RD_ROOT'] = TK_3RD_ROOT; os.environ['GTEST_ROOT'] = GTEST_ROOT; os.environ['TOOLS_NAME'] = ''; os.environ['GRAPHIC_BUFFER'] = GRAPHIC_BUFFER; os.environ['WITH_AWTK_SO'] = 'true' if LCD_DEVICES =='fb' or LCD_DEVICES =='drm' : os.environ['NATIVE_WINDOW'] = 'raw'; elif lcd_devices_is_egl(LCD_DEVICES) : os.environ['NATIVE_WINDOW'] = 'fb_gl'; os.environ['OS_WHOLE_ARCHIVE'] = OS_WHOLE_ARCHIVE; os.environ['AWTK_DLL_DEPS_LIBS'] = ';'.join(AWTK_DLL_DEPS_LIBS) os.environ['STATIC_LIBS'] = ';'.join(STATIC_LIBS) os.environ['CROSS_COMPILE'] = str(not TOOLS_PREFIX == '') def has_custom_cc(): return True def copySharedLib(src, dst, name): src = os.path.join(src, 'bin/lib'+name+'.so') src = os.path.normpath(src); dst = os.path.normpath(dst); if os.path.dirname(src) == dst: return if not os.path.exists(src): print('Can\'t find ' + src + '. Please build '+name+'before!') else: if not os.path.exists(dst): os.makedirs(dst) shutil.copy(src, dst) print(src + '==>' + dst);