ВходНаше всё Теги codebook 无线电组件 Поиск Опросы Закон Пятница
10 мая
1371211 Топик полностью
evgeniy1294 (13.11.2023 10:52, просмотров: 187) ответил =AlexD= на И? Проблема большинства языков в том что они плохо в исполнение до компиляции умеют. А Сишечка и вовсе не умеет. И это никакими костылями не исправить. make по крайней мере прост и есть всегда. Все остальные костыли - не читаемы в принципе. Поэтому без разницы чем подпереть.
Что тут нечитаемого? Тоже самое придется указать и в make, ни на строчку короче не будет: 
toolchain("arm-none-eabi-gcc")
    set_kind("standalone")
    set_bindir("/usr/bin")
    set_sdkdir("/usr/arm-none-eabi/")
    
    set_toolset("cc",    "arm-none-eabi-gcc")
    set_toolset("cxx",   "arm-none-eabi-g++")
    set_toolset("ld",    "arm-none-eabi-g++")
    set_toolset("sh",    "arm-none-eabi-g++", "arm-none-eabi-gcc")
    set_toolset("ar",    "arm-none-eabi-ar")
    set_toolset("ex",    "arm-none-eabi-ar")
    set_toolset("strip", "arm-none-eabi-strip")
    set_toolset("as",    "arm-none-eabi-as")
    set_toolset("objcopy", "arm-none-eabi-objcopy")
    set_toolset("size", "arm-none-eabi-size")

    -- check toolchain
    on_check(function (toolchain)
      return import("lib.detect.find_tool")("arm-none-eabi-gcc")
    end)
    
    -- on load
    on_load(function (toolchain)
        -- set arch
        local march = "arm"
            
        -- init flags for c++ 
        toolchain:add("cxxflags", "-mthumb", "-fno-rtti", "-fno-exceptions", "-specs=nosys.specs", "-specs=nano.specs")
        toolchain:add("ldflags", "-Wl,--cref", "-specs=nosys.specs", "-specs=nano.specs")
    end)
toolchain_end()  

target("pbus_f4_disco")
    set_kind("binary")
    set_toolchains("arm-none-eabi-gcc")
    set_plat("cross")
    set_arch("arm")
    set_policy("check.auto_ignore_flags", false)
    
    -- Enable this target
    set_enabled(true)
    
    -- Set c code standard: c99, c++ code standard: c++11
    set_languages("c11", "cxx17")

    -- Optimization rules
    add_rules("mode.debug", "mode.minsizerel")
    
    -- Add C++ flags
    add_cxxflags("-mcpu=cortex-m4", "-mfloat-abi=hard", "-mfpu=fpv4-sp-d16", "-ggdb3" )
    
    -- Add ld flags
    add_ldflags("-T$(projectdir)/bsp/stm32f407g_disco/memory.ld", "-Wl,-Map=$(buildir)/cross/arm/$(mode)/blink_f4_disco.map", "-mcpu=cortex-m4", "-mfloat-abi=hard", "-mfpu=fpv4-sp-d16")
    
    -- Add files 
    add_files( "$(projectdir)/src/*.cpp", 
               "$(projectdir)/bsp/stm32f407g_disco/*.cpp",
               "$(projectdir)/lib/mppcore/src/cortex.cpp" )
    
    -- Add include directory
    add_includedirs( "$(projectdir)/src", 
                     "$(projectdir)/bsp/stm32f407g_disco/",
                     "$(projectdir)/lib/",
                     "$(projectdir)/lib/cmsis_5/CMSIS/Core/Include/",
                     "$(projectdir)/lib/cmsis_device_f4/Include/" )
    -- Postbuild
    after_build(function (target)
        toolchain = target:toolchain("arm-none-eabi-gcc")
        path = "$(buildir)/"..target:plat().."/"..target:arch().."/$(mode)/"
               
        -- Generate hex-file
        os.run(toolchain:tool("objcopy").. " -Oihex "..target:targetfile().." "..path..target:name()..".hex")
        os.run(toolchain:tool("objcopy").. " -Obinary "..target:targetfile().." "..path..target:name()..".bin")
               
        -- Size
        os.exec(toolchain:tool("size").." "..path..target:name())
        os.exec("echo")
    end)
target_end() --blink_f4_disco