9f10ddc9b0
To solve the issue of carrying object files from previous builds,
Matias changed the archiving process to re-archive libapps.a on every compilation,
if libapps.a carries more object files, incremental compilation will waste too
many time in re-archiving, compared with the previous implement, this is a degradation
of the build system. Referring to mature engineering projects such as cmake, if there
is configuration or source file changed, the best solution should be to reconfigure
the environment.
Revert this PR to ensure the compilation speed during incremental compilation.
| commit 34b34e2d45
(tag: nuttx-20200914-172150)
| Author: Matias N <matias@protobits.dev>
| Date: Fri Sep 11 22:31:38 2020 -0300
|
| Fix: ensure archive files do not carry object files from prior builds
|
| In some cases, when NuttX configuration changes and this makes the
| object list used to build one of the .a libraries change as well,
| since the command used to build it is "ar crs" and this simply appends
| the list of object files, the library could still include object
| files from prior builds. This commit modifies the ARCHIVE macro to
| erase the .a file if it already exists.
|
| Since in some cases this behavior was actually expected (object
| files from a subdirectory were appended to a library created one
| level above) I added a ARCHIVE_ADD which works as ARCHIVE did.
|
| This change should greatly improve behavior of building after
| configuration changes.
Testing:
sim:nsh
-------------------------------
| Patched | Current
-------------------------------
|$ time make | $ time make
|real 0m1.270s | real 0m1.728s
|user 0m0.971s | user 0m1.276s
|sys 0m0.363s | sys 0m0.530s
-------------------------------
Private project (20+ 3rd library needs archive to libapps.a)
-------------------------------
| Patched | Current
-------------------------------
|$ time make | $ time make
|real 0m21.181s | real 0m39.721s
|user 0m14.638s | user 0m24.837s
|sys 0m6.919s | sys 0m14.394s
-------------------------------
Signed-off-by: chao an <anchao@xiaomi.com>
133 lines
3.3 KiB
Makefile
133 lines
3.3 KiB
Makefile
############################################################################
|
|
# libs/libc/zoneinfo/Makefile
|
|
#
|
|
# 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.
|
|
#
|
|
############################################################################
|
|
|
|
include $(TOPDIR)/Make.defs
|
|
|
|
ifeq ($(CONFIG_LIBC_ZONEINFO_ROMFS),y)
|
|
CSRCS += tzromfs.c
|
|
endif
|
|
|
|
AOBJS = $(ASRCS:.S=$(OBJEXT))
|
|
COBJS = $(CSRCS:.c=$(OBJEXT))
|
|
|
|
SRCS = $(ASRCS) $(CSRCS)
|
|
OBJS = $(AOBJS) $(COBJS)
|
|
|
|
ZONEINFO_PATH = $(TOPDIR)/libs/libc/zoneinfo
|
|
TZBIN_PATH = $(ZONEINFO_PATH)/tzbin
|
|
TZCODE_PATH = $(ZONEINFO_PATH)/tzcode
|
|
|
|
# Common build
|
|
|
|
all: .built
|
|
.PHONY: romfs register context depend clean distclean
|
|
|
|
$(AOBJS): %$(OBJEXT): %.S
|
|
$(call ASSEMBLE, $<, $@)
|
|
|
|
$(COBJS): %$(OBJEXT): %.c
|
|
$(call COMPILE, $<, $@)
|
|
|
|
.built: .tzbuilt romfs $(OBJS)
|
|
$(call ARCHIVE, ..$(DELIM)$(BIN), $(OBJS))
|
|
$(Q) touch .built
|
|
|
|
# ROMFS file system containing the TZ database
|
|
|
|
ifeq ($(CONFIG_LIBC_ZONEINFO_ROMFS),y)
|
|
|
|
checkgenromfs:
|
|
@genromfs -h 1>/dev/null 2>&1 || { \
|
|
echo "Host executable genromfs not available in PATH"; \
|
|
echo "You may need to download in from http://romfs.sourceforge.net/"; \
|
|
exit 1; \
|
|
}
|
|
|
|
romfs_zoneinfo.img : checkgenromfs .tzbuilt
|
|
@genromfs -f $@ -d $(TZBIN_PATH)/usr/share/zoneinfo -V "TZDatbase" || { echo "genromfs failed" ; exit 1 ; }
|
|
|
|
romfs_zoneinfo.h : romfs_zoneinfo.img
|
|
@xxd -i $< >$@ || { echo "xxd of $< failed" ; exit 1 ; }
|
|
|
|
romfs: romfs_zoneinfo.h
|
|
|
|
else
|
|
|
|
romfs:
|
|
|
|
endif # CONFIG_LIBC_ZONEINFO_ROMFS
|
|
|
|
# Build TZ database
|
|
|
|
tzcode:
|
|
mkdir tzcode
|
|
|
|
tzbin:
|
|
mkdir tzbin
|
|
|
|
tzcode-latest.tar.gz:
|
|
$(call DOWNLOAD,ftp://ftp.iana.org/tz,tzcode-latest.tar.gz)
|
|
|
|
tzdata-latest.tar.gz:
|
|
$(call DOWNLOAD,ftp://ftp.iana.org/tz,tzdata-latest.tar.gz)
|
|
|
|
.tzunpack: tzcode tzcode-latest.tar.gz tzdata-latest.tar.gz
|
|
$(Q) tar zx -C tzcode -f tzcode-latest.tar.gz
|
|
$(Q) tar zx -C tzcode -f tzdata-latest.tar.gz
|
|
$(Q) touch .tzunpack
|
|
|
|
.tzbuilt: tzcode tzbin .tzunpack
|
|
$(Q) $(MAKE) -C tzcode TOPDIR=$(TZBIN_PATH) install
|
|
$(Q) touch .tzbuilt
|
|
|
|
# Create initial context
|
|
|
|
context: .tzbuilt romfs
|
|
|
|
# Create dependencies
|
|
|
|
makedepfile: $(CSRCS:.c=.ddc) $(ASRCS:.S=.dds)
|
|
$(call CATFILE, Make.dep, $^)
|
|
$(call DELFILE, $^)
|
|
|
|
.depend: Makefile $(SRCS) $(TOPDIR)$(DELIM).config
|
|
$(Q) $(MAKE) makedepfile
|
|
$(Q) touch $@
|
|
|
|
depend: .depend
|
|
|
|
clean:
|
|
$(call DELFILE, .built)
|
|
$(call CLEAN)
|
|
|
|
distclean: clean
|
|
$(call DELFILE, Make.dep)
|
|
$(call DELFILE, .depend)
|
|
$(call DELFILE, .tzunpack)
|
|
$(call DELFILE, .tzbuilt)
|
|
$(call DELFILE, romfs_zoneinfo.img)
|
|
$(call DELFILE, romfs_zoneinfo.h)
|
|
$(call DELFILE, tzdata-latest.tar.gz)
|
|
$(call DELFILE, tzcode-latest.tar.gz)
|
|
$(call DELDIR, tzbin)
|
|
$(call DELDIR, tzcode)
|
|
|
|
-include Make.dep
|