| # Copyright 2018 Embedded Microprocessor Benchmark Consortium (EEMBC) |
| # |
| # Licensed 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. |
| # |
| # Original Author: Shay Gal-on |
| |
| # Make sure the default target is to simply build and run the benchmark. |
| RSTAMP = v1.0 |
| |
| .PHONY: run score |
| run: $(OUTFILE) rerun score |
| |
| score: |
| @echo "Check run1.log and run2.log for results." |
| @echo "See README.md for run and reporting rules." |
| |
| ifndef PORT_DIR |
| # Ports for a couple of common self hosted platforms |
| UNAME=$(shell if command -v uname 2> /dev/null; then uname ; fi) |
| ifneq (,$(findstring CYGWIN,$(UNAME))) |
| PORT_DIR=cygwin |
| endif |
| ifneq (,$(findstring Linux,$(UNAME))) |
| MACHINE=$(shell uname -m) |
| ifneq (,$(findstring 64,$(MACHINE))) |
| PORT_DIR=linux64 |
| else |
| PORT_DIR=linux |
| endif |
| endif |
| endif |
| ifndef PORT_DIR |
| $(error PLEASE define PORT_DIR! (e.g. make PORT_DIR=simple)) |
| endif |
| vpath %.c $(PORT_DIR) |
| vpath %.h $(PORT_DIR) |
| vpath %.mak $(PORT_DIR) |
| include $(PORT_DIR)/core_portme.mak |
| |
| ifndef $(ITERATIONS) |
| ITERATIONS=0 |
| endif |
| ifdef REBUILD |
| FORCE_REBUILD=force_rebuild |
| endif |
| |
| CFLAGS += -DITERATIONS=$(ITERATIONS) |
| |
| CORE_FILES = core_list_join core_main core_matrix core_state core_util |
| ORIG_SRCS = $(addsuffix .c,$(CORE_FILES)) |
| SRCS = $(ORIG_SRCS) $(PORT_SRCS) |
| OBJS = $(addprefix $(OPATH),$(addsuffix $(OEXT),$(CORE_FILES)) $(PORT_OBJS)) |
| OUTNAME = coremark$(EXE) |
| OUTFILE = $(OPATH)$(OUTNAME) |
| LOUTCMD = $(OFLAG) $(OUTFILE) $(LFLAGS_END) |
| OUTCMD = $(OUTFLAG) $(OUTFILE) $(LFLAGS_END) |
| |
| HEADERS = coremark.h |
| CHECK_FILES = $(ORIG_SRCS) $(HEADERS) |
| |
| $(OPATH): |
| $(MKDIR) $(OPATH) |
| |
| .PHONY: compile link |
| ifdef SEPARATE_COMPILE |
| $(OPATH)$(PORT_DIR): |
| $(MKDIR) $(OPATH)$(PORT_DIR) |
| |
| compile: $(OPATH) $(OPATH)$(PORT_DIR) $(OBJS) $(HEADERS) |
| link: compile |
| $(LD) $(LFLAGS) $(XLFLAGS) $(OBJS) $(LOUTCMD) |
| |
| else |
| |
| compile: $(OPATH) $(SRCS) $(HEADERS) |
| $(CC) $(CFLAGS) $(XCFLAGS) $(SRCS) $(OUTCMD) |
| link: compile |
| @echo "Link performed along with compile" |
| |
| endif |
| |
| $(OUTFILE): $(SRCS) $(HEADERS) Makefile core_portme.mak $(FORCE_REBUILD) |
| $(MAKE) port_prebuild |
| $(MAKE) link -$(MAKEFLAGS) |
| $(MAKE) port_postbuild |
| |
| .PHONY: rerun |
| rerun: |
| $(MAKE) XCFLAGS="$(XCFLAGS) -DPERFORMANCE_RUN=1" load run1.log |
| $(MAKE) XCFLAGS="$(XCFLAGS) -DVALIDATION_RUN=1" load run2.log |
| |
| PARAM1=$(PORT_PARAMS) 0x0 0x0 0x66 $(ITERATIONS) |
| PARAM2=$(PORT_PARAMS) 0x3415 0x3415 0x66 $(ITERATIONS) |
| PARAM3=$(PORT_PARAMS) 8 8 8 $(ITERATIONS) |
| |
| run1.log-PARAM=$(PARAM1) 7 1 2000 |
| run2.log-PARAM=$(PARAM2) 7 1 2000 |
| run3.log-PARAM=$(PARAM3) 7 1 1200 |
| |
| run1.log run2.log run3.log: load |
| $(MAKE) port_prerun |
| $(RUN) $(OUTFILE) $($(@)-PARAM) > $(OPATH)$@ |
| $(MAKE) port_postrun |
| |
| .PHONY: gen_pgo_data |
| gen_pgo_data: run3.log |
| |
| .PHONY: load |
| load: $(OUTFILE) |
| $(MAKE) port_preload |
| $(LOAD) $(OUTFILE) |
| $(MAKE) port_postload |
| |
| .PHONY: clean |
| clean: |
| rm -f $(OUTFILE) $(OPATH)*.log *.info $(OPATH)index.html $(PORT_CLEAN) |
| |
| .PHONY: force_rebuild |
| force_rebuild: |
| echo "Forcing Rebuild" |
| |
| .PHONY: check |
| check: |
| md5sum -c coremark.md5 |
| |
| ifdef ETC |
| # Targets related to testing and releasing CoreMark. Not part of the general release! |
| include Makefile.internal |
| endif |