# CMakeLists. # =========== #------------------------------------------------------------------------ # Author: Laurent von Allmen The 2024-01-01 # Modifs: # # Project: uKOS-X # Goal: Cmake file to set up the building for uKOS-X system. # # (c) 2025-20xx, Laurent von Allmen # --------------------------------- # __ ______ _____ # Edo. Franzi __ __/ //_/ __ \/ ___/ # 5-Route de Cheseaux / / / / ,< / / / /\__ \ # CH 1400 Cheseaux-Noréaz / /_/ / /| / /_/ /___/ / # \__,_/_/ |_\____//____/ # edo.franzi@ukos.ch # # 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. # #------------------------------------------------------------------------ cmake_minimum_required(VERSION 3.26) if(NOT DEFINED ENV{PATH_UKOS_KERNEL}) message( FATAL_ERROR "Environment variable PATH_UKOS_KERNEL is not defined." ) endif() option(USE_LLVM "Selection of toolchain" OFF) if(${USE_LLVM}) set(CMAKE_TOOLCHAIN_FILE $ENV{PATH_UKOS_KERNEL}/Ports/Mkfiles/Toolchains_cmake/llvm-arm.cmake) else() set(CMAKE_TOOLCHAIN_FILE $ENV{PATH_UKOS_KERNEL}/Ports/Mkfiles/Toolchains_cmake/gcc-cortex-m.cmake) endif() project( Nucleo_L4R5_Variant_Test VERSION 1.0 LANGUAGES C ) # Microcontroller description. Mandatory variables and include set(SOC STM32L4R5) set(CORE CORTEX_M4) # Project paths # - PATH_UKOS --> Main uKOS-X folder # - PATH_VARI --> folder holding CMakeLists.txt # - PATH_BASE --> Projects Root Base folder set(PATH_UKOS $ENV{PATH_UKOS_KERNEL}) cmake_path(GET CMAKE_SOURCE_DIR PARENT_PATH TARGET_DIR) set(PATH_BASE ${TARGET_DIR}/Base) set(PATH_VARI ${CMAKE_SOURCE_DIR}) set(PATH_TINYUSB ${PATH_UKOS}/Ports/Third_Party/TinyUSB) # Customisation of firmware copyright text add_compile_definitions( "uKOS_NAME=CMake" "uKOS_OWNER=(c) LvA" ) # Selection of script to transfer binary to SOC set(BURN jlinkexe) set(FAMILY STM32) set(PROFILE cdc_cdc) # Apply settings include($ENV{PATH_UKOS_KERNEL}/Ports/Mkfiles/Toolchains_cmake/proj_config.cmake) # Extra compilation options add_compile_options(-g3 # includes extra information for debugger -Os # OPTIMISATION ) # Sources # ------- # The really first pcs of code (privileged) set(FIRST_P ${PATH_UKOS}/Ports/EquatesModels/SOCs/${SOC}/Runtime/first.c ) # The runtime & commun components (privileged) (librtcb_p.a) set(RTCB_P ${PATH_UKOS}/Ports/EquatesModels/Generic/Runtime/crt0.c ${PATH_VARI}/Runtime/init.c ${PATH_BASE}/Runtime/exce.c ${PATH_BASE}/Runtime/cmns.c ${PATH_UKOS}/Boots/boot/boot.c ) set(RTCB_HIDE_P ${PATH_UKOS}/Ports/EquatesModels/Cores/${CORE}/Runtime/syscallDispatcher.c ) add_library(rtcb_p ${RTCB_P} ${RTCB_HIDE_P}) target_link_libraries(rtcb_p PUBLIC system_compiler_flags) # The uKernel components (privileged) (libkern_p.a) set(KERN_P ${PATH_UKOS}/Lib_kern/kern/kern.c ) set(KERN_HIDE_P ${PATH_UKOS}/Lib_kern/kern/mbox.c ${PATH_UKOS}/Lib_kern/kern/sema.c ${PATH_UKOS}/Lib_kern/kern/chls.c ${PATH_UKOS}/Lib_kern/kern/sign.c ${PATH_UKOS}/Lib_kern/kern/temp.c ${PATH_UKOS}/Lib_kern/kern/desc.c ${PATH_UKOS}/Lib_kern/kern/daem.c ${PATH_UKOS}/Lib_kern/kern/sche.c ${PATH_UKOS}/Lib_kern/kern/stat.c ${PATH_UKOS}/Lib_kern/kern/stop.c ${PATH_UKOS}/Lib_kern/kern/stim.c ${PATH_UKOS}/Lib_kern/kern/pool.c ${PATH_UKOS}/Lib_kern/kern/prcs.c ${PATH_UKOS}/Lib_kern/kern/buff.c ${PATH_UKOS}/Lib_kern/kern/xlib.c ${PATH_BASE}/Lib_kern/kern/stub_kern_kernel.c ) add_library(kern_p ${KERN_P} ${KERN_HIDE_P}) target_link_libraries(kern_p PUBLIC system_compiler_flags) # The uKernel components (user) (libkern_u.a) set(KERN_U ${PATH_UKOS}/Lib_kern/priv/priv.c ) set(KERN_HIDE_U ) add_library(kern_u ${KERN_U} ${KERN_HIDE_U}) target_link_libraries(kern_u PUBLIC system_compiler_flags) # The Lib_xxxx components (privileged) (liblibx_p.a) set(LIBX_P ${PATH_UKOS}/Lib_tbox/misc/misc.c ${PATH_UKOS}/Lib_tbox/glob/glob.c ${PATH_UKOS}/Lib_peri/wdog/wdog.c ${PATH_UKOS}/Lib_gene/syos/syos.c ${PATH_UKOS}/Lib_gene/reco/reco.c ${PATH_UKOS}/Lib_gene/memo/memo.c ${PATH_UKOS}/Lib_comm/comm/comm.c ${PATH_UKOS}/Lib_comm/urt0/urt0.c ${PATH_UKOS}/Lib_comm/urt1/urt1.c ${PATH_UKOS}/Lib_comm/urt2/urt2.c ${PATH_UKOS}/Lib_comm/cdc0/cdc0.c ${PATH_UKOS}/Lib_comm/cdc1/cdc1.c ) set(LIBX_HIDE_P ${PATH_BASE}/Lib_tbox/misc/stub_misc.c ${PATH_BASE}/Lib_tbox/glob/stub_glob.c ${PATH_BASE}/Lib_peri/wdog/stub_wdog.c ${PATH_BASE}/Lib_comm/urt0/stub_urt0_lpuart1.c ${PATH_BASE}/Lib_comm/urt1/stub_urt1_usart2.c ${PATH_BASE}/Lib_comm/urt2/stub_urt2_usart3.c ) add_library(libx_p ${LIBX_P} ${LIBX_HIDE_P}) target_link_libraries(libx_p PUBLIC system_compiler_flags) # The Lib_xxxx components (user) (liblibx_u.a) set(LIBX_U ${PATH_UKOS}/Lib_tbox/strg/strg.c ${PATH_UKOS}/Lib_gene/iotx/iotx.c ${PATH_UKOS}/Lib_gene/text/text.c ${PATH_UKOS}/Lib_neuro/mlp0/mlp0.c ) if(NOT USE_PICOLIBC) set(LIBX_U ${LIBX_U} ${PATH_UKOS}/Lib_cbox/nlib/nlib.c ) endif() set(LIBX_HIDE_U ) add_library(libx_u ${LIBX_U} ${LIBX_HIDE_U}) target_link_libraries(libx_u PUBLIC system_compiler_flags) # The process components (user) (libproc_u.a) set(PROC_U ${PATH_UKOS}/Processes/alive/alive.c ${PATH_UKOS}/Processes/TinyUSB/TinyUSB.c ${PATH_UKOS}/Processes/start_up/start_up.c ) set(PROC_HIDE_U ${PATH_BASE}/Processes/alive/stub_alive.c ${PATH_VARI}/Processes/start_up/stub_start_up.c ${PATH_VARI}/Processes/TinyUSB/stub_TinyUSB.c ) add_library(proc_u ${PROC_U} ${PROC_HIDE_U}) target_link_libraries(proc_u PUBLIC system_compiler_flags) # The tool components (user) (libtool_u.a) set(TOOL_U ${PATH_UKOS}/Tools/bangla/BaNgLa.c ${PATH_UKOS}/Tools/console/console.c ${PATH_UKOS}/Tools/cycle/cycle.c ${PATH_UKOS}/Tools/dump/dump.c ${PATH_UKOS}/Tools/dumplog/dumplog.c ${PATH_UKOS}/Tools/dumptrace/dumptrace.c ${PATH_UKOS}/Tools/echo/echo.c ${PATH_UKOS}/Tools/fill/fill.c ${PATH_UKOS}/Tools/hexloader/hexloader.c ${PATH_UKOS}/Tools/kill/kill.c ${PATH_UKOS}/Tools/list/list.c ${PATH_UKOS}/Tools/man/man.c ${PATH_UKOS}/Tools/memory/memory.c ${PATH_UKOS}/Tools/mpy/mpy.c ${PATH_UKOS}/Tools/process/process.c ${PATH_UKOS}/Tools/object/object.c ${PATH_UKOS}/Tools/recomm/recomm.c ${PATH_UKOS}/Tools/restart/restart.c ${PATH_UKOS}/Tools/rnd/rnd.c ${PATH_UKOS}/Tools/run/run.c ${PATH_UKOS}/Tools/semaphore/semaphore.c ${PATH_UKOS}/Tools/sloader/sloader.c ${PATH_UKOS}/Tools/szkern/szkern.c ${PATH_UKOS}/Tools/uKOS/uKOS.c ${PATH_UKOS}/Tools/wkcomm/wkcomm.c ) set(TOOL_HIDE_U ) add_library(tool_u ${TOOL_U} ${TOOL_HIDE_U}) target_link_libraries(tool_u PUBLIC system_compiler_flags) # The engine component find_library(MICROPYTHON MicroPython ${PATH_UKOS}/Ports/Third_Party/MicroPython/Library/${CORE}) # The TinyUSB components (libTinyUSB.a) include_directories( ${PATH_TINYUSB}/Library/SOCs/${SOC}/${PROFILE} ${PATH_TINYUSB}/uKOS_Interface/OSAL ${PATH_TINYUSB}/uKOS_Interface/Includes/mcu/${FAMILY} ${PATH_TINYUSB}/TinyUSB-current/src) add_subdirectory( ${PATH_TINYUSB} ${CMAKE_CURRENT_BINARY_DIR}/TinyUSB ) # All the uKOS-X library components set(UKOS_COMPONENTS rtcb_p kern_p kern_u libx_p libx_u proc_u tool_u ${MICROPYTHON} TinyUSB) # The included module include(${PATH_UKOS}/Ports/Mkfiles/system.cmake)