| ############################################################################ |
| # apps/examples/nxflat/tests/hello++/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 $(APPDIR)/Make.defs |
| |
| BIN1 = hello++1 |
| BIN2 = hello++2 |
| BIN3 = hello++3 |
| #BIN4 = hello++4 |
| |
| R1SRCS1 = $(BIN1).c |
| R1OBJS1 = $(R1SRCS1:.c=.o) |
| R2SRC1 = $(BIN1)-thunk.S |
| R2OBJ1 = $(R2SRC1:.S=.o) |
| |
| R1SRCS2 = $(BIN2).c |
| R1OBJS2 = $(R1SRCS2:.c=.o) |
| R2SRC2 = $(BIN2)-thunk.S |
| R2OBJ2 = $(R2SRC2:.S=.o) |
| |
| R1SRCS3 = $(BIN3).c |
| R1OBJS3 = $(R1SRCS3:.c=.o) |
| R2SRC3 = $(BIN3)-thunk.S |
| R2OBJ3 = $(R2SRC3:.S=.o) |
| |
| #R1SRCS4 = $(BIN4).c |
| #R1OBJS4 = $(R1SRCS4:.c=.o) |
| #R2SRC4 = $(BIN4)-thunk.S |
| #R2OBJ4 = $(R2SRC4:.S=.o) |
| |
| DERIVED = $(R2SRC1) $(R2SRC2) $(R2SRC3) $(R2SRC4) |
| |
| R1CXXOBJS = $(R1OBJS1) $(R1OBJS2) $(R1OBJS3) # $(R1OBJS4) |
| R2AOBJS = $(R2OBJ1) $(R2OBJ2) $(R2OBJ3) # $(R2OBJ4) |
| |
| LIBSTDC_STUBS_DIR = $(TOPDIR)/libxx |
| LIBSTDC_STUBS_LIB = $(LIBSTDC_STUBS_DIR)/liblibxx.a |
| |
| all: $(BIN1) $(BIN2) $(BIN3) # $(BIN4) |
| |
| $(R1CXXOBJS): %.o: %.cxx |
| @echo "CC: $<" |
| $(Q) $(CXX) -c $(CXXPICFLAGS) $< -o $@ |
| |
| $(R2AOBJS): %.o: %.S |
| @echo "AS: $<" |
| $(Q) $(CC) -c $(CPICFLAGS) $< -o $@ |
| |
| # This contains libstdc++ stubs to that you can build C++ code |
| # without actually having libstdc++ |
| |
| $(LIBSTDC_STUBS_LIB): |
| $(Q) $(MAKE) -C $(LIBSTDC_STUBS_DIR) TOPDIR=$(TOPDIR) |
| |
| # BIN1 and BIN2 link just like C code because they contain no |
| # static constructors. BIN1 is equivalent to a C hello world; |
| # BIN2 contains a class that implements hello world, but it is |
| # not statically initialized. |
| |
| $(BIN1).r1: $(R1OBJS1) |
| @echo "LD: $<" |
| $(Q) $(LD) $(NXFLATLDFLAGS1) -o $@ $^ |
| |
| $(R2SRC1): $(BIN1).r1 |
| @echo "MK: $<" |
| $(Q) $(MKNXFLAT) -o $@ $^ |
| |
| $(BIN1).r2: $(R2OBJ1) |
| @echo "LD: $<" |
| $(Q) $(LD) $(NXFLATLDFLAGS2) -o $@ $(R1OBJS1) $(R2OBJ1) |
| |
| $(BIN1): $(BIN1).r2 |
| @echo "LD: $<" |
| $(Q) $(LDNXFLAT) $(LDNXFLATFLAGS) -o $@ $^ |
| |
| $(BIN2).r1: $(R1OBJS2) $(LIBSTDC_STUBS_LIB) |
| @echo "LD: $<" |
| $(Q) $(LD) $(NXFLATLDFLAGS1) -o $@ $^ |
| |
| $(R2SRC2): $(BIN2).r1 |
| @echo "MK: $<" |
| $(Q) $(MKNXFLAT) -o $@ $^ |
| |
| $(BIN2).r2: $(R2OBJ2) |
| $(Q) $(LD) $(NXFLATLDFLAGS2) -o $@ $(R1OBJS2) $(R2OBJ2) |
| |
| $(BIN2): $(BIN2).r2 |
| @echo "LD: $<" |
| $(Q) $(LDNXFLAT) $(LDNXFLATFLAGS) -o $@ $^ |
| |
| # BIN3 and BIN4 require that we include --cxx in the xflat-ld command. |
| # This will instruct xflat-ld that we want it to put together the correct |
| # startup files to handle the C++ static initializers. |
| # |
| # BIN3 is equivalent to BIN2 except that is uses static initializers |
| |
| $(BIN3).r1: $(R1OBJS3) $(LIBSTDC_STUBS_LIB) |
| @echo "LD: $<" |
| $(Q) $(LD) $(NXFLATLDFLAGS1) -o $@ $^ |
| |
| $(R2SRC3): $(BIN3).r1 |
| @echo "MK: $<" |
| $(Q) $(MKNXFLAT) -o $@ $^ |
| |
| $(BIN3).r2: $(R2OBJ3) |
| @echo "LD: $<" |
| $(Q) $(LD) $(NXFLATLDFLAGS2) -o $@ $(R1OBJS3) $(R2OBJ3) |
| |
| $(BIN3): $(BIN3).r2 |
| @echo "LD: $<" |
| $(Q) $(LDNXFLAT) $(LDNXFLATFLAGS) -o $@ $^ |
| |
| # BIN4 is similar to BIN3 except that it uses the streams code from libstdc++ |
| # |
| # NOTE: libstdc++ is not available for XFLAT as of this writing |
| # |
| #$(BIN4).r1: $(R1OBJS4) $(LIBSTDC_STUBS_LIB) |
| # @echo "LD: $<" |
| # $(LD) $(NXFLATLDFLAGS1) -o $@ $^ |
| # |
| #$(R2SRC4): $(BIN4).r1 |
| # @echo "MK: $<" |
| # $(MKNXFLAT) -o $@ $^ |
| # |
| #$(BIN4).r2: $(R2OBJ4)# @echo "LD: $<" |
| # $(LD) $(NXFLATLDFLAGS2) -o $@ $(R1OBJS4) $(R2OBJ4) |
| # |
| #$(BIN4): $(BIN4).r2 |
| # @echo "LD: $<" |
| # $(LDNXFLAT) $(LDNXFLATFLAGS) -o $@ $^ |
| |
| $(ROMFS_DIR)/$(BIN1): $(BIN1) |
| $(Q) install -D $(BIN1) $(ROMFS_DIR)/$(BIN1) |
| |
| $(ROMFS_DIR)/$(BIN2): $(BIN2) |
| $(Q) install -D $(BIN2) $(ROMFS_DIR)/$(BIN2) |
| |
| $(ROMFS_DIR)/$(BIN3): $(BIN3) |
| $(Q) install -D $(BIN3) $(ROMFS_DIR)/$(BIN3) |
| |
| #$(ROMFS_DIR)/$(BIN4): $(BIN4) |
| # $(Q) install -D $(BIN4) $(ROMFS_DIR)/$(BIN4) |
| |
| install: $(ROMFS_DIR)/$(BIN1) $(ROMFS_DIR)/$(BIN2) $(ROMFS_DIR)/$(BIN3) |
| |
| clean: |
| $(call DELFILE, $(BIN1)) |
| $(call DELFILE, $(BIN2)) |
| $(call DELFILE, $(BIN3)) |
| $(call DELFILE, $(BIN4)) |
| $(call DELFILE, $(R2SRC1)) |
| $(call DELFILE, $(R2SRC2)) |
| $(call DELFILE, $(R2SRC3)) |
| $(call DELFILE, $(R2SRC4)) |
| $(call DELFILE, *.r1) |
| $(call DELFILE, *.r2) |
| $(call CLEAN) |