Export build variables to a CMake file so that it can be imported in a generic CMake toolchain file

Add a toolchain file for CMake that can be used in the exported NuttX archive.
This commit is contained in:
Philippe Leduc
2023-08-24 17:15:02 +02:00
committed by Xiang Xiao
parent b60f01a55b
commit 5dbffd01b2
2 changed files with 73 additions and 1 deletions
+41 -1
View File
@@ -256,6 +256,33 @@ echo "HOSTEXEEXT = ${HOSTEXEEXT}" >>"${EXPORTDIR}/scripts/Make.defs"
echo "LDNAME = ${LDNAME}" >>"${EXPORTDIR}/scripts/Make.defs"
echo "LDELFFLAGS = ${LDELFFLAGS}" >>"${EXPORTDIR}/scripts/Make.defs"
echo "set(ARCHCFLAGS \"${ARCHCFLAGS}\")" > "${EXPORTDIR}/scripts/target.cmake"
echo "set(ARCHCPUFLAGS \"${ARCHCPUFLAGS}\")" >>"${EXPORTDIR}/scripts/target.cmake"
echo "set(ARCHCXXFLAGS \"${ARCHCXXFLAGS}\")" >>"${EXPORTDIR}/scripts/target.cmake"
echo "set(ARCHPICFLAGS \"${ARCHPICFLAGS}\")" >>"${EXPORTDIR}/scripts/target.cmake"
echo "set(ARCHWARNINGS \"${ARCHWARNINGS}\")" >>"${EXPORTDIR}/scripts/target.cmake"
echo "set(ARCHWARNINGSXX \"${ARCHWARNINGSXX}\")" >>"${EXPORTDIR}/scripts/target.cmake"
echo "set(ARCHOPTIMIZATION \"${ARCHOPTIMIZATION}\")" >>"${EXPORTDIR}/scripts/target.cmake"
echo "set(CROSSDEV \"${CROSSDEV}\")" >>"${EXPORTDIR}/scripts/target.cmake"
echo "set(CMAKE_C_COMPILER \"${CC}\")" >>"${EXPORTDIR}/scripts/target.cmake"
echo "set(CMAKE_CXX_COMPILER \"${CXX}\")" >>"${EXPORTDIR}/scripts/target.cmake"
echo "set(CMAKE_LINKER \"${LD}\")" >>"${EXPORTDIR}/scripts/target.cmake"
echo "set(CMAKE_OBJCOPY \"${OBJCOPY}\")" >>"${EXPORTDIR}/scripts/target.cmake"
echo "set(CMAKE_OBJDUMP \"${OBJDUMP}\")" >>"${EXPORTDIR}/scripts/target.cmake"
echo "set(NXFLATLDFLAGS1 \"${NXFLATLDFLAGS1}\")" >>"${EXPORTDIR}/scripts/target.cmake"
echo "set(NXFLATLDFLAGS2 \"${NXFLATLDFLAGS2}\")" >>"${EXPORTDIR}/scripts/target.cmake"
echo "set(OBJEXT \"${OBJEXT}\")" >>"${EXPORTDIR}/scripts/target.cmake"
echo "set(LIBEXT \"${LIBEXT}\")" >>"${EXPORTDIR}/scripts/target.cmake"
echo "set(EXEEXT \"${EXEEXT}\")" >>"${EXPORTDIR}/scripts/target.cmake"
echo "set(HOSTCC \"${HOSTCC}\")" >>"${EXPORTDIR}/scripts/target.cmake"
echo "set(HOSTINCLUDES \"${HOSTINCLUDES}\")" >>"${EXPORTDIR}/scripts/target.cmake"
echo "set(HOSTCFLAGS \"${HOSTCFLAGS}\")" >>"${EXPORTDIR}/scripts/target.cmake"
echo "set(HOSTLDFLAGS \"${HOSTLDFLAGS}\")" >>"${EXPORTDIR}/scripts/target.cmake"
echo "set(HOSTEXEEXT \"${HOSTEXEEXT}\")" >>"${EXPORTDIR}/scripts/target.cmake"
echo "set(LDNAME \"${LDNAME}\")" >>"${EXPORTDIR}/scripts/target.cmake"
echo "set(LDELFFLAGS \"${LDELFFLAGS}\")" >>"${EXPORTDIR}/scripts/target.cmake"
# Additional compilation options when the kernel is built
if [ "X${USRONLY}" != "Xy" ]; then
@@ -265,8 +292,19 @@ if [ "X${USRONLY}" != "Xy" ]; then
echo "LDENDGROUP = ${LDENDGROUP}" >>"${EXPORTDIR}/scripts/Make.defs"
echo "LDFLAGS = ${LDFLAGS}" >>"${EXPORTDIR}/scripts/Make.defs"
echo "LDSTARTGROUP = ${LDSTARTGROUP}" >>"${EXPORTDIR}/scripts/Make.defs"
echo "set(EXTRA_LIBS \"${EXTRA_LIBS}\")" >>"${EXPORTDIR}/scripts/target.cmake"
echo "set(EXTRA_OBJS \"${EXTRA_OBJS}\")" >>"${EXPORTDIR}/scripts/target.cmake"
echo "set(HEAD_OBJ \"${HEAD_OBJ}\")" >>"${EXPORTDIR}/scripts/target.cmake"
echo "set(LDENDGROUP \"${LDENDGROUP}\")" >>"${EXPORTDIR}/scripts/target.cmake"
echo "set(LDFLAGS \"${LDFLAGS}\")" >>"${EXPORTDIR}/scripts/target.cmake"
echo "set(LDSTARTGROUP \"${LDSTARTGROUP}\")" >>"${EXPORTDIR}/scripts/target.cmake"
fi
# Copy the CMake toolchain file
cp "${TOPDIR}/tools/toolchain.cmake.export" "${EXPORTDIR}/scripts/toolchain.cmake"
# Copy the system map file(s)
if [ -r ${TOPDIR}/System.map ]; then
@@ -359,7 +397,9 @@ fi
LDLIBS=`basename -a ${LIBLIST} | sed -e "s/lib/-l/g" -e "s/\.${LIBEXT:1}//g" | tr "\n" " "`
if [ "X${USRONLY}" != "Xy" ]; then
echo "LDLIBS = ${LDLIBS}" >>"${EXPORTDIR}/scripts/Make.defs"
echo "LDLIBS = ${LDLIBS}" >> "${EXPORTDIR}/scripts/Make.defs"
echo "set(LDLIBS \"${LDLIBS}\")" >>"${EXPORTDIR}/scripts/target.cmake"
fi
# Then process each library
+32
View File
@@ -0,0 +1,32 @@
set(CMAKE_SYSTEM_NAME Generic)
set(CMAKE_SYSTEM_VERSION 1)
set(NUTTX_PATH ${CMAKE_CURRENT_LIST_DIR}/..)
include(${NUTTX_PATH}/scripts/target.cmake)
set(LINKER_SCRIPT ${NUTTX_PATH}/scripts/${LDNAME})
set(CMAKE_C_FLAGS "${ARCHCPUFLAGS} ${ARCHCFLAGS} -D__NuttX__")
set(CMAKE_CXX_FLAGS "${ARCHCPUFLAGS} ${ARCHCXXFLAGS} -D__NuttX__")
set(CMAKE_C_STANDARD_INCLUDE_DIRECTORIES ${NUTTX_PATH}/include
${NUTTX_PATH}/arch/chip)
set(CMAKE_CXX_STANDARD_INCLUDE_DIRECTORIES
${NUTTX_PATH}/include/libcxx ${NUTTX_PATH}/include ${NUTTX_PATH}/arch/chip)
add_compile_options(-nostdlib)
add_compile_options(-ffunction-sections -fdata-sections)
link_libraries(
"-L${NUTTX_PATH}/libs -Wl,--start-group ${LDLIBS} ${EXTRA_LIBS} -Wl,--end-group"
)
add_link_options(-Wl,--entry=__start)
add_link_options(-nostdlib)
add_link_options(-Wl,--gc-sections)
add_link_options(-T${LINKER_SCRIPT})
set(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER)
set(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY)
set(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY)
set(CMAKE_FIND_ROOT_PATH_MODE_PACKAGE ONLY)