54be203107
This includes some fixes for the ez80 build including: 1. Ability to handle decorated object file names, 2. Ability to handle libraries described with absolute paths This commit address only the POSIX build and needs to be updated for the Windows native build.
158 lines
5.1 KiB
Makefile
158 lines
5.1 KiB
Makefile
############################################################################
|
|
# boards/z80/ez80/scripts/eZ80_Config.defs
|
|
#
|
|
# 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
|
|
|
|
ifeq ($(CONFIG_WINDOWS_NATIVE),y)
|
|
|
|
define PREPROCESS
|
|
@echo CPP: $(1)->$(2)
|
|
$(Q) $(CPP) $(CPPFLAGS) $($(strip $(1))_CPPFLAGS) $(1) -o $(2)
|
|
endef
|
|
|
|
define COMPILE
|
|
$(call DELFILE, $(2))
|
|
$(Q) $(CC) $(CFLAGS) $($(strip $(1))_CFLAGS) ${shell echo $(1) | sed -e "s/\//\\/g"}
|
|
if not exist $(2) $(call MOVEFILE, $(subst .c,.obj,$(1)), $(2))
|
|
endef
|
|
|
|
define ASSEMBLE
|
|
$(call DELFILE, $(2))
|
|
$(Q) $(AS) $(AFLAGS) $($(strip $(1))_AFLAGS) ${shell echo $(1) | sed -e "s/\//\\/g"}
|
|
if not exist $(2) $(call MOVEFILE, $(subst .asm,.obj,$(1)), $(2))
|
|
endef
|
|
|
|
define MOVEOBJ
|
|
$(call MOVEFILE, "$(1).obj", "$(2)$(DELIM)$(1).obj")
|
|
$(call MOVEFILE, "$(1).lst", "$(2)$(DELIM)$(1).lst")
|
|
$(call MOVEFILE, "$(1).src", "$(2)$(DELIM)$(1).src")
|
|
endef
|
|
|
|
define ARCHIVE
|
|
for %%G in ($(2)) do ( $(AR) $(ARFLAGS) $(1)=-+%%G )
|
|
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 PREPROCESS
|
|
@echo "CPP: $(1)->$(2)"
|
|
$(Q) $(CPP) $(CPPFLAGS) $($(strip $(1))_CPPFLAGS) $(1) -o $(2)
|
|
endef
|
|
|
|
# COMPILE, ASSEMBLE, MOVEOBJ
|
|
#
|
|
# 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)). In this case, the build system will call MOVEOBJ to
|
|
# move the objects in place and nothing special need be done here.
|
|
# 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 and is
|
|
# handled within COMPILE and ASSEMBLE.
|
|
|
|
define COMPILE
|
|
$(call DELFILE, $(2))
|
|
$(Q) $(CC) $(CFLAGS) $($(strip $(1))_CFLAGS) `cygpath -w "$(1)"`
|
|
$(Q) ( \
|
|
set -x ; \
|
|
__rename=`basename $(2)` ;\
|
|
if [ ! -e $${__rename} ] ; then \
|
|
__src=`basename $(1) | cut -d'.' -f1` ; \
|
|
__dest=`echo $(2) | sed -e "s/.obj//g"` ; \
|
|
mv -f $${__src}.obj $(2) ; \
|
|
mv -f $${__src}.lst $${__dest}.lst ; \
|
|
mv -f $${__src}.src $${__dest}.src ; \
|
|
fi ; \
|
|
)
|
|
endef
|
|
|
|
define ASSEMBLE
|
|
$(call DELFILE, $(2))
|
|
$(Q) $(AS) $(AFLAGS) $($(strip $(1))_AFLAGS) `cygpath -w "$(1)"`
|
|
$(Q) ( \
|
|
set -x ; \
|
|
__rename=`basename $(2)` ; \
|
|
if [ ! -e $${__rename} ] ; then \
|
|
__src=`basename $(1) | cut -d'.' -f1` ; \
|
|
__dest=`echo $(2) | sed -e "s/.obj//g"` ; \
|
|
mv -f $${__src}.obj $(2) ; \
|
|
mv -f $${__src}.lst $${__dest}.lst ; \
|
|
mv -f $${__src}.src $${__dest}.src ; \
|
|
fi ; \
|
|
)
|
|
endef
|
|
|
|
define MOVEOBJ
|
|
$(call MOVEFILE, "$(1).obj", "$(2)$(DELIM)$(1).obj")
|
|
$(call MOVEFILE, "$(1).lst", "$(2)$(DELIM)$(1).lst")
|
|
$(call MOVEFILE, "$(1).src", "$(2)$(DELIM)$(1).src")
|
|
endef
|
|
|
|
# ARCHIVE will move a list of object files into the library. This is
|
|
# complex because:
|
|
#
|
|
# 1. The ez80lib.exe archive 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 extact as the ARCHIVE logic CD's
|
|
# to the directory containing the library.
|
|
|
|
define ARCHIVE
|
|
( \
|
|
set -x ;\
|
|
__wd=`pwd` ;\
|
|
__home=`dirname $(1)` ; \
|
|
if [ -z "$${__home}" ] ; then \
|
|
__lib=$(1) ; \
|
|
else \
|
|
__lib=`basename $(1)` ; \
|
|
cd $${__home} ; \
|
|
fi ; \
|
|
for __obj in $(2) ; do \
|
|
$(AR) $(ARFLAGS) $${__lib}=-+$$__obj ; \
|
|
done ; \
|
|
cd $${__wd} ; \
|
|
)
|
|
endef
|
|
|
|
define CLEAN
|
|
$(Q) rm -f *.obj *.src *.lib *.hex *.lod *.lst
|
|
endef
|
|
endif
|