| ############################################################################ |
| # tools/zds/Config.mk |
| # |
| # SPDX-License-Identifier: Apache-2.0 |
| # |
| # 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. |
| # |
| ############################################################################ |
| |
| # These are the macros that will be used in the NuttX make system to compile |
| # and assembly source files and to insert the resulting object files into an |
| # archive. These replace the default definitions at tools/Config.mk |
| |
| # PREPROCESS |
| # |
| # Run a file through the C Pre-processor |
| |
| define PREPROCESS |
| @echo "CPP: $(1)->$(2)" |
| $(Q) $(CPP) $(CPPFLAGS) $($(strip $(1))_CPPFLAGS) $(1) -o $(2) |
| endef |
| |
| # COMPILE, ASSEMBLE, and helpers |
| # |
| # The ZDS-II compiler and assembler both generate object files in the |
| # current directory with the same name as the source file, but with the .obj |
| # extension. The build system expects these behaviors when compiling some |
| # file, say foo.c: |
| # |
| # 1. If the foo.obj object belongs in a lower level directory (such as bin/), |
| # then the relative path will be preface the object file name (such as |
| # bin/foo.obj)). |
| # 2. In other cases, the build system may decorate the object file name such |
| # as a.b.c.foo.obj. This case is distinguished here by because does not |
| # lie in a lower directory, but lies in the current directory. |
| |
| define RMOBJS |
| $(call DELFILE, $(1)) |
| $(call DELFILE, $(subst .obj,.lst,$(1))) |
| $(call DELFILE, $(subst .obj,.src,$(1))) |
| endef |
| |
| ifeq ($(CONFIG_WINDOWS_NATIVE),y) |
| |
| define CONDMOVE |
| $(Q) if not exist $1 if exist $2 (move /Y $2 $3) |
| endef |
| |
| define MVOBJS |
| $(call CONDMOVE, $(1),$(subst .obj,.src,$(2)),$(subst .obj,.src,$(3))) |
| $(call CONDMOVE, $(1),$(subst .obj,.lst,$(2)),$(subst .obj,.lst,$(3))) |
| $(call CONDMOVE, $(1),$(2),$(3)) |
| endef |
| |
| define COMPILE |
| $(call RMOBJS, $(2)) |
| $(Q) $(CC) $(CFLAGS) $($(strip $(1))_CFLAGS) ${shell echo $(1) | sed -e "s/\//\\/g"} |
| $(call MVOBJS, $(2), $(subst .c,.obj,$(notdir $(1))), $(2)) |
| endef |
| |
| define ASSEMBLE |
| $(call RMOBJS, $(2)) |
| $(Q) $(AS) $(AFLAGS) $($(strip $(1))_AFLAGS) ${shell echo $(1) | sed -e "s/\//\\/g"} |
| $(call MVOBJS, $(2), $(subst .asm,.obj,$(notdir $(1))), $(2)) |
| endef |
| |
| else |
| |
| define CONDMOVE |
| $(Q) if [ ! -e $(1) -a -e $(2) ] ; then mv -f $(2) $(3) ; fi |
| endef |
| |
| define MVOBJS |
| $(call CONDMOVE, $(1),$(subst .obj,.src,$(2)),$(subst .obj,.src,$(3))) |
| $(call CONDMOVE, $(1),$(subst .obj,.lst,$(2)),$(subst .obj,.lst,$(3))) |
| $(call CONDMOVE, $(1),$(2),$(3)) |
| endef |
| |
| define COMPILE |
| $(call RMOBJS, $(2)) |
| $(Q) $(CC) $(CFLAGS) $($(strip $(1))_CFLAGS) `cygpath -w "$(1)"` |
| $(call MVOBJS, $(2), $(subst .c,.obj,$(notdir $(1))), $(2)) |
| endef |
| |
| define ASSEMBLE |
| $(call RMOBJS, $(2)) |
| $(Q) $(AS) $(AFLAGS) $($(strip $(1))_AFLAGS) `cygpath -w "$(1)"` |
| $(call MVOBJS, $(2), $(subst .asm,.obj,$(notdir $(1))), $(2)) |
| endef |
| |
| endif |
| |
| # ARCHIVE will move a list of object files into the library. This is |
| # complex because: |
| # |
| # 1. The ZDS-II librarian expects the library to reside within the |
| # current directory; it expects the library argument to a file name |
| # like foo.lib. |
| # 2. Normally, the library file is in the current directory, but other |
| # times, the library is an absolute path such as |
| # D:\Spuda\Documents\projects\nuttx\master\apps-fork\libapps.lib. In |
| # this case, the base library name is extract as the ARCHIVE logic CD's |
| # to the directory containing the library. |
| |
| ifeq ($(CONFIG_WINDOWS_NATIVE),y) |
| |
| define ARCHIVE |
| for %%G in ($(2)) do ( $(AR) $(ARFLAGS) $(1)=-+%%G ) |
| endef |
| |
| define ARCHIVE |
| $(MAKE) -C $(TOPDIR)\tools\zds zdsar.exe |
| $(TOPDIR)\tools\zds\zdsar.exe --ar "$(AR)" --ar_flags "$(ARFLAGS)" --library "$(1)" $(2) |
| endef |
| |
| define CLEAN |
| $(Q) if exist *.obj (del /f /q *.obj) |
| $(Q) if exist *.src (del /f /q *.src) |
| $(Q) if exist *.lib (del /f /q *.lib) |
| $(Q) if exist *.hex (del /f /q *.hex) |
| $(Q) if exist *.lod (del /f /q *.lod) |
| $(Q) if exist *.lst (del /f /q *.lst) |
| endef |
| |
| else |
| |
| define ARCHIVE |
| $(MAKE) -C $(TOPDIR)/tools/zds zdsar.exe |
| $(TOPDIR)/tools/zds/zdsar.exe --ar "$(AR)" --ar_flags "$(ARFLAGS)" --library $(1) $(2) |
| endef |
| |
| define CLEAN |
| $(Q) rm -f *.obj *.src *.lib *.hex *.lod *.lst |
| endef |
| |
| endif |