Skip to content
Snippets Groups Projects
Makefile.dep 18.5 KiB
Newer Older
  • Learn to ignore specific revisions
  • #
    OLD_USEMODULE := $(sort $(USEMODULE))
    OLD_USEPKG := $(sort $(USEPKG))
    
    # include board dependencies
    -include $(RIOTBOARD)/$(BOARD)/Makefile.dep
    
    # include external modules dependencies
    # processed before RIOT ones to be evaluated before the 'default' rules.
    -include $(EXTERNAL_MODULE_DIRS:%=%/Makefile.dep)
    
    
    # pull dependencies from sys and drivers
    include $(RIOTBASE)/sys/Makefile.dep
    
    include $(RIOTBASE)/drivers/Makefile.dep
    
    ifneq (,$(filter ndn-riot,$(USEPKG)))
      USEMODULE += gnrc
      USEMODULE += xtimer
      USEMODULE += random
      USEMODULE += hashes
      USEPKG += micro-ecc
    endif
    
    
    ifneq (,$(filter csma_sender,$(USEMODULE)))
    
      USEMODULE += random
      USEMODULE += xtimer
    endif
    
    
    ifneq (,$(filter gnrc_mac,$(USEMODULE)))
      USEMODULE += gnrc_priority_pktqueue
      USEMODULE += csma_sender
    
      USEMODULE += evtimer
    
    ifneq (,$(filter gnrc_gomach,$(USEMODULE)))
      USEMODULE += gnrc_netif
      USEMODULE += random
      USEMODULE += xtimer
      USEMODULE += gnrc_mac
      FEATURES_REQUIRED += periph_rtt
    endif
    
    
    ifneq (,$(filter nhdp,$(USEMODULE)))
    
    Martine Lenders's avatar
    Martine Lenders committed
      USEMODULE += sock_udp
    
      USEMODULE += xtimer
    
      USEMODULE += oonf_rfc5444
    endif
    
    
    Luminita's avatar
    Luminita committed
    ifneq (,$(filter sntp,$(USEMODULE)))
      USEMODULE += gnrc_sock_udp
      USEMODULE += xtimer
    endif
    
    
    ifneq (,$(filter gnrc_netdev_default,$(USEMODULE)))
      USEMODULE += netdev_default
    
      USEMODULE += gnrc_netif
    
    ifneq (,$(filter netdev_ieee802154,$(USEMODULE)))
    
    ifneq (,$(filter gnrc_uhcpc,$(USEMODULE)))
    
      USEMODULE += uhcpc
      USEMODULE += gnrc_sock_udp
      USEMODULE += fmt
    
    ifneq (,$(filter uhcpc,$(USEMODULE)))
      USEMODULE += posix
    endif
    
    
    ifneq (,$(filter nordic_softdevice_ble,$(USEPKG)))
    
      USEMODULE += softdevice_handler
      USEMODULE += ble_common
      USEMODULE += ble_6lowpan
      USEMODULE += gnrc_sixlowpan
      USEMODULE += gnrc_sixlowpan_iphc
    
      USEMODULE += gnrc_ipv6_nib_6ln
    
      USEMODULE += gnrc_ipv6_default
    
      # prevent application from being a router
      # TODO: maybe find a nicer solution in future build system update
    
      _ROUTER_MODULES = gnrc_ipv6_router% gnrc_rpl netstats_rpl auto_init_gnrc_rpl
      ifneq (,$(filter $(_ROUTER_MODULES),$(USEMODULE)))
        $(warning nordic_softdevice_ble: Disabling router modules:\
          $(filter $(_ROUTER_MODULES),$(USEMODULE)))
      endif
      USEMODULE := $(filter-out $(_ROUTER_MODULES),$(USEMODULE))
    
    Vincent Dupont's avatar
    Vincent Dupont committed
    ifneq (,$(filter gnrc_%,$(filter-out gnrc_netapi gnrc_netreg gnrc_netif% gnrc_pkt%,$(USEMODULE))))
    
      USEMODULE += gnrc
    endif
    
    
    ifneq (,$(filter gnrc_sock_%,$(USEMODULE)))
      USEMODULE += gnrc_sock
    endif
    
    
    ifneq (,$(filter gnrc_sock_ip,$(USEMODULE)))
      USEMODULE += sock_ip
    endif
    
    
    ifneq (,$(filter gnrc_sock_udp,$(USEMODULE)))
      USEMODULE += gnrc_udp
      USEMODULE += random     # to generate random ports
    
      USEMODULE += sock_udp
    
    endif
    
    ifneq (,$(filter gnrc_sock,$(USEMODULE)))
      USEMODULE += gnrc_netapi_mbox
    
      USEMODULE += sock
    
    ifneq (,$(filter gnrc_netapi_mbox,$(USEMODULE)))
      USEMODULE += core_mbox
    endif
    
    
    ifneq (,$(filter netdev_tap,$(USEMODULE)))
    
    Oleg Hahm's avatar
    Oleg Hahm committed
      USEMODULE += netif
    
      USEMODULE += netdev_eth
    
    ifneq (,$(filter gnrc_tftp,$(USEMODULE)))
      USEMODULE += gnrc_udp
      USEMODULE += xtimer
    endif
    
    
    ifneq (,$(filter gnrc_rpl_p2p,$(USEMODULE)))
      USEMODULE += gnrc_rpl
    endif
    
    
    ifneq (,$(filter gnrc_rpl,$(USEMODULE)))
    
      USEMODULE += gnrc_icmpv6
    
      USEMODULE += gnrc_ipv6_nib
    
      USEMODULE += trickle
    
      USEMODULE += xtimer
    
      USEMODULE += evtimer
    
    ifneq (,$(filter trickle,$(USEMODULE)))
    
    ifneq (,$(filter gnrc_netif,$(USEMODULE)))
      USEMODULE += netif
    
      USEMODULE += fmt
    
      ifneq (,$(filter netdev_ieee802154,$(USEMODULE)))
        USEMODULE += gnrc_netif_ieee802154
      endif
      ifneq (,$(filter netdev_eth,$(USEMODULE)))
        USEMODULE += gnrc_netif_ethernet
      endif
    
    ifneq (,$(filter ieee802154 nrfmin esp_now gnrc_sixloenc,$(USEMODULE)))
    
      ifneq (,$(filter gnrc_ipv6, $(USEMODULE)))
        USEMODULE += gnrc_sixlowpan
    
      ifneq (,$(filter gnrc_ipv6_router, $(USEMODULE)))
    
        USEMODULE += gnrc_sixlowpan_router
    
      ifneq (,$(filter gnrc_ipv6_default, $(USEMODULE)))
        USEMODULE += gnrc_sixlowpan_default
    
      ifneq (,$(filter gnrc_ipv6_router_default, $(USEMODULE)))
    
        USEMODULE += gnrc_sixlowpan_router_default
    
      ifneq (,$(filter lwip%, $(USEMODULE)))
        USEMODULE += lwip_sixlowpan
      endif
    
    ifneq (,$(filter gnrc_sixlowpan_default,$(USEMODULE)))
      USEMODULE += gnrc_ipv6_default
    
      USEMODULE += gnrc_ipv6_nib_6ln
    
      USEMODULE += gnrc_sixlowpan
      USEMODULE += gnrc_sixlowpan_frag
      USEMODULE += gnrc_sixlowpan_iphc
    
    ifneq (,$(filter gnrc_sixlowpan_router_default,$(USEMODULE)))
      USEMODULE += gnrc_ipv6_router_default
    
      USEMODULE += gnrc_ipv6_nib_6lr
    
      USEMODULE += gnrc_sixlowpan_router
      USEMODULE += gnrc_sixlowpan_frag
      USEMODULE += gnrc_sixlowpan_iphc
    endif
    
    
    ifneq (,$(filter gnrc_sixlowpan_border_router_default,$(USEMODULE)))
    
      USEMODULE += gnrc_ipv6_nib_6lbr
    
      USEMODULE += gnrc_ipv6_router_default
      USEMODULE += gnrc_sixlowpan_router
      USEMODULE += gnrc_sixlowpan_frag
      USEMODULE += gnrc_sixlowpan_iphc
    endif
    
    
    ifneq (,$(filter gnrc_sixlowpan_router,$(USEMODULE)))
    
      USEMODULE += gnrc_ipv6_router
    
    ifneq (,$(filter gnrc_sixlowpan_frag,$(USEMODULE)))
      USEMODULE += gnrc_sixlowpan
    
    ifneq (,$(filter gnrc_sixlowpan_iphc,$(USEMODULE)))
      USEMODULE += gnrc_sixlowpan
      USEMODULE += gnrc_sixlowpan_ctx
    
      USEMODULE += gnrc_sixlowpan_iphc_nhc
    
    ifneq (,$(filter gnrc_sixlowpan,$(USEMODULE)))
      USEMODULE += gnrc_ipv6
    
      USEMODULE += sixlowpan
    
    ifneq (,$(filter gnrc_sixlowpan_ctx,$(USEMODULE)))
    
      USEMODULE += ipv6_addr
    
    ifneq (,$(filter gnrc_ipv6_default,$(USEMODULE)))
      USEMODULE += gnrc_ipv6
      USEMODULE += gnrc_icmpv6
    
    ifneq (,$(filter gnrc_ipv6_router_default,$(USEMODULE)))
      USEMODULE += gnrc_ipv6_router
      USEMODULE += gnrc_icmpv6
    
    ifneq (,$(filter gnrc_ndp,$(USEMODULE)))
    
      USEMODULE += gnrc_netif
    
    ifneq (,$(filter gnrc_icmpv6_echo,$(USEMODULE)))
      USEMODULE += gnrc_icmpv6
    
    ifneq (,$(filter gnrc_icmpv6_error,$(USEMODULE)))
      USEMODULE += gnrc_icmpv6
    endif
    
    
    ifneq (,$(filter gnrc_icmpv6,$(USEMODULE)))
    
      USEMODULE += inet_csum
    
      USEMODULE += gnrc_ipv6
    
      USEMODULE += icmpv6
    
    ifneq (,$(filter gnrc_rpl_srh,$(USEMODULE)))
    
      USEMODULE += gnrc_ipv6_ext_rh
    
    ifneq (,$(filter gnrc_ipv6_ext_rh,$(USEMODULE)))
      USEMODULE += gnrc_ipv6_ext
    
    ifneq (,$(filter gnrc_ipv6_ext,$(USEMODULE)))
      USEMODULE += gnrc_ipv6
    
    ifneq (,$(filter gnrc_ipv6_whitelist,$(USEMODULE)))
      USEMODULE += ipv6_addr
    endif
    
    
    ifneq (,$(filter gnrc_ipv6_blacklist,$(USEMODULE)))
      USEMODULE += ipv6_addr
    endif
    
    
    ifneq (,$(filter gnrc_ipv6_router,$(USEMODULE)))
      USEMODULE += gnrc_ipv6
    
      USEMODULE += gnrc_ipv6_nib_router
    
    ifneq (,$(filter gnrc_ipv6,$(USEMODULE)))
    
      USEMODULE += inet_csum
    
      USEMODULE += ipv6_addr
    
      USEMODULE += gnrc_ipv6_hdr
    
      USEMODULE += gnrc_ipv6_nib
    
      USEMODULE += gnrc_netif
    
    ifneq (,$(filter gnrc_ipv6_hdr,$(USEMODULE)))
    
      USEMODULE += gnrc_pktbuf
    
    ifneq (,$(filter sixlowpan,$(USEMODULE)))
      USEMODULE += ipv6_hdr
    endif
    
    
    ifneq (,$(filter ipv6_hdr,$(USEMODULE)))
      USEMODULE += inet_csum
    
      USEMODULE += ipv6_addr
    
    ifneq (,$(filter gnrc_ipv6_nib_6lbr,$(USEMODULE)))
      USEMODULE += gnrc_ipv6_nib_6lr
    endif
    
    ifneq (,$(filter gnrc_ipv6_nib_6lr,$(USEMODULE)))
      USEMODULE += gnrc_ipv6_nib_6ln
      USEMODULE += gnrc_ipv6_nib_router
    endif
    
    ifneq (,$(filter gnrc_ipv6_nib_6ln,$(USEMODULE)))
      USEMODULE += gnrc_ipv6_nib
    
      USEMODULE += gnrc_sixlowpan_nd
    
    ifneq (,$(filter gnrc_ipv6_nib_dns,$(USEMODULE)))
      USEMODULE += gnrc_ipv6_nib
    endif
    
    
    ifneq (,$(filter gnrc_ipv6_nib_router,$(USEMODULE)))
      USEMODULE += gnrc_ipv6_nib
    endif
    
    
    ifneq (,$(filter gnrc_ipv6_nib,$(USEMODULE)))
    
      USEMODULE += evtimer
    
      USEMODULE += gnrc_ndp
    
      USEMODULE += gnrc_netif
    
      USEMODULE += ipv6_addr
      USEMODULE += random
    
      ifneq (,$(filter sock_dns,$(USEMODULE)))
        USEMODULE += gnrc_ipv6_nib_dns
      endif
    
    ifneq (,$(filter gnrc_udp,$(USEMODULE)))
    
      USEMODULE += inet_csum
    
      USEMODULE += udp
    
    ifneq (,$(filter gnrc_tcp,$(USEMODULE)))
      USEMODULE += inet_csum
      USEMODULE += random
    
      USEMODULE += tcp
    
      USEMODULE += xtimer
    
    ifneq (,$(filter gnrc_nettest,$(USEMODULE)))
      USEMODULE += gnrc_netapi
      USEMODULE += gnrc_netreg
      USEMODULE += gnrc_netif
      USEMODULE += gnrc_pktbuf
    
      USEMODULE += xtimer
    
    ifneq (,$(filter gnrc_pktdump,$(USEMODULE)))
      USEMODULE += gnrc_pktbuf
    
    ifneq (,$(filter od,$(USEMODULE)))
      USEMODULE += fmt
    endif
    
    
    ifneq (,$(filter od_string,$(USEMODULE)))
      USEMODULE += od
    endif
    
    
    ifneq (,$(filter newlib_gnu_source,$(USEMODULE)))
      USEMODULE += newlib
    endif
    
    
    ifneq (,$(filter newlib_nano,$(USEMODULE)))
      USEMODULE += newlib
    endif
    
    
    ifneq (,$(filter newlib,$(USEMODULE)))
    
      # allow custom newlib syscalls implementations by adding
      # newlib_syscalls_XXX to USEMODULE
      ifeq (,$(filter newlib_syscalls_%,$(USEMODULE)))
        USEMODULE += newlib_syscalls_default
      endif
    
      ifeq (,$(filter stdio_rtt,$(USEMODULE)))
    
        USEMODULE += stdio_uart
    
    ifneq (,$(filter posix_sockets,$(USEMODULE)))
    
      USEMODULE += bitfield
    
      USEMODULE += random
    
      USEMODULE += posix
      USEMODULE += xtimer
    
    ifneq (,$(filter stdio_rtt,$(USEMODULE)))
    
    ifneq (,$(filter stdio_uart,$(USEMODULE)))
    
      USEMODULE += isrpipe
    
      FEATURES_REQUIRED += periph_uart
    
    Kaspar Schleiser's avatar
    Kaspar Schleiser committed
    ifneq (,$(filter isrpipe,$(USEMODULE)))
      USEMODULE += tsrb
    endif
    
    
    ifneq (,$(filter shell_commands,$(USEMODULE)))
      ifneq (,$(filter fib,$(USEMODULE)))
        USEMODULE += posix
      endif
    
    ifneq (,$(filter posix_semaphore,$(USEMODULE)))
    
    Martine Lenders's avatar
    Martine Lenders committed
      USEMODULE += sema
    
      USEMODULE += xtimer
    
    ifneq (,$(filter posix_time,$(USEMODULE)))
      USEMODULE += xtimer
    endif
    
    
    ifneq (,$(filter lwip_sixlowpan,$(USEMODULE)))
      USEMODULE += lwip_ipv6_autoconfig
    endif
    
    
    ifneq (,$(filter lwip_ipv6_autoconfig lwip_ipv6_mld,$(USEMODULE)))
    
      USEMODULE += lwip_ipv6
    endif
    
    ifneq (,$(filter lwip_ipv6,$(USEMODULE)))
      USEMODULE += random
    endif
    
    ifneq (,$(filter lwip_udplite,$(USEMODULE)))
      USEMODULE += lwip_udp
    endif
    
    ifneq (,$(filter lwip_sock_%,$(USEMODULE)))
      USEMODULE += lwip_sock
    endif
    
    ifneq (,$(filter lwip_sock_ip,$(USEMODULE)))
      USEMODULE += lwip_raw
    
      USEMODULE += sock_ip
    
    ifneq (,$(filter lwip_sock_tcp,$(USEMODULE)))
      USEMODULE += lwip_tcp
    
      USEMODULE += sock_tcp
    
    ifneq (,$(filter lwip_sock_udp,$(USEMODULE)))
      USEMODULE += lwip_udp
    
      USEMODULE += sock_udp
    
    ifneq (,$(filter lwip_%,$(USEMODULE)))
    
      USEPKG += lwip
    
      USEMODULE += core_mbox
    
      USEMODULE += lwip_api
    
      USEMODULE += lwip_contrib
    
      USEMODULE += lwip_core
    
      USEMODULE += lwip_netif
      ifeq (,$(filter lwip_ipv4 lwip_ipv6,$(USEMODULE)))
        USEMODULE += lwip_ipv4
      endif
      ifeq (,$(filter lwip_tcp lwip_udp lwip_udplite,$(USEMODULE)))
        USEMODULE += lwip_raw
      endif
    
      ifneq (,$(filter netdev_eth,$(USEMODULE)))
        USEMODULE += lwip_ethernet
      endif
    
    endif
    
    ifneq (,$(filter lwip_ppp,$(USEMODULE)))
      USEMODULE += lwip_polarssl
    
    ifneq (,$(filter lwip_contrib,$(USEMODULE)))
      USEMODULE += sema
    
      USEMODULE += xtimer
    
    Martine Lenders's avatar
    Martine Lenders committed
    ifneq (,$(filter sema,$(USEMODULE)))
    
    Martine Lenders's avatar
    Martine Lenders committed
      USEMODULE += xtimer
    
    ifneq (,$(filter libfixmath-unittests,$(USEMODULE)))
    
      USEMODULE += libfixmath
    
    ifneq (,$(filter luid,$(USEMODULE)))
      FEATURES_OPTIONAL += periph_cpuid
    endif
    
    
    ifneq (,$(filter fib,$(USEMODULE)))
    
      USEMODULE += universal_address
    
      USEMODULE += xtimer
    
    ifneq (,$(filter oonf_rfc5444,$(USEMODULE)))
      USEMODULE += oonf_common
    endif
    
    
    ifneq (,$(filter oonf_common,$(USEMODULE)))
    
      USEPKG += oonf_api
    
      USEMODULE += posix_sockets
    
    # if any log_* is used, also use LOG pseudomodule
    ifneq (,$(filter log_%,$(USEMODULE)))
      USEMODULE += log
    endif
    
    
    ifneq (,$(filter cpp11-compat,$(USEMODULE)))
    
      USEMODULE += xtimer
    
      USEMODULE += timex
      FEATURES_REQUIRED += cpp
    endif
    
    ifneq (,$(filter gnrc,$(USEMODULE)))
      USEMODULE += gnrc_netapi
      USEMODULE += gnrc_netreg
      USEMODULE += gnrc_netif
      USEMODULE += gnrc_netif_hdr
      USEMODULE += gnrc_pktbuf
    
    ifneq (,$(filter gnrc_pktbuf, $(USEMODULE)))
      ifeq (,$(filter gnrc_pktbuf_%, $(USEMODULE)))
        USEMODULE += gnrc_pktbuf_static
      endif
    
      ifeq (gnrc_pktbuf_cmd,$(filter gnrc_pktbuf_%, $(USEMODULE)))
        USEMODULE += gnrc_pktbuf_static
      endif
    
      USEMODULE += gnrc_pkt
    
    endif
    
    ifneq (,$(filter gnrc_pktbuf_%, $(USEMODULE)))
      USEMODULE += gnrc_pktbuf # make MODULE_GNRC_PKTBUF macro available for all implementations
    endif
    
    
    ifneq (,$(filter gnrc_netif_%,$(USEMODULE)))
      USEMODULE += gnrc_netif
    endif
    
    
    ifneq (,$(filter netstats_%, $(USEMODULE)))
      USEMODULE += netstats
    endif
    
    
    ifneq (,$(filter gnrc_lwmac,$(USEMODULE)))
    
      USEMODULE += gnrc_netif
    
      USEMODULE += gnrc_mac
      FEATURES_REQUIRED += periph_rtt
    endif
    
    
    ifneq (,$(filter pthread,$(USEMODULE)))
    
      USEMODULE += xtimer
      USEMODULE += timex
    
    
    ifneq (,$(filter schedstatistics,$(USEMODULE)))
    
    ifneq (,$(filter arduino,$(USEMODULE)))
    
      FEATURES_REQUIRED += arduino
      USEMODULE += xtimer
    
    ifneq (,$(filter xtimer,$(USEMODULE)))
    
      FEATURES_REQUIRED += periph_timer
      USEMODULE += div
    
    ifneq (,$(filter saul,$(USEMODULE)))
      USEMODULE += phydat
    endif
    
    
    ifneq (,$(filter saul_reg,$(USEMODULE)))
      USEMODULE += saul
    endif
    
    ifneq (,$(filter saul_default,$(USEMODULE)))
      USEMODULE += saul
    
      USEMODULE += saul_reg
      USEMODULE += auto_init_saul
    
    ifneq (,$(filter saul_adc,$(USEMODULE)))
      FEATURES_REQUIRED += periph_adc
    endif
    
    ifneq (,$(filter saul_gpio,$(USEMODULE)))
      FEATURES_REQUIRED += periph_gpio
    endif
    
    
    ifneq (,$(filter saul,$(USEMODULE)))
      USEMODULE += phydat
    endif
    
    ifneq (,$(filter phydat,$(USEMODULE)))
      USEMODULE += fmt
    endif
    
    ifneq (,$(filter evtimer,$(USEMODULE)))
      USEMODULE += xtimer
    endif
    
    
    ifneq (,$(filter can_linux,$(USEMODULE)))
    
      LINKFLAGS += -lsocketcan
    
    Vincent Dupont's avatar
    Vincent Dupont committed
    ifneq (,$(filter can,$(USEMODULE)))
      USEMODULE += can_raw
    
      USEMODULE += auto_init_can
    
    Vincent Dupont's avatar
    Vincent Dupont committed
      ifneq (,$(filter can_mbox,$(USEMODULE)))
        USEMODULE += core_mbox
      endif
      USEMODULE += gnrc_pktbuf_static
    endif
    
    
    Vincent Dupont's avatar
    Vincent Dupont committed
    ifneq (,$(filter can_isotp,$(USEMODULE)))
      USEMODULE += xtimer
    endif
    
    
    ifneq (,$(filter conn_can,$(USEMODULE)))
      USEMODULE += can
      USEMODULE += can_mbox
      USEMODULE += xtimer
    endif
    
    
    ifneq (,$(filter puf_sram,$(USEMODULE)))
      USEMODULE += hashes
      USEMODULE += random
      FEATURES_REQUIRED += puf_sram
    endif
    
    
    ifneq (,$(filter random,$(USEMODULE)))
    
      # select default prng
      ifeq (,$(filter prng_%,$(USEMODULE)))
        USEMODULE += prng_tinymt32
      endif
    
      ifneq (,$(filter prng_fortuna,$(USEMODULE)))
        USEMODULE += fortuna
        USEMODULE += hashes
        USEMODULE += crypto
        USEMODULE += xtimer
      endif
    
    
      ifneq (,$(filter prng_tinymt32,$(USEMODULE)))
        USEMODULE += tinymt32
      endif
    
      ifneq (,$(filter prng_sha1prng,$(USEMODULE)))
        USEMODULE += hashes
      endif
    
    
    ifneq (,$(filter asymcute,$(USEMODULE)))
      USEMODULE += sock_udp
      USEMODULE += sock_util
      USEMODULE += random
      USEMODULE += event_timeout
      USEMODULE += event_callback
    endif
    
    
    ifneq (,$(filter emcute,$(USEMODULE)))
      USEMODULE += core_thread_flags
      USEMODULE += sock_udp
      USEMODULE += xtimer
    endif
    
    
    ifneq (,$(filter constfs,$(USEMODULE)))
      USEMODULE += vfs
    endif
    
    
    ifneq (,$(filter devfs,$(USEMODULE)))
      USEMODULE += vfs
    endif
    
    
    ifneq (,$(filter vfs,$(USEMODULE)))
    
      ifeq (native, $(BOARD))
        USEMODULE += native_vfs
      endif
    
    ifneq (,$(filter sock_dns,$(USEMODULE)))
      USEMODULE += sock_util
    
      USEMODULE += posix
    
    ifneq (,$(filter sock_util,$(USEMODULE)))
      USEMODULE += posix
    
      USEMODULE += fmt
      USEMODULE += sock_udp
    
    ifneq (,$(filter event_%,$(USEMODULE)))
      USEMODULE += event
    endif
    
    ifneq (,$(filter event_timeout,$(USEMODULE)))
      USEMODULE += xtimer
    endif
    
    ifneq (,$(filter event,$(USEMODULE)))
      USEMODULE += core_thread_flags
    endif
    
    
    ifneq (,$(filter spiffs,$(USEMODULE)))
    
      USEPKG += spiffs
      USEMODULE += vfs
      USEMODULE += spiffs_fs
      USEMODULE += mtd
    
    ifneq (,$(filter littlefs,$(USEMODULE)))
      USEPKG += littlefs
      USEMODULE += vfs
      USEMODULE += littlefs_fs
      USEMODULE += mtd
    endif
    
    ifneq (,$(filter l2filter_%,$(USEMODULE)))
      USEMODULE += l2filter
    endif
    
    
    ifneq (,$(filter gcoap,$(USEMODULE)))
    
      USEMODULE += nanocoap
      USEMODULE += gnrc_sock_udp
    
      USEMODULE += sock_util
    
    ifneq (,$(filter luid,$(USEMODULE)))
      FEATURES_OPTIONAL += periph_cpuid
    endif
    
    
    ifneq (,$(filter nanocoap_%,$(USEMODULE)))
      USEMODULE += nanocoap
    endif
    
    
    ifneq (,$(filter fatfs_vfs,$(USEMODULE)))
    
      USEPKG += fatfs
      USEMODULE += vfs
    
    ifneq (,$(filter benchmark,$(USEMODULE)))
      USEMODULE += xtimer
    endif
    
    
    Hauke Petersen's avatar
    Hauke Petersen committed
    ifneq (,$(filter skald_%,$(USEMODULE)))
      USEMODULE += skald
    endif
    
    ifneq (,$(filter skald,$(USEMODULE)))
      FEATURES_REQUIRED += radio_ble
      USEMODULE += xtimer
      USEMODULE += random
    endif
    
    ifneq (,$(filter cord_epsim_standalone,$(USEMODULE)))
      USEMODULE += cord_epsim
    
    ifneq (,$(filter cord_epsim,$(USEMODULE)))
    
      USEMODULE += cord_common
    
      USEMODULE += gcoap
    
    ifneq (,$(filter cord_ep_standalone,$(USEMODULE)))
      USEMODULE += cord_ep
    
      USEMODULE += xtimer
    endif
    
    
    ifneq (,$(filter cord_ep,$(USEMODULE)))
    
      USEMODULE += cord_common
    
      USEMODULE += core_thread_flags
      USEMODULE += gcoap
      ifneq (,$(filter shell_commands,$(USEMODULE)))
        USEMODULE += sock_util
      endif
    endif
    
    
    ifneq (,$(filter cord_common,$(USEMODULE)))
    
      USEMODULE += fmt
    
    ifneq (,$(filter tlsf-malloc,$(USEMODULE)))
      USEPKG += tlsf
    endif
    
    
    ifneq (,$(filter uuid,$(USEMODULE)))
      USEMODULE += hashes
      USEMODULE += random
    
      USEMODULE += fmt
    
    ifneq (,$(filter riotboot_hdr, $(USEMODULE)))
      USEMODULE += checksum
      USEMODULE += riotboot
    endif
    
    
    # Enable periph_gpio when periph_gpio_irq is enabled
    ifneq (,$(filter periph_gpio_irq,$(USEMODULE)))
      FEATURES_REQUIRED += periph_gpio
    endif
    
    
    ifneq (,$(filter riotboot_slot, $(USEMODULE)))
      USEMODULE += riotboot_hdr
    endif
    
    
    # always select gpio (until explicit dependencies are sorted out)
    FEATURES_OPTIONAL += periph_gpio
    
    
    # always select power management if available
    FEATURES_OPTIONAL += periph_pm
    
    
    # include package dependencies
    -include $(USEPKG:%=$(RIOTPKG)/%/Makefile.dep)
    
    
    # remove required features from optional features
    FEATURES_OPTIONAL := $(filter-out $(FEATURES_REQUIRED),$(FEATURES_OPTIONAL))
    
    # add all optional but provided features to the list of used features
    FEATURES_USED := $(sort $(FEATURES_REQUIRED) $(filter $(FEATURES_OPTIONAL),$(FEATURES_PROVIDED)))
    
    # all periph features correspond to a periph submodule
    USEMODULE += $(filter periph_%,$(FEATURES_USED))
    
    
    # recursively catch transitive dependencies
    USEMODULE := $(sort $(USEMODULE))
    USEPKG := $(sort $(USEPKG))
    ifneq ($(OLD_USEMODULE) $(OLD_USEPKG),$(USEMODULE) $(USEPKG))
    
      include $(RIOTBASE)/Makefile.dep
    
    
    ifneq (,$(filter ecc_%,$(USEMODULE)))
      USEMODULE += ecc
    endif