TOP = $(PWD) TOOLCHAIN = $(TOP)/xtensa-lx106-elf VENDOR_SDK = 1.0.1 UNZIP = unzip -q -o VENDOR_SDK_ZIP = $(VENDOR_SDK_ZIP_$(VENDOR_SDK)) VENDOR_SDK_DIR = $(VENDOR_SDK_DIR_$(VENDOR_SDK)) VENDOR_SDK_ZIP_1.0.1 = esp_iot_sdk_v1.0.1_15_04_24.zip VENDOR_SDK_DIR_1.0.1 = esp_iot_sdk_v1.0.1 VENDOR_SDK_ZIP_1.0.1b2 = esp_iot_sdk_v1.0.1_b2_15_04_10.zip VENDOR_SDK_DIR_1.0.1b2 = esp_iot_sdk_v1.0.1_b2 VENDOR_SDK_ZIP_1.0.1b1 = esp_iot_sdk_v1.0.1_b1_15_04_02.zip VENDOR_SDK_DIR_1.0.1b1 = esp_iot_sdk_v1.0.1_b1 VENDOR_SDK_ZIP_1.0.0 = esp_iot_sdk_v1.0.0_15_03_20.zip VENDOR_SDK_DIR_1.0.0 = esp_iot_sdk_v1.0.0 VENDOR_SDK_ZIP_0.9.6b1 = esp_iot_sdk_v0.9.6_b1_15_02_15.zip VENDOR_SDK_DIR_0.9.6b1 = esp_iot_sdk_v0.9.6_b1 VENDOR_SDK_ZIP_0.9.5 = esp_iot_sdk_v0.9.5_15_01_23.zip VENDOR_SDK_DIR_0.9.5 = esp_iot_sdk_v0.9.5 VENDOR_SDK_ZIP_0.9.4 = esp_iot_sdk_v0.9.4_14_12_19.zip VENDOR_SDK_DIR_0.9.4 = esp_iot_sdk_v0.9.4 VENDOR_SDK_ZIP_0.9.3 = esp_iot_sdk_v0.9.3_14_11_21.zip VENDOR_SDK_DIR_0.9.3 = esp_iot_sdk_v0.9.3 VENDOR_SDK_ZIP_0.9.2 = esp_iot_sdk_v0.9.2_14_10_24.zip VENDOR_SDK_DIR_0.9.2 = esp_iot_sdk_v0.9.2 STANDALONE = y .PHONY: crosstool-NG toolchain libhal libcirom sdk all: esptool libcirom standalone sdk sdk_patch $(TOOLCHAIN)/xtensa-lx106-elf/sysroot/usr/lib/libhal.a $(TOOLCHAIN)/bin/xtensa-lx106-elf-gcc @echo @echo "Xtensa toolchain is built, to use it:" @echo @echo 'export PATH=$(TOOLCHAIN)/bin:$$PATH' @echo ifneq ($(STANDALONE),y) @echo "Espressif ESP8266 SDK is installed. Toolchain contains only Open Source components" @echo "To link external proprietary libraries add:" @echo @echo "xtensa-lx106-elf-gcc -I$(TOP)/sdk/include -L$(TOP)/sdk/lib" @echo else @echo "Espressif ESP8266 SDK is installed, its libraries and headers are merged with the toolchain" @echo endif esptool: toolchain cp esptool/esptool.py $(TOOLCHAIN)/bin/ $(TOOLCHAIN)/xtensa-lx106-elf/sysroot/lib/libcirom.a: $(TOOLCHAIN)/xtensa-lx106-elf/sysroot/lib/libc.a $(TOOLCHAIN)/bin/xtensa-lx106-elf-gcc @echo "Creating irom version of libc..." $(TOOLCHAIN)/bin/xtensa-lx106-elf-objcopy --rename-section .text=.irom0.text \ --rename-section .literal=.irom0.literal $(<) $(@); libcirom: $(TOOLCHAIN)/xtensa-lx106-elf/sysroot/lib/libcirom.a sdk_patch: .sdk_patch_$(VENDOR_SDK) .sdk_patch_1.0.1: libnet80211.zip $(UNZIP) $< mv libnet80211.a $(VENDOR_SDK_DIR)/lib/ rm libnet80211.zip patch -d $(VENDOR_SDK_DIR_1.0.1) -p1 < c_types-c99.patch @touch $@ .sdk_patch_1.0.1b2: libssl.zip esp_iot_sdk_v1.0.1_b2/.dir $(UNZIP) $< mv libssl/libssl.a $(VENDOR_SDK_DIR_1.0.1b2)/lib/ rm -r libssl libssl.zip patch -d $(VENDOR_SDK_DIR_1.0.1b2) -p1 < c_types-c99.patch @touch $@ .sdk_patch_1.0.1b1: patch -d $(VENDOR_SDK_DIR_1.0.1b1) -p1 < c_types-c99.patch @touch $@ .sdk_patch_1.0.0: patch -d $(VENDOR_SDK_DIR_1.0.0) -p1 < c_types-c99.patch @touch $@ .sdk_patch_0.9.6b1: patch -d $(VENDOR_SDK_DIR_0.9.6b1) -p1 < c_types-c99.patch @touch $@ .sdk_patch_0.9.5: sdk095_patch1.zip esp_iot_sdk_v0.9.5/.dir $(UNZIP) $< mv libmain_fix_0.9.5.a $(VENDOR_SDK_DIR)/lib/libmain.a mv user_interface.h $(VENDOR_SDK_DIR)/include/ patch -d $(VENDOR_SDK_DIR_0.9.5) -p1 < c_types-c99.patch @touch $@ .sdk_patch_0.9.4: patch -d $(VENDOR_SDK_DIR_0.9.4) -p1 < c_types-c99.patch @touch $@ .sdk_patch_0.9.3: esp_iot_sdk_v0.9.3_14_11_21_patch1.zip esp_iot_sdk_v0.9.3/.dir $(UNZIP) $< @touch $@ .sdk_patch_0.9.2: FRM_ERR_PATCH.rar esp_iot_sdk_v0.9.2/.dir unrar x -o+ $< cp FRM_ERR_PATCH/*.a $(VENDOR_SDK_DIR)/lib/ @touch $@ standalone: sdk sdk_patch toolchain ifeq ($(STANDALONE),y) @echo "Installing vendor SDK headers into toolchain sysroot" @cp -Rf sdk/include/* $(TOOLCHAIN)/xtensa-lx106-elf/sysroot/usr/include/ @echo "Installing vendor SDK libs into toolchain sysroot" @cp -Rf sdk/lib/* $(TOOLCHAIN)/xtensa-lx106-elf/sysroot/usr/lib/ @echo "Installing vendor SDK linker scripts into toolchain sysroot" @sed -e 's/\r//' sdk/ld/eagle.app.v6.ld | sed -e s@../ld/@@ >$(TOOLCHAIN)/xtensa-lx106-elf/sysroot/usr/lib/eagle.app.v6.ld @sed -e 's/\r//' sdk/ld/eagle.rom.addr.v6.ld >$(TOOLCHAIN)/xtensa-lx106-elf/sysroot/usr/lib/eagle.rom.addr.v6.ld endif FRM_ERR_PATCH.rar: wget --content-disposition "http://bbs.espressif.com/download/file.php?id=10" esp_iot_sdk_v0.9.3_14_11_21_patch1.zip: wget --content-disposition "http://bbs.espressif.com/download/file.php?id=73" sdk095_patch1.zip: wget --content-disposition "http://bbs.espressif.com/download/file.php?id=190" libssl.zip: wget --content-disposition "http://bbs.espressif.com/download/file.php?id=316" libnet80211.zip: wget --content-disposition "http://bbs.espressif.com/download/file.php?id=361" sdk: $(VENDOR_SDK_DIR)/.dir ln -snf $(VENDOR_SDK_DIR) sdk $(VENDOR_SDK_DIR)/.dir: $(VENDOR_SDK_ZIP) $(UNZIP) $^ -mv License $(VENDOR_SDK_DIR) touch $@ esp_iot_sdk_v1.0.1_15_04_24.zip: wget --content-disposition "http://bbs.espressif.com/download/file.php?id=325" esp_iot_sdk_v1.0.1_b2_15_04_10.zip: wget --content-disposition "http://bbs.espressif.com/download/file.php?id=293" esp_iot_sdk_v1.0.1_b1_15_04_02.zip: wget --content-disposition "http://bbs.espressif.com/download/file.php?id=276" esp_iot_sdk_v1.0.0_15_03_20.zip: wget --content-disposition "http://bbs.espressif.com/download/file.php?id=250" esp_iot_sdk_v0.9.6_b1_15_02_15.zip: wget --content-disposition "http://bbs.espressif.com/download/file.php?id=220" esp_iot_sdk_v0.9.5_15_01_23.zip: wget --content-disposition "http://bbs.espressif.com/download/file.php?id=189" esp_iot_sdk_v0.9.4_14_12_19.zip: wget --content-disposition "http://bbs.espressif.com/download/file.php?id=111" esp_iot_sdk_v0.9.3_14_11_21.zip: wget --content-disposition "http://bbs.espressif.com/download/file.php?id=72" esp_iot_sdk_v0.9.2_14_10_24.zip: wget --content-disposition "http://bbs.espressif.com/download/file.php?id=9" libhal: $(TOOLCHAIN)/xtensa-lx106-elf/sysroot/usr/lib/libhal.a $(TOOLCHAIN)/xtensa-lx106-elf/sysroot/usr/lib/libhal.a: $(TOOLCHAIN)/bin/xtensa-lx106-elf-gcc make -C lx106-hal -f ../Makefile _libhal _libhal: autoreconf -i PATH=$(TOOLCHAIN)/bin:$(PATH) ./configure --host=xtensa-lx106-elf --prefix=$(TOOLCHAIN)/xtensa-lx106-elf/sysroot/usr PATH=$(TOOLCHAIN)/bin:$(PATH) make PATH=$(TOOLCHAIN)/bin:$(PATH) make install toolchain: $(TOOLCHAIN)/bin/xtensa-lx106-elf-gcc $(TOOLCHAIN)/bin/xtensa-lx106-elf-gcc: crosstool-NG/ct-ng make -C crosstool-NG -f ../Makefile _toolchain _toolchain: ./ct-ng xtensa-lx106-elf sed -r -i.org s%CT_PREFIX_DIR=.*%CT_PREFIX_DIR="$(TOOLCHAIN)"% .config sed -r -i s%CT_INSTALL_DIR_RO=y%"#"CT_INSTALL_DIR_RO=y% .config cat ../crosstool-config-overrides >> .config ./ct-ng build crosstool-NG: crosstool-NG/ct-ng crosstool-NG/ct-ng: crosstool-NG/bootstrap make -C crosstool-NG -f ../Makefile _ct-ng _ct-ng: ./bootstrap ./configure --prefix=`pwd` make MAKELEVEL=0 make install MAKELEVEL=0 crosstool-NG/bootstrap: @echo "You cloned without --recursive, fetching submodules for you." git submodule update --init --recursive clean: clean-sdk make -C crosstool-NG clean MAKELEVEL=0 -rm -rf $(TOOLCHAIN) clean-sdk: rm -rf $(VENDOR_SDK_DIR) rm -f sdk rm -f .sdk_patch_$(VENDOR_SDK) clean-sysroot: rm -rf $(TOOLCHAIN)/xtensa-lx106-elf/sysroot/usr/lib/* rm -rf $(TOOLCHAIN)/xtensa-lx106-elf/sysroot/usr/include/*