]> rtime.felk.cvut.cz Git - omk.git/commitdiff
NuttX: update rules for 12.0.0 release yet attempt to support old versions.
authorPavel Pisa <ppisa@pikron.com>
Fri, 31 Mar 2023 22:46:04 +0000 (00:46 +0200)
committerPavel Pisa <ppisa@pikron.com>
Fri, 31 Mar 2023 22:46:04 +0000 (00:46 +0200)
The most of the NuttX specific logic is moved inside
OMK rules. The user has to provide only NUTTX_EXPORT
in config.target or at command line.

Debugging and output formats list are another optional
useful variables to choose by user. I.e.

  DEBUG ?= -g -ggdb

  OUTPUT_FORMATS = bin hex

Signed-off-by: Pavel Pisa <ppisa@pikron.com>
snippets/nuttx-compile.omk
snippets/nuttx-kernel.omk

index eb04b477460e58d37c19e8f6def1c62e5cd7b6db..d8ffc6b794c562976539b6962de78d2ad5d2b34f 100644 (file)
 # create rules for compilation of a program, library and shared
 # library. The rules can use rules produced by COMPILE_xxx_template.
 
+EMPTY :=
+LD_OPTION_SEP = $(EMPTY) $(EMPTY)
+
 define COMPILER_DEFS_template
+OBJ_EXT ?= $$(OBJEXT)
+ifeq ($$(OBJ_EXT),)
 OBJ_EXT = .o
+endif
+LIB_EXT ?= $$(LIBEXT)
+ifeq ($$(LIB_EXT),)
 LIB_EXT = .a
+endif
+
 LIB_PREF = lib
 ASM_EXT = .S
 
-CC = $(CROSS_COMPILE)gcc
-CXX = $(CROSS_COMPILE)g++
-LINK = $(CROSS_COMPILE)ld
-LD = $(CROSS_COMPILE)ld
-AR = $(CROSS_COMPILE)ar
-OBJCOPY = $(CROSS_COMPILE)objcopy
-NM = $(CROSS_COMPILE)nm
+CC ?= $$(CROSS_COMPILE)gcc
+CXX ?= $$(CROSS_COMPILE)g++
+LD ?= $$(CROSS_COMPILE)ld
+ifneq ($$(filter -Wl%, $$(NXFLATLDFLAGS1)$$(NXFLATLDFLAGS2)$$(LDFLAGS)),)
+CC_LD_OPTION = -Wl,
+LD_OPTION_SEP := ,
+LD_BY_CC := 1
+LD_RAW ?= $$(CROSS_COMPILE)ld
+endif
+LD_RAW ?= $$(LD)
+AR ?= $$(CROSS_COMPILE)ar
+OBJCOPY ?= $$(CROSS_COMPILE)objcopy
+NM ?= $$(CROSS_COMPILE)nm
+
+ifeq ($$(LDSTARTGROUP),)
+LDSTARTGROUP = $$(CC_LD_OPTION)--start-group
+LDENDGROUP = $$(CC_LD_OPTION)--end-group
+endif
 
-CFLAGS += $(TARGET_ARCH) $(DEBUG) $(OPTIMIZE)
+NUTTXLIBES += $$(LDSTARTGROUP) $$(LDLIBS) $$(EXTRA_LIBS) $$(LDENDGROUP)
+NUTTXREGISTRY += $$(NUTTX_EXPORT)/registry
+
+TARGET_ARCH += $$(ARCHCFLAGS) $$(ARCHCPUFLAGS)
+
+OPTIMIZE ?= $$(ARCHOPTIMIZATION)
+
+CFLAGS += $$(ARCHWARNINGS)
+CXXFLAGS += $$(ARCHCXXFLAGS)
+CXXFLAGS += $$(ARCHWARNINGSXX)
+DEFAULT_INCLUDES = -isystem $$(NUTTX_EXPORT)/include
+INCLUDES +=
+
+CFLAGS += $$(TARGET_ARCH) $$(DEBUG) $$(OPTIMIZE)
 CFLAGS += -Wall
-CFLAGS += -I$(SOURCES_DIR)
-CFLAGS += -I$(INCLUDE_DIR)
+CFLAGS += -I$$(SOURCES_DIR)
+CFLAGS += -I$$(INCLUDE_DIR)
+
+LDFLAGS := $$(filter-out -Map=%, $$(LDFLAGS))
+LDFLAGS  += -L"$(NUTTX_EXPORT)/libs"
+
+ifeq ($(word 2,$(AR)),)
+ARFLAGS = rcs
+else
+ARFLAGS =
+endif
+
+ifeq ($$(LDNAME),)
+LDNAME := $$(LDSCRIPT)
+endif
+
+LD_SCRIPT ?= $$(NUTTX_EXPORT)/scripts/$$(LDNAME)
+
+ifneq ($$(filter-out clean distclean, $$(MAKECMDGOALS)),)
+ifeq ($(LDNAME),)
+$$(error no LDNAME or LDSCRIPT is defined)
+endif
+
+ifeq ($$(wildcard $$(LD_SCRIPT)),)
+$$(error LD_SCRIPT='$$(LD_SCRIPT)' does not exists, correct config.target)
+endif
+endif
 
-ELF_FILE_LDSCRIPT?=$(wildcard $(NUTTX_EXPORT)/scripts/gnu-elf.ld)
+LD_SCRIPT = $$(NUTTX_EXPORT)/scripts/$$(LDNAME)
 
-LOADLIBES += -L$(LIB_DIR)
-LOADLIBES += $(lib_LOADLIBES:%=-l%)
+ELF_FILE_LDSCRIPT?=$$(wildcard $$(NUTTX_EXPORT)/scripts/gnu-elf.ld)
 
+LOADLIBES += -L$$(LIB_DIR)
+LOADLIBES += $$(lib_LOADLIBES:%=-l%)
 
--include $(OBJS_DIR)/*.d
+-include $$(OBJS_DIR)/*.d
 
-SOURCES2OBJS = .o/.c .o/.cc .o/.cxx .o/.S .o/.s .o/.o
+SOURCES2OBJS = $$(OBJ_EXT)/.c $$(OBJ_EXT)/.cc $$(OBJ_EXT)/.cxx $$(OBJ_EXT)/.S $$(OBJ_EXT)/.s $$(OBJ_EXT)/$$(OBJ_EXT)
 
 SOURCES2OBJSLO = .lo/.c .lo/.cc .lo/.cxx .lo/.S .lo/.s .lo/.lo
 
 #%.lo: %.c
 #      $(CC) -o $@ $(LCFLAGS) -c $<
 
-c_o_COMPILE = $$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(OMK_CPPFLAGS) \
-       $(CPPFLAGS) $(OMK_CFLAGS) $$(CFLAGS)
+c_o_COMPILE = $$(CC) $$(DEFS) $$(DEFAULT_INCLUDES) $$(INCLUDES) $$(OMK_CPPFLAGS) \
+       $$(CPPFLAGS) $$(OMK_CFLAGS) $$(CFLAGS)
 
-cc_o_COMPILE = $$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(OMK_CPPFLAGS) \
-       $(CPPFLAGS) $(CXXFLAGS) $(OMK_CFLAGS) $$(CFLAGS)
+cc_o_COMPILE = $$(CXX) $$(DEFS) $$(DEFAULT_INCLUDES) $$(INCLUDES) $$(OMK_CPPFLAGS) \
+       $$(CPPFLAGS) $$(CXXFLAGS) $$(OMK_CFLAGS) $$(CFLAGS)
 
-S_o_COMPILE = $$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \
-       $(CPPFLAGS) $(OMK_CFLAGS) $$(CFLAGS) $(ASFLAGS)
+S_o_COMPILE = $$(CC) $(DEFS) $(DEFAULT_INCLUDES) $$(INCLUDES) \
+       $$(CPPFLAGS) $$(OMK_CFLAGS) $$(CFLAGS) $$(ASFLAGS)
 
 
 # Check GCC version for user build
@@ -141,7 +201,7 @@ $(foreach x, $(SOURCES2OBJS),
 $(1)_OBJS += $$(patsubst %$(notdir $(x)),%$(dir $(x)),$$(filter %$(notdir $(x)),\
                $$($(1)_SOURCES) $$($(1)_GEN_SOURCES)))
 )
-$(1)_OBJS += $$($(1)_EMBEDROMFS:%=%_img.o)
+$(1)_OBJS += $$($(1)_EMBEDROMFS:%=%_img$$(OBJ_EXT))
 $(1)_OBJS := $$(sort $$($(1)_OBJS:%/=%))
 
 SOURCES += $$($(1)_SOURCES)
@@ -212,15 +272,17 @@ else
 $(1)$(3:%=-%)_LD_SCRIPT = $$($(1)$(3:%=-%)_LD_SCRIPT_FN)
 endif
 
-$(1)$(3:%=-%)_LDFLAGS = -Wl,-T,$$($(1)$(3:%=-%)_LD_SCRIPT)
+$(1)$(3:%=-%)_LDFLAGS = $$(CC_LD_OPTION)-T$$(LD_OPTION_SEP)$$($(1)$(3:%=-%)_LD_SCRIPT)
 
-$(2)/$(1)$(3:%=-%): $$($(1)_OBJS) $$($(1)_BUILTINTABLE:%.c=%.o) $$($(1)_BUILTINWRAPMAIN:%.c=%.o) $$($(1)_PROGBUILTIN_LDAT) $$($(1)$(3:%=-%)_LD_SCRIPT) $$($(1)_KMODBUILTIN_LIBS)
+$(2)/$(1)$(3:%=-%): $$($(1)_OBJS) $$($(1)_BUILTINTABLE:%.c=%$$(OBJ_EXT)) $$($(1)_BUILTINWRAPMAIN:%.c=%$$(OBJ_EXT)) $$($(1)_PROGBUILTIN_LDAT) $$($(1)$(3:%=-%)_LD_SCRIPT) $$($(1)_KMODBUILTIN_LIBS)
        @$(QUIET_CMD_ECHO) "  LINK    $$@"
-       $(Q) $$(if $$(filter %.cc,$$($(1)_SOURCES)) , \
-         $$(CXX) $$(CPPFLAGS) $$(OMK_CPPFLAGS) $$(OMK_CXXFLAGS) $$(CXXFLAGS) , \
-         $$(CC)  $$(CPPFLAGS) $$(OMK_CPPFLAGS) $$(OMK_CFLAGS)   $$(CFLAGS) ) \
-         $$(OMK_LDFLAGS) $$(LDFLAGS) $$($(1)$(3:%=-%)_LDFLAGS) -Wl,-Map,$(1)$(3:%=-%).map \
-         $$($(1)_OBJS) $$($(1)_MOREOBJS) $$($(1)_BUILTINTABLE:%.c=%.o) $$($(1)_BUILTINWRAPMAIN:%.c=%.o) \
+       $(Q) $$(if $$(LD_BY_CC) , $$(if $$(filter %.cc,$$($(1)_SOURCES)) , \
+           $$(CXX) $$(CPPFLAGS) $$(OMK_CPPFLAGS) $$(OMK_CXXFLAGS) $$(CXXFLAGS) , \
+           $$(CC)  $$(CPPFLAGS) $$(OMK_CPPFLAGS) $$(OMK_CFLAGS)   $$(CFLAGS) ) , \
+           $$(LD) \
+         ) \
+         $$(OMK_LDFLAGS) $$(LDFLAGS) $$($(1)$(3:%=-%)_LDFLAGS) $$(CC_LD_OPTION)-Map$$(LD_OPTION_SEP)$(1)$(3:%=-%).map \
+         $$($(1)_OBJS) $$($(1)_MOREOBJS) $$($(1)_BUILTINTABLE:%.c=%$$(OBJ_EXT)) $$($(1)_BUILTINWRAPMAIN:%.c=%$$(OBJ_EXT)) \
          $$($(1)_PROGBUILTIN_PBI) $$(LOADLIBES) $$($(1)_LIBS:%=-l%) $$($(1)_KMODBUILTIN_LIBS) \
          $$(shell for i in $$($(1)_PROGBUILTIN_LDAT); do cat $$$$i ; done) $$(NUTTXLIBES) \
          -o $$@
@@ -234,7 +296,7 @@ define ELF_template
 
 $(2)/$(1).elf: $$($(1)_OBJS)
        @$(QUIET_CMD_ECHO) "  ELF     $$@"
-       $(Q) $(LINK) \
+       $(Q) $(LD_RAW) \
          -r -e main -T $(ELF_FILE_LDSCRIPT) \
          -Map $(1).elf.map \
          $$($(1)_OBJS) $$($(1)_MOREOBJS) $$(LOADLIBES) $$($(1)_LIBS:%=-l%) \
@@ -253,7 +315,7 @@ $(1)_STACKSIZE ?= 2048
 
 $(2)/$(1).pbi: $$($(1)_OBJS)
        @$(QUIET_CMD_ECHO) "  PROGMOD $$@"
-       $(Q) $(LINK) \
+       $(Q) $(LD_RAW) \
          -r -x --defsym=$(1)_main=main \
          -Map $(1).pbi.map \
          $$($(1)_OBJS) $$($(1)_MOREOBJS) \
@@ -290,15 +352,15 @@ $(foreach x, $(SOURCES2OBJS),
 $(1)_OBJS += $$(patsubst %$(notdir $(x)),%$(dir $(x)),$$(filter %$(notdir $(x)),\
                $$($(1)_SOURCES) $$($(1)_GEN_SOURCES)))
 )
-$(1)_OBJS += $$($(1)_EMBEDROMFS:%=%_img.o)
+$(1)_OBJS += $$($(1)_EMBEDROMFS:%=%_img$$(OBJ_EXT))
 $(1)_OBJS := $$(sort $$($(1)_OBJS:%/=%))
 
 SOURCES += $$($(1)_SOURCES)
 EMBEDROMFS += $$($(1)_EMBEDROMFS)
 
-$(LIB_DIR)/lib$(1).a: $$($(1)_OBJS)
+$(LIB_DIR)/lib$(1)$$(LIB_EXT): $$($(1)_OBJS)
        @$(QUIET_CMD_ECHO) "  AR      $$@"
-       $(Q) $(AR) rcs $$@ $$^
+       $(Q) $(AR) $(ARFLAGS) $$@ $$^
 endef
 
 
@@ -338,7 +400,7 @@ $(2):
        $(Q) genromfs -f $(2).tmp -V $(1) -d $(3)
        $(Q) if ( [ ! -e $(2) ] || ! cmp -s $(2).tmp $(2) ) ; then cp $(2).tmp $(2) ; fi
 
-$(2).o: $(2)
+$(2)$$(OBJ_EXT): $(2)
        @$(QUIET_CMD_ECHO) "  ROMFS   $$@"
        $(Q) $(LD) -r --accept-unknown-input-arch -b binary \
                --defsym=$(2)_size=_binary_$(2)_size \
index ed2370f739d221b281f7f12dd06a9670b56e70e0..81eb163df9d4ca92122ee0a5b438828a5ebf39ad 100644 (file)
@@ -69,7 +69,7 @@ KERN_SOURCES += $$($(1)_SOURCES)
 
 $(2)/$(1)$(KERN_LINK_SUFFIX): $$($(1)_OBJS)
        @$(QUIET_CMD_ECHO) "  LD [K]  $$@"
-       $(Q) $(LINK) \
+       $(Q) $(LD_RAW) \
          -r -e module_initialize -T $(ELF_FILE_LDSCRIPT) \
          -Map $(1)$(KERN_LINK_SUFFIX).map \
          $$($(1)_OBJS) $$($(1)_MOREOBJS) $$(LOADLIBES) $$($(1)_LIBS:%=-l%) \