Compare commits

..

1 commit

Author SHA1 Message Date
Paul Sokolovsky
e579d284af Install lwIP headers into toolchain sysroot for easy access.
"arch" directory (and somewhat "netif" too) aren't namespaced well enough,
but they're still kind of system headers, as lwIP is a foundation of ESP
networking, so any conflicts would be problem of conflicting packages.
2016-03-08 23:13:57 +07:00
13 changed files with 48 additions and 492 deletions

6
.gitmodules vendored
View file

@ -1,14 +1,14 @@
[submodule "crosstool-NG"] [submodule "crosstool-NG"]
path = crosstool-NG path = crosstool-NG
url = https://github.com/jcmvbkbc/crosstool-NG url = https://github.com/jcmvbkbc/crosstool-NG
branch = xtensa-1.22.x branch = lx106-g++
[submodule "lx106-hal"] [submodule "lx106-hal"]
path = lx106-hal path = lx106-hal
url = https://github.com/tommie/lx106-hal url = https://github.com/tommie/lx106-hal
[submodule "esptool"] [submodule "esptool"]
path = esptool path = esptool
url = https://github.com/themadinventor/esptool url = https://github.com/pfalcon/esptool
[submodule "esp-open-lwip"] [submodule "esp-open-lwip"]
path = esp-open-lwip path = esp-open-lwip
url = https://github.com/pfalcon/esp-open-lwip url = https://github.com/pfalcon/esp-open-lwip
branch = sdk-1.5.0-experimental branch = sdk-1.5.0

View file

@ -1,48 +0,0 @@
dist: trusty
language: bash
cache:
directories:
- "${HOME}/persist"
addons:
apt:
packages:
- make
- unrar-free
- autoconf
- automake
- libtool
- gcc
- g++
- gperf
- flex
- bison
- texinfo
- gawk
- ncurses-dev
- libexpat-dev
- python-dev
- python
- python-serial
- sed
- git
- unzip
- bash
- help2man
- wget
- bzip2
script:
- make toolchain
- ls -l xtensa-lx106-elf/bin/
- make STANDALONE=y
after_success:
- mkdir -p dist
- tar cavf dist/xtensa-lx106-elf-standalone.tar.gz xtensa-lx106-elf
deploy:
provider: releases
api_key:
secure: fw5W0SFdMtP+rTlRRMEGHhWgbN3DrOfBjXK1OblRsiotUeMxesjKBb0DflMfxT3+hqpNm7qj4l4BZ/M755dnZEE64wCCah8p8CXP0yRl5KpH27Nkfg1vLmWDkZgcSqd3UIv6GMfgZlXolWpXhPYmv/ZR0JuMJBhpkMgJs1aRDHabM34477HuOvuOujm7lbnC1+EWDvyrsK/7OL5PzDLD8f3F7G/3JI1MwpHxpof6vsDK1ao6t/TYfcy+wRQVLgda2m6xz5IERly1rAwuoQII5n9q+p0+XVuPUFKW6YKZdGFo2zIlv++JuU96uLImXAZXI5TTpVS7xckW1ODCUNPNKPww+lW4TThfnB0b6OoNcACDbQV4CbI17zQNN9Qxb3cKKbBVEhKmc1Q31ajzTQfsaXkmuoj+EWAOM6/vwQgkNfBwYQ7e2reYc3+i+IAthdbYRs1ia3yWYLPomrr1DFNyoSHnGB0IKkynfe66n4oCX9F5BMsKIAh7r0YTBjO7O7DSBqS2SsQI5twiNgU5KtXBlPfTwoH5lmydBW5DInNAr+SOXRQKJvpqVbXDxffagYxgejB+QTeTNi2IH62xeWIx2aK/9lKA2fWwoj/WcJ/X1ZP4ZdUNNnOtdgrI1MIrj85b+bgW0cuE1AdLHn9Do74OKDiG0w6LrhvTFirHOCEIo3g=
file: dist/xtensa-lx106-elf-standalone.tar.gz
skip_cleanup: true
on:
repo: jepler/esp-open-sdk
tags: true

View file

@ -1,253 +0,0 @@
https://github.com/jcmvbkbc/gcc-xtensa/commit/6b0c9f92fb8e11c6be098febb4f502f6af37cd35.patch
From 6b0c9f92fb8e11c6be098febb4f502f6af37cd35 Mon Sep 17 00:00:00 2001
From: Max Filippov <jcmvbkbc@gmail.com>
Date: Thu, 11 Jun 2015 17:56:57 +0300
Subject: [PATCH] WIP: xtensa: add -mforce-l32
Signed-off-by: Max Filippov <jcmvbkbc@gmail.com>
---
gcc/config/xtensa/constraints.md | 15 ++++++++++++
gcc/config/xtensa/xtensa.c | 53 +++++++++++++++++++++++++++++++++++++++-
gcc/config/xtensa/xtensa.md | 49 ++++++++++++++++++++-----------------
gcc/config/xtensa/xtensa.opt | 4 +++
4 files changed, 98 insertions(+), 23 deletions(-)
diff --git a/gcc/config/xtensa/constraints.md b/gcc/config/xtensa/constraints.md
index 30f4c1f..5fd9337 100644
--- a/gcc/config/xtensa/constraints.md
+++ b/gcc/config/xtensa/constraints.md
@@ -137,3 +137,18 @@
(and (match_code "reg")
(match_test "reload_in_progress
&& REGNO (op) >= FIRST_PSEUDO_REGISTER"))))
+
+(define_constraint "Y"
+ "Memory that is not in a literal pool."
+ (ior (and (and (match_code "mem")
+ (match_test "! constantpool_mem_p (op)"))
+ (match_test "!TARGET_FORCE_L32"))
+ (and (match_code "reg")
+ (match_test "reload_in_progress
+ && REGNO (op) >= FIRST_PSEUDO_REGISTER"))))
+
+(define_constraint "Z"
+ "Memory that is not in a literal pool."
+ (and (and (match_code "mem")
+ (match_test "! constantpool_mem_p (op)"))
+ (match_test "TARGET_FORCE_L32")))
diff --git a/gcc/config/xtensa/xtensa.c b/gcc/config/xtensa/xtensa.c
index d8c5b41..559b181 100644
--- a/gcc/config/xtensa/xtensa.c
+++ b/gcc/config/xtensa/xtensa.c
@@ -1824,7 +1824,8 @@ xtensa_legitimate_address_p (machine_mode mode, rtx addr, bool strict)
return true;
/* Check for "register + offset" addressing. */
- if (GET_CODE (addr) == PLUS)
+ if (GET_CODE (addr) == PLUS &&
+ (!TARGET_FORCE_L32 || (mode != HImode && mode != QImode)))
{
rtx xplus0 = XEXP (addr, 0);
rtx xplus1 = XEXP (addr, 1);
@@ -2308,6 +2309,8 @@ printx (FILE *file, signed int val)
fprintf (file, "0x%x", val);
}
+static void
+output_address_base (FILE *file, rtx addr);
void
print_operand (FILE *file, rtx x, int letter)
@@ -2317,6 +2320,13 @@ print_operand (FILE *file, rtx x, int letter)
switch (letter)
{
+ case 'B':
+ if (GET_CODE (x) == MEM)
+ output_address_base (file, XEXP (x, 0));
+ else
+ output_operand_lossage ("invalid %%B value");
+ break;
+
case 'D':
if (GET_CODE (x) == REG || GET_CODE (x) == SUBREG)
fprintf (file, "%s", reg_names[xt_true_regnum (x) + 1]);
@@ -2450,6 +2460,47 @@ print_operand (FILE *file, rtx x, int letter)
}
}
+static void
+output_address_base (FILE *file, rtx addr)
+{
+ switch (GET_CODE (addr))
+ {
+ default:
+ fatal_insn ("invalid address", addr);
+ break;
+
+ case REG:
+ fprintf (file, "%s", reg_names [REGNO (addr)]);
+ break;
+
+ case PLUS:
+ {
+ rtx reg = (rtx)0;
+ rtx offset = (rtx)0;
+ rtx arg0 = XEXP (addr, 0);
+ rtx arg1 = XEXP (addr, 1);
+
+ if (GET_CODE (arg0) == REG)
+ {
+ reg = arg0;
+ offset = arg1;
+ }
+ else if (GET_CODE (arg1) == REG)
+ {
+ reg = arg1;
+ offset = arg0;
+ }
+ else
+ fatal_insn ("no register in address", addr);
+
+ if (CONSTANT_P (offset))
+ fprintf (file, "%s", reg_names [REGNO (reg)]);
+ else
+ fatal_insn ("address offset not a constant", addr);
+ }
+ break;
+ }
+}
/* A C compound statement to output to stdio stream STREAM the
assembler syntax for an instruction operand that is a memory
diff --git a/gcc/config/xtensa/xtensa.md b/gcc/config/xtensa/xtensa.md
index a577aa3..f56c45e 100644
--- a/gcc/config/xtensa/xtensa.md
+++ b/gcc/config/xtensa/xtensa.md
@@ -532,26 +532,28 @@
;; Zero-extend instructions.
(define_insn "zero_extendhisi2"
- [(set (match_operand:SI 0 "register_operand" "=a,a")
- (zero_extend:SI (match_operand:HI 1 "nonimmed_operand" "r,U")))]
+ [(set (match_operand:SI 0 "register_operand" "=a,a,a")
+ (zero_extend:SI (match_operand:HI 1 "nonimmed_operand" "r,Y,Z")))]
""
"@
extui\t%0, %1, 0, 16
- l16ui\t%0, %1"
- [(set_attr "type" "arith,load")
+ l16ui\t%0, %1
+ ssa8l\t%B1 ; srli\t%0, %B1, 2 ; slli\t%0, %0, 2 ; l32i\t%0, %0, 0 ; srl\t%0, %0 ; extui\t%0, %0, 0, 16"
+ [(set_attr "type" "arith,load,load")
(set_attr "mode" "SI")
- (set_attr "length" "3,3")])
+ (set_attr "length" "3,3,18")])
(define_insn "zero_extendqisi2"
- [(set (match_operand:SI 0 "register_operand" "=a,a")
- (zero_extend:SI (match_operand:QI 1 "nonimmed_operand" "r,U")))]
+ [(set (match_operand:SI 0 "register_operand" "=a,a,a")
+ (zero_extend:SI (match_operand:QI 1 "nonimmed_operand" "r,Y,Z")))]
""
"@
extui\t%0, %1, 0, 8
- l8ui\t%0, %1"
- [(set_attr "type" "arith,load")
+ l8ui\t%0, %1
+ ssa8l\t%B1 ; srli\t%0, %B1, 2 ; slli\t%0, %0, 2 ; l32i\t%0, %0, 0 ; srl\t%0, %0 ; extui\t%0, %0, 0, 8"
+ [(set_attr "type" "arith,load,load")
(set_attr "mode" "SI")
- (set_attr "length" "3,3")])
+ (set_attr "length" "3,3,18")])
;; Sign-extend instructions.
@@ -569,15 +571,16 @@
})
(define_insn "extendhisi2_internal"
- [(set (match_operand:SI 0 "register_operand" "=B,a")
- (sign_extend:SI (match_operand:HI 1 "sext_operand" "r,U")))]
+ [(set (match_operand:SI 0 "register_operand" "=B,a,a")
+ (sign_extend:SI (match_operand:HI 1 "sext_operand" "r,r,Y")))]
""
"@
sext\t%0, %1, 15
+ slli\t%0, %1, 16 ; srai\t%0, %0, 16
l16si\t%0, %1"
- [(set_attr "type" "arith,load")
+ [(set_attr "type" "arith,arith,load")
(set_attr "mode" "SI")
- (set_attr "length" "3,3")])
+ (set_attr "length" "3,6,3")])
(define_expand "extendqisi2"
[(set (match_operand:SI 0 "register_operand" "")
@@ -796,8 +799,8 @@
})
(define_insn "movhi_internal"
- [(set (match_operand:HI 0 "nonimmed_operand" "=D,D,a,a,a,U,*a,*A")
- (match_operand:HI 1 "move_operand" "M,d,r,I,U,r,*A,*r"))]
+ [(set (match_operand:HI 0 "nonimmed_operand" "=D,D,a,a,a,a,U,*a,*A")
+ (match_operand:HI 1 "move_operand" "M,d,r,I,Y,Z,r,*A,*r"))]
"xtensa_valid_move (HImode, operands)"
"@
movi.n\t%0, %x1
@@ -805,12 +808,13 @@
mov\t%0, %1
movi\t%0, %x1
%v1l16ui\t%0, %1
+ ssa8l\t%B1 ; srli\t%0, %B1, 2 ; slli\t%0, %0, 2 ; %v1l32i\t%0, %0, 0 ; srl\t%0, %0 ; extui\t%0, %0, 0, 16
%v0s16i\t%1, %0
rsr\t%0, ACCLO
wsr\t%1, ACCLO"
- [(set_attr "type" "move,move,move,move,load,store,rsr,wsr")
+ [(set_attr "type" "move,move,move,move,load,load,store,rsr,wsr")
(set_attr "mode" "HI")
- (set_attr "length" "2,2,3,3,3,3,3,3")])
+ (set_attr "length" "2,2,3,3,3,18,3,3,3")])
;; 8-bit Integer moves
@@ -824,8 +828,8 @@
})
(define_insn "movqi_internal"
- [(set (match_operand:QI 0 "nonimmed_operand" "=D,D,a,a,a,U,*a,*A")
- (match_operand:QI 1 "move_operand" "M,d,r,I,U,r,*A,*r"))]
+ [(set (match_operand:QI 0 "nonimmed_operand" "=D,D,a,a,a,a,U,*a,*A")
+ (match_operand:QI 1 "move_operand" "M,d,r,I,Y,Z,r,*A,*r"))]
"xtensa_valid_move (QImode, operands)"
"@
movi.n\t%0, %x1
@@ -833,12 +837,13 @@
mov\t%0, %1
movi\t%0, %x1
%v1l8ui\t%0, %1
+ ssa8l\t%B1 ; srli\t%0, %B1, 2 ; slli\t%0, %0, 2 ; %v1l32i\t%0, %0, 0 ; srl\t%0, %0 ; extui\t%0, %0, 0, 8
%v0s8i\t%1, %0
rsr\t%0, ACCLO
wsr\t%1, ACCLO"
- [(set_attr "type" "move,move,move,move,load,store,rsr,wsr")
+ [(set_attr "type" "move,move,move,move,load,load,store,rsr,wsr")
(set_attr "mode" "QI")
- (set_attr "length" "2,2,3,3,3,3,3,3")])
+ (set_attr "length" "2,2,3,3,3,18,3,3,3")])
;; Sub-word reloads from the constant pool.
diff --git a/gcc/config/xtensa/xtensa.opt b/gcc/config/xtensa/xtensa.opt
index 2fd6cee..02020d2 100644
--- a/gcc/config/xtensa/xtensa.opt
+++ b/gcc/config/xtensa/xtensa.opt
@@ -41,3 +41,7 @@ Intersperse literal pools with code in the text section
mserialize-volatile
Target Report Mask(SERIALIZE_VOLATILE)
-mno-serialize-volatile Do not serialize volatile memory references with MEMW instructions
+
+mforce-l32
+Target Report Mask(FORCE_L32)
+Use l32i to access 1- and 2-byte quantities in memory instead of l8ui/l16ui

142
Makefile
View file

@ -10,28 +10,18 @@ TOOLCHAIN = $(TOP)/xtensa-lx106-elf
# Vendor SDK version to install, see VENDOR_SDK_ZIP_* vars below # Vendor SDK version to install, see VENDOR_SDK_ZIP_* vars below
# for supported versions. # for supported versions.
VENDOR_SDK = 2.1.0-18-g61248df VENDOR_SDK = 1.5.2
.PHONY: crosstool-NG toolchain libhal libcirom sdk .PHONY: crosstool-NG toolchain libhal libcirom sdk
TOP = $(PWD) TOP = $(PWD)
SHELL = /bin/bash
PATCH = patch -b -N PATCH = patch -b -N
UNZIP = unzip -q -o UNZIP = unzip -q -o
VENDOR_SDK_ZIP = $(VENDOR_SDK_ZIP_$(VENDOR_SDK)) VENDOR_SDK_ZIP = $(VENDOR_SDK_ZIP_$(VENDOR_SDK))
VENDOR_SDK_DIR = $(VENDOR_SDK_DIR_$(VENDOR_SDK)) VENDOR_SDK_DIR = $(VENDOR_SDK_DIR_$(VENDOR_SDK))
VENDOR_SDK_DIR_2.1.0-18-g61248df = ESP8266_NONOS_SDK-2.1.0-18-g61248df
VENDOR_SDK_ZIP_2.1.0 = ESP8266_NONOS_SDK-2.1.0.zip
VENDOR_SDK_DIR_2.1.0 = ESP8266_NONOS_SDK-2.1.0
VENDOR_SDK_ZIP_2.0.0 = ESP8266_NONOS_SDK_V2.0.0_16_08_10.zip
VENDOR_SDK_DIR_2.0.0 = ESP8266_NONOS_SDK_V2.0.0_16_08_10
VENDOR_SDK_ZIP_1.5.4 = ESP8266_NONOS_SDK_V1.5.4_16_05_20.zip
VENDOR_SDK_DIR_1.5.4 = ESP8266_NONOS_SDK_V1.5.4_16_05_20
VENDOR_SDK_ZIP_1.5.3 = ESP8266_NONOS_SDK_V1.5.3_16_04_18.zip
VENDOR_SDK_DIR_1.5.3 = ESP8266_NONOS_SDK_V1.5.3_16_04_18/ESP8266_NONOS_SDK
VENDOR_SDK_ZIP_1.5.2 = ESP8266_NONOS_SDK_V1.5.2_16_01_29.zip VENDOR_SDK_ZIP_1.5.2 = ESP8266_NONOS_SDK_V1.5.2_16_01_29.zip
VENDOR_SDK_DIR_1.5.2 = esp_iot_sdk_v1.5.2 VENDOR_SDK_DIR_1.5.2 = esp_iot_sdk_v1.5.2
VENDOR_SDK_ZIP_1.5.1 = ESP8266_NONOS_SDK_V1.5.1_16_01_08.zip VENDOR_SDK_ZIP_1.5.1 = ESP8266_NONOS_SDK_V1.5.1_16_01_08.zip
@ -103,21 +93,10 @@ ifeq ($(STANDALONE),y)
endif endif
clean: clean-sdk clean: clean-sdk
$(MAKE) -C crosstool-NG clean MAKELEVEL=0 make -C crosstool-NG clean MAKELEVEL=0
-rm -rf crosstool-NG/.build/src -rm -rf crosstool-NG/.build/src
-rm -f crosstool-NG/local-patches/gcc/4.8.5/1000-*
-rm -rf $(TOOLCHAIN) -rm -rf $(TOOLCHAIN)
clean-sdk:
rm -rf $(VENDOR_SDK_DIR)
rm -f sdk
rm -f .sdk_patch_$(VENDOR_SDK)
rm -f user_rf_cal_sector_set.o empty_user_rf_pre_init.o
$(MAKE) -C esp-open-lwip -f Makefile.open clean
clean-sysroot:
rm -rf $(TOOLCHAIN)/xtensa-lx106-elf/sysroot/usr/lib/*
rm -rf $(TOOLCHAIN)/xtensa-lx106-elf/sysroot/usr/include/*
esptool: toolchain esptool: toolchain
@ -126,8 +105,7 @@ esptool: toolchain
toolchain: $(TOOLCHAIN)/bin/xtensa-lx106-elf-gcc toolchain: $(TOOLCHAIN)/bin/xtensa-lx106-elf-gcc
$(TOOLCHAIN)/bin/xtensa-lx106-elf-gcc: crosstool-NG/ct-ng $(TOOLCHAIN)/bin/xtensa-lx106-elf-gcc: crosstool-NG/ct-ng
cp -f 1000-mforce-l32.patch crosstool-NG/local-patches/gcc/4.8.5/ make -C crosstool-NG -f ../Makefile _toolchain
$(MAKE) -C crosstool-NG -f ../Makefile _toolchain
_toolchain: _toolchain:
./ct-ng xtensa-lx106-elf ./ct-ng xtensa-lx106-elf
@ -136,17 +114,20 @@ _toolchain:
cat ../crosstool-config-overrides >> .config cat ../crosstool-config-overrides >> .config
./ct-ng build ./ct-ng build
clean-sysroot:
rm -rf $(TOOLCHAIN)/xtensa-lx106-elf/sysroot/usr/lib/*
rm -rf $(TOOLCHAIN)/xtensa-lx106-elf/sysroot/usr/include/*
crosstool-NG: crosstool-NG/ct-ng crosstool-NG: crosstool-NG/ct-ng
crosstool-NG/ct-ng: crosstool-NG/bootstrap crosstool-NG/ct-ng: crosstool-NG/bootstrap
$(MAKE) -C crosstool-NG -f ../Makefile _ct-ng make -C crosstool-NG -f ../Makefile _ct-ng
_ct-ng: _ct-ng:
./bootstrap ./bootstrap
./configure --prefix=`pwd` ./configure --prefix=`pwd`
$(MAKE) MAKELEVEL=0 make MAKELEVEL=0
$(MAKE) install MAKELEVEL=0 make install MAKELEVEL=0
crosstool-NG/bootstrap: crosstool-NG/bootstrap:
@echo "You cloned without --recursive, fetching submodules for you." @echo "You cloned without --recursive, fetching submodules for you."
@ -162,13 +143,13 @@ $(TOOLCHAIN)/xtensa-lx106-elf/sysroot/lib/libcirom.a: $(TOOLCHAIN)/xtensa-lx106-
libhal: $(TOOLCHAIN)/xtensa-lx106-elf/sysroot/usr/lib/libhal.a 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 $(TOOLCHAIN)/xtensa-lx106-elf/sysroot/usr/lib/libhal.a: $(TOOLCHAIN)/bin/xtensa-lx106-elf-gcc
$(MAKE) -C lx106-hal -f ../Makefile _libhal make -C lx106-hal -f ../Makefile _libhal
_libhal: _libhal:
autoreconf -i autoreconf -i
PATH="$(TOOLCHAIN)/bin:$(PATH)" ./configure --host=xtensa-lx106-elf --prefix=$(TOOLCHAIN)/xtensa-lx106-elf/sysroot/usr 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
PATH="$(TOOLCHAIN)/bin:$(PATH)" $(MAKE) install PATH=$(TOOLCHAIN)/bin:$(PATH) make install
@ -180,62 +161,10 @@ $(VENDOR_SDK_DIR)/.dir: $(VENDOR_SDK_ZIP)
-mv License $(VENDOR_SDK_DIR) -mv License $(VENDOR_SDK_DIR)
touch $@ touch $@
$(VENDOR_SDK_DIR_2.1.0-18-g61248df)/.dir:
echo $(VENDOR_SDK_DIR_2.1.0-18-g61248df)
git clone https://github.com/espressif/ESP8266_NONOS_SDK $(VENDOR_SDK_DIR_2.1.0-18-g61248df)
(cd $(VENDOR_SDK_DIR_2.1.0-18-g61248df); git checkout 61248df5f6)
touch $@
$(VENDOR_SDK_DIR_2.1.0)/.dir: $(VENDOR_SDK_ZIP_2.1.0)
$(UNZIP) $^
touch $@
$(VENDOR_SDK_DIR_2.0.0)/.dir: $(VENDOR_SDK_ZIP_2.0.0)
$(UNZIP) $^
mv ESP8266_NONOS_SDK $(VENDOR_SDK_DIR_2.0.0)
-mv License $(VENDOR_SDK_DIR)
touch $@
$(VENDOR_SDK_DIR_1.5.4)/.dir: $(VENDOR_SDK_ZIP_1.5.4)
$(UNZIP) $^
mv ESP8266_NONOS_SDK $(VENDOR_SDK_DIR_1.5.4)
-mv License $(VENDOR_SDK_DIR)
touch $@
sdk_patch: $(VENDOR_SDK_DIR)/.dir .sdk_patch_$(VENDOR_SDK) sdk_patch: $(VENDOR_SDK_DIR)/.dir .sdk_patch_$(VENDOR_SDK)
.sdk_patch_2.1.0-18-g61248df .sdk_patch_2.1.0: user_rf_cal_sector_set.o .sdk_patch_1.5.2:
echo -e "#undef ESP_SDK_VERSION\n#define ESP_SDK_VERSION 020100" >>$(VENDOR_SDK_DIR)/include/esp_sdk_ver.h
$(PATCH) -d $(VENDOR_SDK_DIR) -p1 < c_types-c99_sdk_2.patch
cd $(VENDOR_SDK_DIR)/lib; mkdir -p tmp; cd tmp; $(TOOLCHAIN)/bin/xtensa-lx106-elf-ar x ../libcrypto.a; cd ..; $(TOOLCHAIN)/bin/xtensa-lx106-elf-ar rs libwpa.a tmp/*.o
$(TOOLCHAIN)/bin/xtensa-lx106-elf-ar r $(VENDOR_SDK_DIR)/lib/libmain.a user_rf_cal_sector_set.o
@touch $@
.sdk_patch_2.0.0: ESP8266_NONOS_SDK_V2.0.0_patch_16_08_09.zip user_rf_cal_sector_set.o
echo -e "#undef ESP_SDK_VERSION\n#define ESP_SDK_VERSION 020000" >>$(VENDOR_SDK_DIR)/include/esp_sdk_ver.h
$(UNZIP) ESP8266_NONOS_SDK_V2.0.0_patch_16_08_09.zip
mv libmain.a libnet80211.a libpp.a $(VENDOR_SDK_DIR_2.0.0)/lib/
$(PATCH) -d $(VENDOR_SDK_DIR) -p1 < c_types-c99_sdk_2.patch
cd $(VENDOR_SDK_DIR)/lib; mkdir -p tmp; cd tmp; $(TOOLCHAIN)/bin/xtensa-lx106-elf-ar x ../libcrypto.a; cd ..; $(TOOLCHAIN)/bin/xtensa-lx106-elf-ar rs libwpa.a tmp/*.o
$(TOOLCHAIN)/bin/xtensa-lx106-elf-ar r $(VENDOR_SDK_DIR)/lib/libmain.a user_rf_cal_sector_set.o
@touch $@
.sdk_patch_1.5.4:
echo -e "#undef ESP_SDK_VERSION\n#define ESP_SDK_VERSION 010504" >>$(VENDOR_SDK_DIR)/include/esp_sdk_ver.h
$(PATCH) -d $(VENDOR_SDK_DIR) -p1 < c_types-c99.patch
cd $(VENDOR_SDK_DIR)/lib; mkdir -p tmp; cd tmp; $(TOOLCHAIN)/bin/xtensa-lx106-elf-ar x ../libcrypto.a; cd ..; $(TOOLCHAIN)/bin/xtensa-lx106-elf-ar rs libwpa.a tmp/*.o
@touch $@
.sdk_patch_1.5.3:
echo -e "#undef ESP_SDK_VERSION\n#define ESP_SDK_VERSION 010503" >>$(VENDOR_SDK_DIR)/include/esp_sdk_ver.h
$(PATCH) -d $(VENDOR_SDK_DIR) -p1 < c_types-c99.patch
cd $(VENDOR_SDK_DIR)/lib; mkdir -p tmp; cd tmp; $(TOOLCHAIN)/bin/xtensa-lx106-elf-ar x ../libcrypto.a; cd ..; $(TOOLCHAIN)/bin/xtensa-lx106-elf-ar rs libwpa.a tmp/*.o
@touch $@
.sdk_patch_1.5.2: Patch01_for_ESP8266_NONOS_SDK_V1.5.2.zip
echo -e "#undef ESP_SDK_VERSION\n#define ESP_SDK_VERSION 010502" >>$(VENDOR_SDK_DIR)/include/esp_sdk_ver.h echo -e "#undef ESP_SDK_VERSION\n#define ESP_SDK_VERSION 010502" >>$(VENDOR_SDK_DIR)/include/esp_sdk_ver.h
$(UNZIP) Patch01_for_ESP8266_NONOS_SDK_V1.5.2.zip
mv libssl.a libnet80211.a libmain.a $(VENDOR_SDK_DIR_1.5.2)/lib/
$(PATCH) -d $(VENDOR_SDK_DIR) -p1 < c_types-c99.patch $(PATCH) -d $(VENDOR_SDK_DIR) -p1 < c_types-c99.patch
cd $(VENDOR_SDK_DIR)/lib; mkdir -p tmp; cd tmp; $(TOOLCHAIN)/bin/xtensa-lx106-elf-ar x ../libcrypto.a; cd ..; $(TOOLCHAIN)/bin/xtensa-lx106-elf-ar rs libwpa.a tmp/*.o cd $(VENDOR_SDK_DIR)/lib; mkdir -p tmp; cd tmp; $(TOOLCHAIN)/bin/xtensa-lx106-elf-ar x ../libcrypto.a; cd ..; $(TOOLCHAIN)/bin/xtensa-lx106-elf-ar rs libwpa.a tmp/*.o
@touch $@ @touch $@
@ -347,36 +276,17 @@ sdk_patch: $(VENDOR_SDK_DIR)/.dir .sdk_patch_$(VENDOR_SDK)
cp FRM_ERR_PATCH/*.a $(VENDOR_SDK_DIR)/lib/ cp FRM_ERR_PATCH/*.a $(VENDOR_SDK_DIR)/lib/
@touch $@ @touch $@
empty_user_rf_pre_init.o: empty_user_rf_pre_init.c $(TOOLCHAIN)/bin/xtensa-lx106-elf-gcc $(VENDOR_SDK_DIR)/.dir empty_user_rf_pre_init.o: empty_user_rf_pre_init.c $(TOOLCHAIN)/bin/xtensa-lx106-elf-gcc
$(TOOLCHAIN)/bin/xtensa-lx106-elf-gcc -O2 -I$(VENDOR_SDK_DIR)/include -c $< $(TOOLCHAIN)/bin/xtensa-lx106-elf-gcc -O2 -c $<
user_rf_cal_sector_set.o: user_rf_cal_sector_set.c $(TOOLCHAIN)/bin/xtensa-lx106-elf-gcc $(VENDOR_SDK_DIR)/.dir
$(TOOLCHAIN)/bin/xtensa-lx106-elf-gcc -O2 -I$(VENDOR_SDK_DIR)/include -c $<
lwip: toolchain sdk_patch lwip: toolchain sdk_patch
ifeq ($(STANDALONE),y) make -C esp-open-lwip -f Makefile.open install \
$(MAKE) -C esp-open-lwip -f Makefile.open install \
CC=$(TOOLCHAIN)/bin/xtensa-lx106-elf-gcc \ CC=$(TOOLCHAIN)/bin/xtensa-lx106-elf-gcc \
AR=$(TOOLCHAIN)/bin/xtensa-lx106-elf-ar \
PREFIX=$(TOOLCHAIN) PREFIX=$(TOOLCHAIN)
cp -a esp-open-lwip/include/arch esp-open-lwip/include/lwip esp-open-lwip/include/netif \ cp -a esp-open-lwip/include/arch esp-open-lwip/include/lwip esp-open-lwip/include/netif \
esp-open-lwip/include/lwipopts.h \ esp-open-lwip/include/lwipopts.h \
$(TOOLCHAIN)/xtensa-lx106-elf/sysroot/usr/include/ $(TOOLCHAIN)/xtensa-lx106-elf/sysroot/usr/include/
endif
ESP8266_NONOS_SDK-2.1.0.zip:
wget --content-disposition "https://github.com/espressif/ESP8266_NONOS_SDK/archive/v2.1.0.zip"
# The only change wrt to ESP8266_NONOS_SDK_V2.0.0_16_07_19.zip is licensing blurb in source/
# header files. Libs are the same (and patch is required just the same).
ESP8266_NONOS_SDK_V2.0.0_16_08_10.zip:
wget --content-disposition "http://bbs.espressif.com/download/file.php?id=1690"
ESP8266_NONOS_SDK_V2.0.0_16_07_19.zip:
wget --content-disposition "http://bbs.espressif.com/download/file.php?id=1613"
ESP8266_NONOS_SDK_V1.5.4_16_05_20.zip:
wget --content-disposition "http://bbs.espressif.com/download/file.php?id=1469"
ESP8266_NONOS_SDK_V1.5.3_16_04_18.zip:
wget --content-disposition "http://bbs.espressif.com/download/file.php?id=1361"
ESP8266_NONOS_SDK_V1.5.2_16_01_29.zip: ESP8266_NONOS_SDK_V1.5.2_16_01_29.zip:
wget --content-disposition "http://bbs.espressif.com/download/file.php?id=1079" wget --content-disposition "http://bbs.espressif.com/download/file.php?id=1079"
ESP8266_NONOS_SDK_V1.5.1_16_01_08.zip: ESP8266_NONOS_SDK_V1.5.1_16_01_08.zip:
@ -440,7 +350,17 @@ libsmartconfig_2.4.2.zip:
wget --content-disposition "http://bbs.espressif.com/download/file.php?id=585" wget --content-disposition "http://bbs.espressif.com/download/file.php?id=585"
lib_mem_optimize_150714.zip: lib_mem_optimize_150714.zip:
wget --content-disposition "http://bbs.espressif.com/download/file.php?id=594" wget --content-disposition "http://bbs.espressif.com/download/file.php?id=594"
Patch01_for_ESP8266_NONOS_SDK_V1.5.2.zip:
wget --content-disposition "http://bbs.espressif.com/download/file.php?id=1168" clean-sdk:
ESP8266_NONOS_SDK_V2.0.0_patch_16_08_09.zip: rm -rf $(VENDOR_SDK_DIR)
wget --content-disposition "http://bbs.espressif.com/download/file.php?id=1654" rm -f sdk
rm -f .sdk_patch_$(VENDOR_SDK)
make -C esp-open-lwip -f Makefile.open clean

View file

@ -36,7 +36,7 @@ Requirements and Dependencies
To build the standalone SDK and toolchain, you need a GNU/POSIX system To build the standalone SDK and toolchain, you need a GNU/POSIX system
(Linux, BSD, MacOSX, Windows with Cygwin) with the standard GNU development (Linux, BSD, MacOSX, Windows with Cygwin) with the standard GNU development
tools installed: bash, gcc, binutils, flex, bison, etc. tools installed: gcc, binutils, flex, bison, etc.
Please make sure that the machine you use to build the toolchain has at least Please make sure that the machine you use to build the toolchain has at least
1G free RAM+swap (or more, which will speed up the build). 1G free RAM+swap (or more, which will speed up the build).
@ -45,9 +45,9 @@ Please make sure that the machine you use to build the toolchain has at least
Ubuntu 14.04: Ubuntu 14.04:
``` ```
$ sudo apt-get install make unrar-free autoconf automake libtool gcc g++ gperf \ $ sudo apt-get install make unrar autoconf automake libtool gcc g++ gperf \
flex bison texinfo gawk ncurses-dev libexpat-dev python-dev python python-serial \ flex bison texinfo gawk ncurses-dev libexpat-dev python python-serial sed \
sed git unzip bash help2man wget bzip2 git unzip
``` ```
Later Debian/Ubuntu versions may require: Later Debian/Ubuntu versions may require:
@ -58,7 +58,7 @@ $ sudo apt-get install libtool-bin
## MacOS: ## MacOS:
```bash ```bash
$ brew tap homebrew/dupes $ brew tap homebrew/dupes
$ brew install binutils coreutils automake wget gawk libtool help2man gperf gnu-sed --with-default-names grep $ brew install binutils coreutils automake wget gawk libtool gperf gnu-sed --with-default-names grep
$ export PATH="/usr/local/opt/gnu-sed/libexec/gnubin:$PATH" $ export PATH="/usr/local/opt/gnu-sed/libexec/gnubin:$PATH"
``` ```
@ -139,11 +139,6 @@ $ xtensa-lx106-elf-gcc -I$(THISDIR)/sdk/include -L$(THISDIR)/sdk/lib
The extra -I and -L flags are not needed when using the standalone SDK. The extra -I and -L flags are not needed when using the standalone SDK.
Subdirectory `examples/` contains some example application(s) which
can be built with esp-open-sdk. If you are interested in real-world,
full-fledged, advanced example of a project built using esp-open-sdk,
check https://github.com/micropython/micropython/tree/master/ports/esp8266.
Pulling updates Pulling updates
=============== ===============
The project is updated from time to time, to get updates and prepare to The project is updated from time to time, to get updates and prepare to
@ -153,7 +148,7 @@ build a new SDK, run:
$ make clean $ make clean
$ git pull $ git pull
$ git submodule sync $ git submodule sync
$ git submodule update --init $ git submodule update
``` ```
If you don't issue `make clean` (which causes toolchain and SDK to be If you don't issue `make clean` (which causes toolchain and SDK to be

View file

@ -1,45 +0,0 @@
This patch fixes vendor SDK header "c_types.h" for C99 compatibility.
--- ESP8266_NONOS_SDK_V2.0.0_16_07_19/include/c_types.h.orig 2016-07-18 07:16:07.000000000 -0700
+++ ESP8266_NONOS_SDK_V2.0.0_16_07_19/include/c_types.h 2016-07-26 21:45:18.904657700 -0700
@@ -6,17 +6,19 @@
#ifndef _C_TYPES_H_
#define _C_TYPES_H_
-typedef unsigned char uint8_t;
+#include <stdint.h>
+#include <stdbool.h>
+//typedef unsigned char uint8_t;
typedef signed char sint8_t;
-typedef signed char int8_t;
-typedef unsigned short uint16_t;
+//typedef signed char int8_t;
+//typedef unsigned short uint16_t;
typedef signed short sint16_t;
-typedef signed short int16_t;
-typedef unsigned int uint32_t;
+//typedef signed short int16_t;
+//typedef unsigned int uint32_t;
typedef signed long sint32_t;
-typedef signed int int32_t;
+//typedef signed int int32_t;
typedef signed long long sint64_t;
-typedef unsigned long long uint64_t;
+//typedef unsigned long long uint64_t;
typedef unsigned long long u_int64_t;
typedef float real32_t;
typedef double real64_t;
@@ -82,10 +84,10 @@
#define STORE_ATTR __attribute__((aligned(4)))
#ifndef __cplusplus
-typedef unsigned char bool;
+//typedef unsigned char bool;
#define BOOL bool
-#define true (1)
-#define false (0)
+//#define true (1)
+//#define false (0)
#define TRUE true
#define FALSE false

@ -1 +1 @@
Subproject commit 37b07f6fbea2e5d23434f7e91614528f839db056 Subproject commit feb1fb829d5cb4f8739e488cbd2f0b72304705bb

@ -1 +1 @@
Subproject commit 8c39d2179a273553466043f388772abb6251a4ca Subproject commit 5bd20afa6869b682001250e2a95c261390f1098d

@ -1 +1 @@
Subproject commit 9dfcb350e1a91bb4641f725fc6c2f126791013ce Subproject commit aafef9cebe1b196368567d6c3dd1fe896222a35f

View file

@ -1,6 +1,6 @@
CC = xtensa-lx106-elf-gcc CC = xtensa-lx106-elf-gcc
CFLAGS = -I. -mlongcalls CFLAGS = -I. -mlongcalls
LDLIBS = -nostdlib -Wl,--start-group -lmain -lnet80211 -lwpa -llwip -lpp -lphy -lc -Wl,--end-group -lgcc LDLIBS = -nostdlib -Wl,--start-group -lmain -lnet80211 -lwpa -llwip -lpp -lphy -Wl,--end-group -lgcc
LDFLAGS = -Teagle.app.v6.ld LDFLAGS = -Teagle.app.v6.ld
blinky-0x00000.bin: blinky blinky-0x00000.bin: blinky
@ -11,7 +11,7 @@ blinky: blinky.o
blinky.o: blinky.c blinky.o: blinky.c
flash: blinky-0x00000.bin flash: blinky-0x00000.bin
esptool.py write_flash 0 blinky-0x00000.bin 0x10000 blinky-0x10000.bin esptool.py write_flash 0 blinky-0x00000.bin 0x40000 blinky-0x40000.bin
clean: clean:
rm -f blinky blinky.o blinky-0x00000.bin blinky-0x10000.bin rm -f blinky blinky.o blinky-0x00000.bin blinky-0x400000.bin

BIN
examples/blinky/blinky Executable file

Binary file not shown.

View file

@ -3,9 +3,7 @@
#include "gpio.h" #include "gpio.h"
#include "os_type.h" #include "os_type.h"
// ESP-12 modules have LED on GPIO2. Change to another GPIO static const int pin = 1;
// for other boards.
static const int pin = 2;
static volatile os_timer_t some_timer; static volatile os_timer_t some_timer;
void some_timerfunc(void *arg) void some_timerfunc(void *arg)
@ -25,7 +23,7 @@ void some_timerfunc(void *arg)
void ICACHE_FLASH_ATTR user_init() void ICACHE_FLASH_ATTR user_init()
{ {
// init gpio subsytem // init gpio sussytem
gpio_init(); gpio_init();
// configure UART TXD to be GPIO1, set as output // configure UART TXD to be GPIO1, set as output

View file

@ -1,11 +0,0 @@
#include <c_types.h>
#include <spi_flash.h>
uint32 user_rf_cal_sector_set(void) {
extern char flashchip;
SpiFlashChip *flash = (SpiFlashChip*)(&flashchip + 4);
// We know that sector size in 4096
//uint32_t sec_num = flash->chip_size / flash->sector_size;
uint32_t sec_num = flash->chip_size >> 12;
return sec_num - 5;
}