mirror of
https://github.com/apache/nuttx.git
synced 2026-09-08 01:46:35 +00:00
- Introduced Kconfig options for stdbit.h, allowing architecture-specific and generic implementations. - Added new documentation for stdbit.h, detailing its usage and configuration. - Updated CMake and Makefile to handle the inclusion of stdbit.h based on configuration settings. This enhances the NuttX library with optional C23 bit manipulation utilities, improving functionality for architectures that support it. Signed-off-by: Arjav Patel <arjav1528@gmail.com>
176 lines
7.2 KiB
CMake
176 lines
7.2 KiB
CMake
# ##############################################################################
|
|
# cmake/nuttx_generate_headers.cmake
|
|
#
|
|
# SPDX-License-Identifier: Apache-2.0
|
|
#
|
|
# Licensed to the Apache Software Foundation (ASF) under one or more contributor
|
|
# license agreements. See the NOTICE file distributed with this work for
|
|
# additional information regarding copyright ownership. The ASF licenses this
|
|
# file to you under the Apache License, Version 2.0 (the "License"); you may not
|
|
# use this file except in compliance with the License. You may obtain a copy of
|
|
# the License at
|
|
#
|
|
# http://www.apache.org/licenses/LICENSE-2.0
|
|
#
|
|
# Unless required by applicable law or agreed to in writing, software
|
|
# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
|
|
# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
|
|
# License for the specific language governing permissions and limitations under
|
|
# the License.
|
|
#
|
|
# ##############################################################################
|
|
|
|
# setup target to generate config.h and version.h from mkconfig and mkversion
|
|
|
|
if(NOT EXISTS ${CMAKE_BINARY_DIR}/include)
|
|
file(MAKE_DIRECTORY ${CMAKE_BINARY_DIR}/include)
|
|
endif()
|
|
|
|
if(NOT EXISTS ${CMAKE_BINARY_DIR}/include/nuttx)
|
|
file(MAKE_DIRECTORY ${CMAKE_BINARY_DIR}/include/nuttx)
|
|
endif()
|
|
|
|
include(nuttx_mkconfig)
|
|
include(nuttx_mkversion)
|
|
|
|
# Setup symbolic link generation
|
|
|
|
if(NOT EXISTS ${CMAKE_BINARY_DIR}/include_apps)
|
|
execute_process(COMMAND ${CMAKE_COMMAND} -E make_directory
|
|
${CMAKE_BINARY_DIR}/include_apps)
|
|
endif()
|
|
|
|
if(NOT EXISTS ${CMAKE_BINARY_DIR}/include/arch)
|
|
execute_process(COMMAND ${CMAKE_COMMAND} -E make_directory
|
|
${CMAKE_BINARY_DIR}/include/arch)
|
|
file(GLOB CONTENTS ${NUTTX_DIR}/arch/${CONFIG_ARCH}/include/*)
|
|
foreach(ARCH_INCDIR ${CONTENTS})
|
|
get_filename_component(SUB_ELEMENT ${ARCH_INCDIR} NAME)
|
|
nuttx_create_symlink(${NUTTX_DIR}/arch/${CONFIG_ARCH}/include/${SUB_ELEMENT}
|
|
${CMAKE_BINARY_DIR}/include/arch/${SUB_ELEMENT})
|
|
endforeach()
|
|
endif()
|
|
|
|
if(NOT EXISTS ${CMAKE_BINARY_DIR}/include/arch/board)
|
|
if(EXISTS ${NUTTX_BOARD_DIR}/include)
|
|
nuttx_create_symlink(${NUTTX_BOARD_DIR}/include
|
|
${CMAKE_BINARY_DIR}/include/arch/board)
|
|
elseif(EXISTS ${NUTTX_BOARD_DIR}/../common/include)
|
|
nuttx_create_symlink(${NUTTX_BOARD_DIR}/../common/include
|
|
${CMAKE_BINARY_DIR}/include/arch/board)
|
|
endif()
|
|
endif()
|
|
|
|
if(NOT EXISTS ${CMAKE_BINARY_DIR}/include/arch/chip)
|
|
if(CONFIG_ARCH_CHIP_CUSTOM)
|
|
nuttx_create_symlink(${NUTTX_CHIP_ABS_DIR}/include
|
|
${CMAKE_BINARY_DIR}/include/arch/chip)
|
|
else()
|
|
nuttx_create_symlink(
|
|
${NUTTX_DIR}/arch/${CONFIG_ARCH}/include/${CONFIG_ARCH_CHIP}
|
|
${CMAKE_BINARY_DIR}/include/arch/chip)
|
|
endif()
|
|
endif()
|
|
|
|
# Optional symbolic links
|
|
|
|
# Target used to copy include/nuttx/lib/stdarg.h. If CONFIG_ARCH_STDARG_H is
|
|
# defined, then there is an architecture specific stdarg.h header file that will
|
|
# be included indirectly from include/lib/stdarg.h. But first, we have to copy
|
|
# stdarg.h from include/nuttx/. to include/.
|
|
|
|
if(CONFIG_ARCH_STDARG_H)
|
|
nuttx_create_symlink(${NUTTX_DIR}/include/nuttx/lib/stdarg.h
|
|
${CMAKE_BINARY_DIR}/include/stdarg.h)
|
|
else()
|
|
file(REMOVE ${CMAKE_BINARY_DIR}/include/stdarg.h)
|
|
endif()
|
|
|
|
# Target used to copy include/nuttx/lib/math.h. If CONFIG_ARCH_MATH_H is
|
|
# defined, then there is an architecture specific math.h header file that will
|
|
# be included indirectly from include/math.h. But first, we have to copy math.h
|
|
# from include/nuttx/. to include/. Logic within include/nuttx/lib/math.h will
|
|
# hand the redirection to the architecture- specific math.h header file.
|
|
#
|
|
# If the CONFIG_LIBM is defined, the Rhombus libm will be built at libc/math.
|
|
# Definitions and prototypes for the Rhombus libm are also contained in
|
|
# include/nuttx/lib/math.h and so the file must also be copied in that case.
|
|
#
|
|
# If neither CONFIG_ARCH_MATH_H nor CONFIG_LIBM is defined, then no math.h
|
|
# header file will be provided. You would want that behavior if (1) you don't
|
|
# use libm, or (2) you want to use the math.h and libm provided within your
|
|
# toolchain.
|
|
|
|
if(CONFIG_ARCH_MATH_H OR CONFIG_LIBM)
|
|
set(NEED_MATH_H true)
|
|
endif()
|
|
|
|
if(NEED_MATH_H)
|
|
nuttx_create_symlink(${NUTTX_DIR}/include/nuttx/lib/math.h
|
|
${CMAKE_BINARY_DIR}/include/math.h)
|
|
else()
|
|
file(REMOVE ${CMAKE_BINARY_DIR}/include/math.h)
|
|
endif()
|
|
|
|
# The float.h header file defines the properties of your floating point
|
|
# implementation. It would always be best to use your toolchain's float.h
|
|
# header file but if none is available, a default float.h header file will
|
|
# provided if this option is selected. However there is no assurance that the
|
|
# settings in this float.h are actually correct for your platform!
|
|
|
|
if(CONFIG_ARCH_FLOAT_H)
|
|
nuttx_create_symlink(${NUTTX_DIR}/include/nuttx/lib/float.h
|
|
${CMAKE_BINARY_DIR}/include/float.h)
|
|
else()
|
|
file(REMOVE ${CMAKE_BINARY_DIR}/include/float.h)
|
|
endif()
|
|
|
|
# Target used to copy include/nuttx/lib/setjmp.h. If CONFIG_ARCH_SETJMP_H is
|
|
# defined, then there is an architecture specific setjmp.h header file that will
|
|
# be included indirectly from include/lib/setjmp.h. But first, we have to copy
|
|
# setjmp.h from include/nuttx/. to include/.
|
|
|
|
if(CONFIG_ARCH_SETJMP_H)
|
|
nuttx_create_symlink(${NUTTX_DIR}/include/nuttx/lib/setjmp.h
|
|
${CMAKE_BINARY_DIR}/include/setjmp.h)
|
|
else()
|
|
file(REMOVE ${CMAKE_BINARY_DIR}/include/setjmp.h)
|
|
endif()
|
|
|
|
# Target used to copy include/nuttx/lib/stdbit.h. If CONFIG_ARCH_STDBIT_H or
|
|
# CONFIG_LIBC_STDBIT_GENERIC is set, copy stdbit.h to include/ for C23 bit
|
|
# utilities.
|
|
|
|
if(CONFIG_ARCH_STDBIT_H OR CONFIG_LIBC_STDBIT_GENERIC)
|
|
nuttx_create_symlink(${NUTTX_DIR}/include/nuttx/lib/stdbit.h
|
|
${CMAKE_BINARY_DIR}/include/stdbit.h)
|
|
else()
|
|
file(REMOVE ${CMAKE_BINARY_DIR}/include/stdbit.h)
|
|
endif()
|
|
|
|
# Add final context target that ties together all of the above The context
|
|
# target is invoked on each target build to assure that NuttX is properly
|
|
# configured. The basic configuration steps include creation of the the
|
|
# config.h and version.h header files in the include/nuttx directory and the
|
|
# establishment of symbolic links to configured directories.
|
|
|
|
add_custom_target(
|
|
nuttx_context
|
|
DEPENDS
|
|
${CMAKE_BINARY_DIR}/include/nuttx/config.h
|
|
${CMAKE_BINARY_DIR}/include/nuttx/version.h
|
|
$<$<BOOL:${CONFIG_ARCH_STDARG_H}>:${CMAKE_BINARY_DIR}/include/stdarg.h>
|
|
$<$<BOOL:${NEED_MATH_H}>:${CMAKE_BINARY_DIR}/include/math.h>
|
|
$<$<BOOL:${CONFIG_ARCH_FLOAT_H}>:${CMAKE_BINARY_DIR}/include/float.h>
|
|
$<$<BOOL:${CONFIG_ARCH_SETJMP_H}>:${CMAKE_BINARY_DIR}/include/setjmp.h>
|
|
$<$<BOOL:${CONFIG_ARCH_STDBIT_H}>:${CMAKE_BINARY_DIR}/include/stdbit.h>
|
|
$<$<BOOL:${CONFIG_LIBC_STDBIT_GENERIC}>:${CMAKE_BINARY_DIR}/include/stdbit.h>
|
|
)
|
|
|
|
# apps_context is a PHONY target used as an intermediate process to control the
|
|
# time order of context preparation actions of app building
|
|
add_custom_target(apps_context ALL DEPENDS nuttx_context)
|
|
|
|
# apps_post is a PHONY target used as an intermediate process to control the
|
|
# time order of all apps library has been built
|
|
add_custom_target(apps_post)
|