add micropython compile script

This commit is contained in:
Neucrack 2019-06-30 01:47:37 +08:00
parent a5d568a173
commit d28cb7ac7d
12 changed files with 381 additions and 314 deletions

View file

@ -1,5 +1,5 @@
if(CONFIG_KENDRYTE_SDK_ENABLE)
################# Add include #################
list(APPEND ADD_INCLUDE "include"
"kendryte-standalone-sdk/lib/bsp/include"
@ -32,7 +32,7 @@ SET_SOURCE_FILES_PROPERTIES(${ADD_ASM_SRCS} PROPERTIES COMPILE_FLAGS "-x assembl
###############################################
###### Add required/dependent components ######
list(APPEND ADD_REQUIREMENTS gcc m c)
list(APPEND ADD_REQUIREMENTS gcc m c atomic)
###############################################
############ Add static libs ##################
@ -47,5 +47,5 @@ add_definitions(-DCONFIG_LOG_LEVEL=${CONFIG_SDK_LOG_LEVEL}
)
register_component()
endif()

View file

@ -1,7 +1,13 @@
menu "Toolchain configuration"
config KENDRYTE_SDK_ENABLE
bool "Enable kendryte sdk"
default n
menu "Kendryte configurations"
visible if KENDRYTE_SDK_ENABLE
config SDK_LOG_LEVEL
int "log level, 5:LOG_VERBOSE, 4:LOG_DEBUG, 3:LOG_INFO, 2:LOG_WARN, 1:LOG_ERROR, 0:LOG_NONE"
default 5
endmenu

View file

@ -1,4 +1,4 @@
if(CONFIG_MICROPYTHON_ENABLE)
set(mpy_component_name "micropython")
get_filename_component(mpy_dir ${CMAKE_CURRENT_LIST_FILE} DIRECTORY)
set(mpy_core_dir "${mpy_dir}/core")
@ -7,6 +7,7 @@ set(mpy_port_dir "${mpy_dir}/port")
set(mpy_build_dir "${CMAKE_BINARY_DIR}/micropython")
set(mpy_build_gen_header_dir "${mpy_build_dir}/genhdr")
set(mpy_frozen_py_dir "${mpy_port_dir}/builtin_py")
set(mpy_build_mpy_dir "${mpy_build_dir}/mpy")
################# Add include #################
list(APPEND ADD_INCLUDE "${mpy_core_dir}"
@ -184,7 +185,7 @@ list(APPEND ADD_SRCS ${MPY_SRCS}
set_property(SOURCE ${MPY_FROZEN_SRC} PROPERTY GENERATED 1)
###############################################
############ QSTR ##############
############ QSTR(SRC_QSTR) ##############
set(QSTR_SRCS ${ADD_SRCS})
list(REMOVE_ITEM QSTR_SRCS "core/py/nlr.c"
"core/py/nlrsetjmp.c"
@ -206,49 +207,62 @@ add_custom_command(OUTPUT ${version_header}
# add qstr header
set(qstr_header ${mpy_build_gen_header_dir}/qstrdefs.generated.h)
set_property(SOURCE ${qstr_header} PROPERTY GENERATED 1)
# set_property(SOURCE ${qstr_header} PROPERTY GENERATED 1)
set(PY_QSTR_DEFS ${mpy_core_src_dir}/qstrdefs.h)
set(QSTR_DEFS ${mpy_port_dir}/include/qstrdefsport.h)
set(MODULE_DEFS ${mpy_build_gen_header_dir}/moduledefs.h)
set(QSTR_DEFS_COLLECTED ${mpy_build_gen_header_dir}/qstrdefs.collected.h)
set(QSTR_GEN_EXTRA_CFLAGS -DNO_QSTR -I${mpy_build_dir}/tmp)
set(QSTR_GLOBAL_DEPENDENCIES ${mpy_core_src_dir}/mpconfig.h ${mpy_port_dir}/include/mpconfigport.h)
prepend(include_flags "-I" ${ADD_INCLUDE})
string(REPLACE ";" " " include_flags "${include_flags}")
add_custom_command(OUTPUT ${MODULE_DEFS}
COMMAND ${python} ${mpy_core_src_dir}/makemoduledefs.py --vpath=${mpy_core_dir}, ${mpy_dir}, ${QSTR_SRCS} > ${MODULE_DEFS}
DEPENDS ${version_header}
VERBATIM
)
abspath(QSTR_SRCS_FULL_PATH ${QSTR_SRCS})
# separate_arguments(cmd_0 NATIVE_COMMAND)
separate_arguments(cmd_cflag NATIVE_COMMAND ${CMAKE_C_FLAGS})
separate_arguments(cmd_cinclude NATIVE_COMMAND ${include_flags})
add_custom_command(OUTPUT ${QSTR_DEFS_COLLECTED}
COMMAND ${CMAKE_C_COMPILER} -E ${QSTR_GEN_EXTRA_CFLAGS} ${CMAKE_C_FLAGS} ${QSTR_SRCS_FULL_PATH} ${QSTR_GLOBAL_DEPENDENCIES} > ${mpy_build_gen_header_dir}/qstr.i.last
COMMAND ${CMAKE_C_COMPILER} -E ${QSTR_GEN_EXTRA_CFLAGS} ${cmd_cflag} ${cmd_cinclude} ${QSTR_SRCS_FULL_PATH} ${QSTR_GLOBAL_DEPENDENCIES} > ${mpy_build_gen_header_dir}/qstr.i.last
COMMAND ${python} ${mpy_core_src_dir}/makeqstrdefs.py split ${mpy_build_gen_header_dir}/qstr.i.last ${mpy_build_gen_header_dir}/qstr ${QSTR_DEFS_COLLECTED}
COMMAND touch ${mpy_build_gen_header_dir}/qstr.split
COMMAND ${python} ${mpy_core_src_dir}/makeqstrdefs.py cat ${mpy_build_gen_header_dir}/qstr.i.last ${mpy_build_gen_header_dir}/qstr ${QSTR_DEFS_COLLECTED}
DEPENDS ${version_header}
DEPENDS ${MODULE_DEFS}
VERBATIM
)
add_custom_target(gen_mpy_cross
COMMAND make -j20 -C ${mpy_core_dir}/mpy-cross
)
separate_arguments(cmd_sed0 NATIVE_COMMAND "s/^Q(.*)/\"&\"/")
separate_arguments(cmd_sed1 NATIVE_COMMAND "s/^\"\\(Q(.*)\\)\"/\\1/")
add_custom_command(OUTPUT ${qstr_header} COMMAND
COMMAND ${mpy_core_src_dir}/makeqstrdata.py ${mpy_build_gen_header_dir}/qstrdefs.preprocessed.h > ${qstr_header}
COMMAND cat ${PY_QSTR_DEFS} ${QSTR_DEFS} ${QSTR_DEFS_COLLECTED} | sed 's/^Q(.*)/\"&\"/' | ${CMAKE_C_COMPILER} -E ${CMAKE_C_FLAGS} - | sed 's/^\"\\(Q(.*)\\)\"/\\1/' > ${mpy_build_gen_header_dir}/qstrdefs.preprocessed.h
DEPENDS gen_mpy_cross ${version_header} ${QSTR_DEFS_COLLECTED}
)
COMMAND cat ${PY_QSTR_DEFS} ${QSTR_DEFS} ${QSTR_DEFS_COLLECTED} | sed '${cmd_sed0}' | ${CMAKE_C_COMPILER} -E ${cmd_cflag} ${cmd_cinclude} - | sed '${cmd_sed1}' > ${mpy_build_gen_header_dir}/qstrdefs.preprocessed.h
COMMAND ${python} ${mpy_core_src_dir}/makeqstrdata.py ${mpy_build_gen_header_dir}/qstrdefs.preprocessed.h > ${qstr_header}
DEPENDS gen_mpy_cross ${version_header} ${MODULE_DEFS} ${QSTR_DEFS_COLLECTED}
)
file(GLOB frozen_py "${mpy_frozen_py_dir}/*.py")
foreach(py ${frozen_py})
get_filename_component(py_name ${py} NAME)
string(REPLACE ".py" "" py_name ${py_name})
string(REPLACE ".py" ".mpy" mpy ${py})
add_custom_command(OUTPUT ${mpy}
COMMAND ${mpy_dir}/mpy-cross/mpy-cross -o ${py_name}.mpy -s ${py_name}.py ${py}
set(mpy_path ${mpy_build_mpy_dir}/${py_name}.mpy)
list(APPEND frozen_mpy ${mpy_path})
add_custom_command(OUTPUT ${mpy_path}
COMMAND mkdir -p ${mpy_build_mpy_dir}
COMMAND ${mpy_core_dir}/mpy-cross/mpy-cross -o ${mpy_path} -s ${py_name}.py ${py}
)
# add_custom_target("mpy_${py_name}_target" DEPENDS ${mpy})
endforeach()
string(REPLACE ".py" ".mpy" frozen_mpy ${frozen_py})
add_custom_command(OUTPUT ${MPY_FROZEN_SRC} DEPENDS ${qstr_header} ${frozen_mpy}
add_custom_command(OUTPUT ${MPY_FROZEN_SRC}
COMMAND ${python} ${mpy_core_dir}/tools/mpy-tool.py -f -q ${mpy_build_gen_header_dir}/qstrdefs.preprocessed.h ${frozen_mpy} > ${MPY_FROZEN_SRC}
DEPENDS ${qstr_header} ${frozen_mpy}
)
################################
@ -270,3 +284,6 @@ add_definitions(-DFFCONF_H="${mpy_core_dir}/lib/ffconf.h"
# add_dependencies(${mpy_component_name} $gen_mpy_cross})
register_component()
endif()

View file

@ -1,7 +1,6 @@
menu "Toolchain configuration"
config MICROPYTHON_ENABLE
bool "enbale micropython module"
default false
endmenu
default n

View file

@ -55,7 +55,8 @@
#define MICROPY_PY_SYS (0)
#define MICROPY_MODULE_FROZEN_MPY (1)
#define MICROPY_CPYTHON_COMPAT (0)
#define MICROPY_LONGINT_IMPL (MICROPY_LONGINT_IMPL_NONE)
#define MICROPY_LONGINT_IMPL (MICROPY_LONGINT_IMPL_MPZ)
#define MPZ_DIG_SIZE (16)
#define MICROPY_FLOAT_IMPL (MICROPY_FLOAT_IMPL_NONE)
// type definitions for the specific machine

View file

@ -2,13 +2,46 @@
########## set C flags #########
set(CMAKE_C_FLAGS -Os
-Wall
-Werror=all
-Wno-error=unused-function
-Wno-error=unused-but-set-variable
-Wno-error=unused-variable
-Wno-error=deprecated-declarations
-Wno-error=maybe-uninitialized
-Wextra
-Werror=frame-larger-than=32768
-Wno-unused-parameter
-Wno-unused-function
-Wno-implicit-fallthrough
-Wno-sign-compare
-Wno-error=missing-braces
-Wno-old-style-declaration
-Wno-error=pointer-sign
-Wno-pointer-to-int-cast
-Wno-strict-aliasing
-Wno-int-to-pointer-cast
)
################################
###### set CXX(cpp) flags ######
set(CMAKE_CXX_FLAGS -std=gnu++17
-Wall
set(CMAKE_CXX_FLAGS -Wall
-Wno-error=unused-function
-Wno-error=unused-but-set-variable
-Wno-error=unused-variable
-Wno-error=deprecated-declarations
-Wno-error=maybe-uninitialized
-Wextra
-Werror=frame-larger-than=32768
-Wno-unused-parameter
-Wno-unused-function
-Wno-implicit-fallthrough
-Wno-sign-compare
-Wno-error=missing-braces
-Wno-error=pointer-sign
-Wno-pointer-to-int-cast
-Wno-strict-aliasing
-Wno-int-to-pointer-cast
)
################################

View file

@ -1,11 +1,16 @@
############### Add include ###################
# list(APPEND ADD_INCLUDE "include"
# )
# list(APPEND ADD_PRIVATE_INCLUDE "")
# list(APPEND ADD_PRIVATE_INCLUDE "${CMAKE_BINARY_DIR}/micropython/genhdr")
###############################################
############ Add source files #################
list(APPEND ADD_SRCS "src/main.c"
"${SDK_PATH}/components/micropython/core/lib/utils/printf.c"
"${SDK_PATH}/components/micropython/core/lib/utils/stdout_helpers.c"
"${SDK_PATH}/components/micropython/core/lib/utils/pyexec.c"
"${SDK_PATH}/components/micropython/core/lib/libc/string0.c"
"${SDK_PATH}/components/micropython/core/lib/mp-readline/readline.c"
)
# aux_source_directory(src ADD_SRCS)
# list(REMOVE_ITEM COMPONENT_SRCS "src/test2.c")

1
requirements.txt Normal file
View file

@ -0,0 +1 @@
pyserial==3.4

View file

@ -253,7 +253,11 @@ macro(project name)
foreach(component_dir ${components_dirs})
get_filename_component(base_dir ${component_dir} NAME)
add_subdirectory(${component_dir} ${base_dir})
if(TARGET ${base_dir})
add_dependencies(${base_dir} update_build_info) # add build info dependence
else()
message(STATUS "component ${base_dir} not enabled")
endif()
endforeach()

View file

@ -130,6 +130,7 @@ elif project_args.cmd == "distclean":
if os.path.exists("build"):
os.chdir("build")
subprocess.call(["make", "clean"])
os.chdir("..")
shutil.rmtree("build")
print("clean complete")
elif project_args.cmd == "menuconfig":

View file

@ -4,7 +4,7 @@
function(prepend out prefix)
set(listVar "")
foreach(f ${ARGN})
list(APPEND listVar "${prefix}/${f}")
list(APPEND listVar "${prefix}${f}")
endforeach(f)
set(${out} "${listVar}" PARENT_SCOPE)
endfunction()