Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 4 additions & 2 deletions ext_mod/lvgl/micropython.cmake
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,8 @@ list(APPEND LV_CFLAGS

separate_arguments(SECOND_BUILD_ENV UNIX_COMMAND $ENV{SECOND_BUILD})

set(LVGL_HEADER "${BINDING_DIR}/build/lvgl_header.h")
set(LVGL_DIR "${BINDING_DIR}/lib/lvgl")


file(GLOB_RECURSE LVGL_HEADERS ${BINDING_DIR}/lib/lvgl/src/*.h ${BINDING_DIR}/lib/lv_conf.h)

Expand All @@ -25,9 +26,10 @@ file(GLOB_RECURSE LVGL_HEADERS ${BINDING_DIR}/lib/lvgl/src/*.h ${BINDING_DIR}/li
# found to go about doing it.

if(${SECOND_BUILD_ENV} EQUAL "0")

execute_process(
COMMAND
${Python3_EXECUTABLE} ${BINDING_DIR}/gen/$ENV{GEN_SCRIPT}_api_gen_mpy.py ${LV_CFLAGS} --output=${CMAKE_BINARY_DIR}/lv_mp.c --include=${BINDING_DIR}/lib --include=${BINDING_DIR}/lib/lvgl --board=$ENV{LV_PORT} --module_name=lvgl --module_prefix=lv --metadata=${CMAKE_BINARY_DIR}/lv_mp.c.json --header_file=${LVGL_HEADER}
${Python3_EXECUTABLE} ${BINDING_DIR}/gen/$ENV{GEN_SCRIPT}_api_gen_mpy.py ${LV_CFLAGS} --output=${CMAKE_BINARY_DIR}/lv_mp.c --include=${BINDING_DIR}/lib --include=${BINDING_DIR}/lib/lvgl --board=$ENV{LV_PORT} --module_name=lvgl --module_prefix=lv --metadata=${CMAKE_BINARY_DIR}/lv_mp.c.json --header_file=${LVGL_DIR}/lvgl.h
WORKING_DIRECTORY
${CMAKE_CURRENT_LIST_DIR}

Expand Down
4 changes: 2 additions & 2 deletions ext_mod/lvgl/micropython.mk
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,6 @@ LVGL_BINDING_DIR = $(subst /ext_mod/lvgl,,$(MOD_DIR))

LIB_DIR = $(LVGL_BINDING_DIR)/lib
LVGL_DIR = $(LVGL_BINDING_DIR)/lib/lvgl
LVGL_HEADER = $(LVGL_BINDING_DIR)/build/lvgl_header.h

CURRENT_DIR = $(LVGL_BINDING_DIR)/ext_mod/lvgl
CFLAGS_USERMOD += -I$(LVGL_DIR)
Expand Down Expand Up @@ -37,7 +36,8 @@ SRC_USERMOD_C += $(LVGL_MPY)
$(LVGL_MPY): $(ALL_LVGL_SRC) $(LVGL_BINDING_DIR)/gen/$(GEN_SCRIPT)_api_gen_mpy.py
$(ECHO) "LVGL-GEN $@"
$(Q)mkdir -p $(dir $@)
$(Q)$(PYTHON) $(LVGL_BINDING_DIR)/gen/$(GEN_SCRIPT)_api_gen_mpy.py $(LV_CFLAGS) --board=$(LV_PORT) --output=$(LVGL_MPY) --include=$(LIB_DIR) --include=$(LVGL_DIR) --module_name=lvgl --module_prefix=lv --metadata=$(LVGL_MPY_METADATA) --header_file=$(LVGL_HEADER)

$(Q)$(PYTHON) $(LVGL_BINDING_DIR)/gen/$(GEN_SCRIPT)_api_gen_mpy.py $(LV_CFLAGS) --board=$(LV_PORT) --output=$(LVGL_MPY) --include=$(LIB_DIR) --include=$(LVGL_DIR) --module_name=lvgl --module_prefix=lv --metadata=$(LVGL_MPY_METADATA) --header_file=$(LVGL_DIR)/lvgl.h

.PHONY: LVGL_MPY
LVGL_MPY: $(LVGL_MPY)
Expand Down
120 changes: 120 additions & 0 deletions gen/fixed_gen_json.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,120 @@
import os
import sys
import shutil
import subprocess
import tempfile

base_path = os.path.abspath(os.path.dirname(__file__))

project_path = os.path.abspath(os.path.join(base_path, '..', 'lib', 'lvgl'))
docs_path = os.path.join(project_path, 'docs')
sys.path.insert(0, docs_path)


import create_fake_lib_c # NOQA
import pycparser_monkeypatch # NOQA
import pycparser # NOQA

temp_directory = tempfile.mkdtemp(suffix='.lvgl_json')


def run(lvgl_config_path, target_header, filter_private):

pycparser_monkeypatch.FILTER_PRIVATE = filter_private

lvgl_path = project_path
lvgl_src_path = os.path.join(lvgl_path, 'src')
temp_lvgl = os.path.join(temp_directory, 'lvgl')
target_header_base_name = (
os.path.splitext(os.path.split(target_header)[-1])[0]
)

os.mkdir(temp_lvgl)
shutil.copytree(lvgl_src_path, os.path.join(temp_lvgl, 'src'))
shutil.copyfile(os.path.join(lvgl_path, 'lvgl.h'), os.path.join(temp_lvgl, 'lvgl.h'))

pp_file = os.path.join(temp_directory, target_header_base_name + '.pp')

src = lvgl_config_path
dst = os.path.join(temp_directory, 'lv_conf.h')
shutil.copyfile(src, dst)

include_dirs = [temp_directory, project_path]

if sys.platform.startswith('darwin'):
include_path_env_key = 'C_INCLUDE_PATH'
cpp_cmd = [
'clang', '-std=c11', '-E', '-DINT32_MIN=0x80000000',
]
output_pp = f' >> "{pp_file}"'
else:
include_path_env_key = 'C_INCLUDE_PATH'
cpp_cmd = [
'gcc', '-std=c11', '-E', '-Wno-incompatible-pointer-types',
]
output_pp = f' >> "{pp_file}"'

fake_libc_path = create_fake_lib_c.run(temp_directory)

if include_path_env_key not in os.environ:
os.environ[include_path_env_key] = ''

os.environ[include_path_env_key] = (
f'{fake_libc_path}{os.pathsep}{os.environ[include_path_env_key]}'
)

if 'PATH' not in os.environ:
os.environ['PATH'] = ''

os.environ['PATH'] = (
f'{fake_libc_path}{os.pathsep}{os.environ["PATH"]}'
)

cpp_cmd.extend([
'-DLV_LVGL_H_INCLUDE_SIMPLE',
'-DLV_CONF_INCLUDE_SIMPLE',
'-DLV_USE_DEV_VERSION'
])

cpp_cmd.extend(['-DPYCPARSER', f'"-I{fake_libc_path}"'])
cpp_cmd.extend([f'"-I{item}"' for item in include_dirs])
cpp_cmd.append(f'"{target_header}"')

if sys.platform.startswith('win'):
cpp_cmd.insert(len(cpp_cmd) - 2, output_pp)
else:
cpp_cmd.append(output_pp)

cpp_cmd = ' '.join(cpp_cmd)

p = subprocess.Popen(
cpp_cmd,
stdout=subprocess.PIPE,
stderr=subprocess.PIPE,
env=os.environ,
shell=True
)
out, err = p.communicate()
exit_code = p.returncode

if not os.path.exists(pp_file):
sys.stdout.write(out.decode('utf-8').strip() + '\n')
sys.stdout.write('EXIT CODE: ' + str(exit_code) + '\n')
sys.stderr.write(err.decode('utf-8').strip() + '\n')
sys.stdout.flush()
sys.stderr.flush()

raise RuntimeError('Unknown Failure')

with open(pp_file, 'r') as f:
pp_data = f.read()

cparser = pycparser.CParser()
ast = cparser.parse(pp_data, target_header)

ast.setup_docs(temp_directory)

shutil.rmtree(temp_directory)

return ast

Loading
Loading