# SPDX-License-Identifier: Apache-2.0 if(EXISTS ${CMAKE_CURRENT_LIST_DIR}/${CMAKE_HOST_SYSTEM_NAME}.${CMAKE_HOST_SYSTEM_PROCESSOR}.cmake) # @Intent: Set necessary compiler & linker options for this specific host architecture & OS include(${CMAKE_HOST_SYSTEM_NAME}.${CMAKE_HOST_SYSTEM_PROCESSOR}.cmake) else() if (CONFIG_64BIT) # some gcc versions fail to build without -fPIC zephyr_compile_options(-m64 -fPIC) zephyr_link_libraries(-m64) else () zephyr_compile_options(-m32) zephyr_link_libraries(-m32) endif () endif() zephyr_compile_options( ${ARCH_FLAG} -include ${ZEPHYR_BASE}/arch/posix/include/posix_cheats.h ) # @Intent: Obtain compiler specific flags for no freestanding compilation zephyr_compile_options($) zephyr_include_directories(${BOARD_DIR}) if (CONFIG_GPROF) zephyr_compile_options($) zephyr_link_libraries($) endif() zephyr_compile_definitions(_POSIX_C_SOURCE=200809 _XOPEN_SOURCE=600 _XOPEN_SOURCE_EXTENDED) zephyr_ld_options( -ldl -pthread ) # About the -include directive: The reason to do it this way, is because in this # manner it is transparent to the application. Otherwise posix_cheats.h needs to # be included in all the applications' files which define main( ), and in any # app file which uses the pthreads like API provided by Zephyr # ( include/posix/pthread.h / kernel/pthread.c ) [And any future API added to # Zephyr which will clash with the native POSIX API] . It would also need to # be included in a few zephyr kernel files. # # Support for the LLVM Sanitizer toolchain instrumentation frameworks # (supported by current gcc's as well) # if(CONFIG_ASAN) list(APPEND LLVM_SANITIZERS "address") endif() if(CONFIG_MSAN) list(APPEND LLVM_SANITIZERS "memory") endif() if(CONFIG_UBSAN) list(APPEND LLVM_SANITIZERS "undefined") endif() if(CONFIG_ASAN_RECOVER) zephyr_compile_options(-fsanitize-recover=all) endif() if(CONFIG_ARCH_POSIX_LIBFUZZER) list(APPEND LLVM_SANITIZERS "fuzzer") if(NOT CONFIG_64BIT) # On i386, libfuzzer seems to dynamically relocate the binary, so # we need to emit PIC code. This limitation is undocumented and # poorly understood... zephyr_compile_options(-fPIC) endif() endif() list(JOIN LLVM_SANITIZERS "," LLVM_SANITIZERS_ARG) if(NOT ${LLVM_SANITIZERS_ARG} STREQUAL "") set(LLVM_SANITIZERS_ARG "-fsanitize=${LLVM_SANITIZERS_ARG}") zephyr_compile_options("${LLVM_SANITIZERS_ARG}") zephyr_link_libraries("${LLVM_SANITIZERS_ARG}") endif() add_subdirectory(core)