BSPS=leon2 leon3 erc32
RTEMSDIR=rtems-4.10
PREFIX=/opt/rtems-4.10-mingw
EXTRA_CONFIG=

BSP_MP = leon3
PREFIX_MP=$(PREFIX)

all:
	$(MAKE) bootstrap configure compile

bootstrap:
	cd $(PREFIX)/src/$(RTEMSDIR); ./bootstrap

# A quicker way to generate Makescripts only for SPARC, however bootstrap must have been 
# run previously, otherwise Makefile scripts will be missing.
bootstrap_sparc:
	cd $(PREFIX)/src/$(RTEMSDIR); ./bootstrap --sparc

configure:
	-mkdir $(PREFIX)/src/build
	cd $(PREFIX)/src/build; \
	$(PREFIX)/src/$(RTEMSDIR)/configure --prefix=$(PREFIX) \
	--target=sparc-rtems $(EXTRA_CONFIG) --disable-itron --disable-tests --enable-cxx --disable-docs \
	--enable-rtemsbsp="$(BSPS)"

configure-drvmgr:
	-mkdir $(PREFIX)/src/build-drvmgr
	cd $(PREFIX)/src/build-drvmgr; \
	$(PREFIX)/src/$(RTEMSDIR)/configure --prefix=$(PREFIX) \
	--target=sparc-rtems $(EXTRA_CONFIG) --disable-itron --disable-tests --enable-cxx --disable-docs \
	--enable-rtemsbsp="$(BSPS)" --enable-drvmgr

configure-samples:
	-mkdir $(PREFIX)/src/build
	cd $(PREFIX)/src/build; \
	$(PREFIX)/src/$(RTEMSDIR)/configure --prefix=$(PREFIX) \
	--target=sparc-rtems $(EXTRA_CONFIG) --disable-itron --enable-tests=samples --enable-cxx --disable-docs \
	--enable-rtemsbsp="$(BSPS)"

configure-tests:
	-mkdir $(PREFIX)/src/build
	cd $(PREFIX)/src/build; \
	$(PREFIX)/src/$(RTEMSDIR)/configure --prefix=$(PREFIX) \
	--target=sparc-rtems $(EXTRA_CONFIG) --disable-itron --enable-tests --enable-cxx --disable-docs \
	--enable-rtemsbsp="$(BSPS)"

configure-tests-drvmgr:
	-mkdir $(PREFIX)/src/build-drvmgr
	cd $(PREFIX)/src/build-drvmgr; \
	$(PREFIX)/src/$(RTEMSDIR)/configure --prefix=$(PREFIX) \
	--target=sparc-rtems $(EXTRA_CONFIG) --disable-itron --enable-tests --enable-cxx --disable-docs \
	--enable-rtemsbsp="$(BSPS)"  --enable-drvmgr

# Configure RTEMS kernel for multi processing
configure-mp:
	-mkdir $(PREFIX_MP)/src/build-mp
	cd $(PREFIX_MP)/src/build-mp; \
        $(PREFIX_MP)/src/$(RTEMSDIR)/configure --prefix=$(PREFIX_MP) \
        --target=sparc-rtems $(EXTRA_CONFIG) --disable-itron --disable-tests --enable-cxx --disable-docs \
        --enable-multiprocessing \
        --enable-rtemsbsp="$(BSP_MP)"

configure-mp-drvmgr:
	-mkdir $(PREFIX_MP)/src/build-mp-drvmgr
	cd $(PREFIX_MP)/src/build-mp-drvmgr; \
        $(PREFIX_MP)/src/$(RTEMSDIR)/configure --prefix=$(PREFIX_MP) \
        --target=sparc-rtems $(EXTRA_CONFIG) --disable-itron --disable-tests --enable-cxx --disable-docs \
        --enable-multiprocessing \
        --enable-rtemsbsp="$(BSP_MP)" --enable-drvmgr

compile:
	export PATH=$(PREFIX)/bin:$$PATH; cd $(PREFIX)/src/build; $(MAKE) all

compile-drvmgr:
	export PATH=$(PREFIX)/bin:$$PATH; cd $(PREFIX)/src/build-drvmgr; $(MAKE) all

compile-mp:
	export PATH=$(PREFIX_MP)/bin:$$PATH; cd $(PREFIX_MP)/src/build-mp; $(MAKE) all

compile-mp-drvmgr:
	export PATH=$(PREFIX_MP)/bin:$$PATH; cd $(PREFIX_MP)/src/build-mp-drvmgr; $(MAKE) all

install:
	export PATH=$(PREFIX)/bin:$$PATH; cd $(PREFIX)/src/build; $(MAKE) install

install-drvmgr:
	export PATH=$(PREFIX)/bin:$$PATH; cd $(PREFIX)/src/build-drvmgr; $(MAKE) install

install-mp:
	export PATH=$(PREFIX_MP)/bin:$$PATH; cd $(PREFIX_MP)/src/build-mp; $(MAKE) install

install-mp-drvmgr:
	export PATH=$(PREFIX_MP)/bin:$$PATH; cd $(PREFIX_MP)/src/build-mp-drvmgr; $(MAKE) install

# Target to build toolchain.
# Note that when the custom specs file, if used during building kernel, will
# cause build to fail with similar message: compiler can not create binaries...
toolchain:
	if [ -f ../lib/gcc/sparc-rtems/4.*/specs ]; then \
		echo "specs file must be temporarily moved, before building"; \
	fi

	make clean clean-drvmgr clean-mp-drvmgr
	make bootstrap
	make configure BSPS="leon2 erc32"
	make configure-drvmgr configure-mp-drvmgr BSPS="leon3"
	make compile compile-drvmgr compile-mp-drvmgr \
	     install install-mp-drvmgr
	mv ../sparc-rtems/{leon3,leon3mp}
	make install-drvmgr

clean:
	-rm -rf $(PREFIX)/src/build

clean-drvmgr:
	-rm -rf $(PREFIX)/src/build-drvmgr

clean-mp:
	-rm -rf $(PREFIX)/src/build-mp

clean-mp-drvmgr:
	-rm -rf $(PREFIX)/src/build-mp
	
veryclean: clean
	cd $(PREFIX)/src/$(RTEMSDIR); ./bootstrap -c
