From e01285d13d331140eb2d131fbb7dbb97caa4c993 Mon Sep 17 00:00:00 2001 From: Daniel Li Date: Wed, 13 Nov 2024 11:30:39 +0800 Subject: [PATCH 1/5] add cross compile files --- Makefile | 53 +++++++++++++++++++++++++++++++++++++++++++++++++++++ build.sh | 48 ++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 101 insertions(+) create mode 100755 Makefile create mode 100755 build.sh diff --git a/Makefile b/Makefile new file mode 100755 index 0000000..2ad56a0 --- /dev/null +++ b/Makefile @@ -0,0 +1,53 @@ +# Get the current date and time in the format YYYYMMDD_HHMMSS +VERSION_STRING := $(shell date +"%Y%m%d_%H%M%S") +CFLAGS ?= +CFLAGS += -Wno-address-of-packed-member -DVERSION_STRING="\"$(VERSION_STRING)\"" + +TARGET_N :="ALink42n" +TARGET_P :="ALink42p" +TARGET_Q :="ALink42q" + +SRCS_N := $(TARGET_N).c +SRCS_P := $(TARGET_P).c +SRCS_Q := $(TARGET_Q).c + +OUTPUT ?= $(PWD) +BUILD_N = $(CC) $(SRCS_N) -I $(SDK)/include -I$(TOOLCHAIN)/usr/include -L$(DRV) $(CFLAGS) $(LIB) -levent_core -Os -s -o $(OUTPUT)/$(TARGET_N) +BUILD_P = $(CC) $(SRCS_P) -I $(SDK)/include -I$(TOOLCHAIN)/usr/include -L$(DRV) $(CFLAGS) $(LIB) -levent_core -Os -s -o $(OUTPUT)/$(TARGET_P) +BUILD_Q = $(CC) $(SRCS_Q) -I $(SDK)/include -I$(TOOLCHAIN)/usr/include -L$(DRV) $(CFLAGS) $(LIB) -levent_core -Os -s -o $(OUTPUT)/$(TARGET_Q) + +clean: + rm -f *.o $(TARGET_N) $(TARGET_P) $(TARGET_Q) + +goke: + $(eval SDK = ./sdk/gk7205v300) + $(eval CFLAGS += -D__GOKE__) + $(eval LIB = -shared -ldl -ldnvqe -lgk_api -lhi_mpi -lsecurec -lupvqe -lvoice_engine -ldnvqe) + $(BUILD_N) + $(BUILD_P) + $(BUILD_Q) + +hisi: + $(eval SDK = ./sdk/hi3516ev300) + $(eval CFLAGS += -D__GOKE__) + $(eval LIB = -shared -ldnvqe -lmpi -lsecurec -lupvqe -lVoiceEngine) + $(BUILD_N) + $(BUILD_P) + $(BUILD_Q) + +star6b0: + $(eval SDK = ./sdk/infinity6) + $(eval CFLAGS += -D__SIGMASTAR__ -D__INFINITY6__ -D__INFINITY6B0__) + $(eval LIB = -lcam_os_wrapper -lm -lmi_rgn -lmi_sys) + $(BUILD_N) + $(BUILD_P) + $(BUILD_Q) + +star6e: + $(eval SDK = ./sdk/infinity6) + $(eval CFLAGS += -D__SIGMASTAR__ -D__INFINITY6__ -D__INFINITY6E__) + $(eval LIB = -lcam_os_wrapper -lm -lmi_rgn -lmi_sys -lmi_venc) + $(BUILD_N) + $(BUILD_P) + $(BUILD_Q) + diff --git a/build.sh b/build.sh new file mode 100755 index 0000000..d2d65fb --- /dev/null +++ b/build.sh @@ -0,0 +1,48 @@ +#!/bin/bash +DL="https://github.com/openipc/firmware/releases/download/latest" + +if [[ "$1" == *"star6b0" ]]; then + CC=cortex_a7_thumb2_hf-gcc13-musl-4_9 + GCC=$PWD/toolchain/$CC/bin/arm-linux-gcc +elif [[ "$1" == *"star6e" ]]; then + CC=cortex_a7_thumb2_hf-gcc13-glibc-4_9 + GCC=$PWD/toolchain/$CC/bin/arm-linux-gcc +elif [[ "$1" == *"goke" ]]; then + CC=cortex_a7_thumb2-gcc13-musl-4_9 + GCC=$PWD/toolchain/$CC/bin/arm-linux-gcc +elif [[ "$1" == *"hisi" ]]; then + CC=cortex_a7_thumb2-gcc13-musl-4_9 + GCC=$PWD/toolchain/$CC/bin/arm-linux-gcc +else + echo "Usage: $0 [goke|hisi|star6b0|star6e|]" + exit 1 +fi + +OUT=$PWD/release/$1 + +mkdir -p $OUT + +if [ ! -e toolchain/$CC ]; then + wget -c -q --show-progress $DL/$CC.tgz -P $PWD + mkdir -p toolchain/$CC + tar -xf $CC.tgz -C toolchain/$CC --strip-components=1 || exit 1 + rm -f $CC.tgz +fi + +if [ ! -e firmware ]; then + git clone https://github.com/openipc/firmware --depth=1 +fi + +if [ "$1" = "goke" ]; then + DRV=$PWD/firmware/general/package/goke-osdrv-gk7205v200/files/lib + make -B CC=$GCC DRV=$DRV TOOLCHAIN=$PWD/toolchain/$CC OUTPUT=$OUT $1 +elif [ "$1" = "hisi" ]; then + DRV=$PWD/firmware/general/package/hisilicon-osdrv-hi3516ev200/files/lib + make -B CC=$GCC DRV=$DRV TOOLCHAIN=$PWD/toolchain/$CC OUTPUT=$OUT $1 +elif [ "$1" = "star6b0" ]; then + DRV=$PWD/firmware/general/package/sigmastar-osdrv-infinity6b0/files/lib + make -B CC=$GCC DRV=$DRV TOOLCHAIN=$PWD/toolchain/$CC OUTPUT=$OUT $1 +elif [ "$1" = "star6e" ]; then + DRV=$PWD/firmware/general/package/sigmastar-osdrv-infinity6e/files/lib + make -B CC=$GCC DRV=$DRV TOOLCHAIN=$PWD/toolchain/$CC OUTPUT=$OUT $1 +fi From 157dca9ae0819df53aaaf3afb5bf5b5563d878a8 Mon Sep 17 00:00:00 2001 From: Daniel Li Date: Wed, 5 Feb 2025 15:53:55 +0800 Subject: [PATCH 2/5] modify build scripts and add extra targets --- Makefile | 35 ++++++++++++++++++++++++--------- build.sh | 60 +++++++++++++++++++++++++++++++++----------------------- 2 files changed, 61 insertions(+), 34 deletions(-) mode change 100755 => 100644 Makefile diff --git a/Makefile b/Makefile old mode 100755 new mode 100644 index 2ad56a0..c62a27e --- a/Makefile +++ b/Makefile @@ -12,42 +12,59 @@ SRCS_P := $(TARGET_P).c SRCS_Q := $(TARGET_Q).c OUTPUT ?= $(PWD) -BUILD_N = $(CC) $(SRCS_N) -I $(SDK)/include -I$(TOOLCHAIN)/usr/include -L$(DRV) $(CFLAGS) $(LIB) -levent_core -Os -s -o $(OUTPUT)/$(TARGET_N) -BUILD_P = $(CC) $(SRCS_P) -I $(SDK)/include -I$(TOOLCHAIN)/usr/include -L$(DRV) $(CFLAGS) $(LIB) -levent_core -Os -s -o $(OUTPUT)/$(TARGET_P) -BUILD_Q = $(CC) $(SRCS_Q) -I $(SDK)/include -I$(TOOLCHAIN)/usr/include -L$(DRV) $(CFLAGS) $(LIB) -levent_core -Os -s -o $(OUTPUT)/$(TARGET_Q) +BUILD_N = $(CC) $(SRCS_N) -I$(TOOLCHAIN)/usr/include -L$(DRV) $(CFLAGS) $(LIB) -levent_core -Os -s -o $(OUTPUT)/$(TARGET_N) +BUILD_P = $(CC) $(SRCS_P) -I$(TOOLCHAIN)/usr/include -L$(DRV) $(CFLAGS) $(LIB) -levent_core -Os -s -o $(OUTPUT)/$(TARGET_P) +BUILD_Q = $(CC) $(SRCS_Q) -I$(TOOLCHAIN)/usr/include -L$(DRV) $(CFLAGS) $(LIB) -levent_core -Os -s -o $(OUTPUT)/$(TARGET_Q) clean: rm -f *.o $(TARGET_N) $(TARGET_P) $(TARGET_Q) goke: - $(eval SDK = ./sdk/gk7205v300) $(eval CFLAGS += -D__GOKE__) - $(eval LIB = -shared -ldl -ldnvqe -lgk_api -lhi_mpi -lsecurec -lupvqe -lvoice_engine -ldnvqe) + $(eval LIB = -ldl -ldnvqe -lgk_api -lhi_mpi -lsecurec -lupvqe -lvoice_engine -ldnvqe) $(BUILD_N) $(BUILD_P) $(BUILD_Q) hisi: - $(eval SDK = ./sdk/hi3516ev300) $(eval CFLAGS += -D__GOKE__) - $(eval LIB = -shared -ldnvqe -lmpi -lsecurec -lupvqe -lVoiceEngine) + $(eval LIB = -ldnvqe -lmpi -lsecurec -lupvqe -lVoiceEngine) + $(BUILD_N) + $(BUILD_P) + $(BUILD_Q) + +hi3536: + $(eval CFLAGS += -D__GOKE__ -D__HI3536__) + $(eval LIB = -lm -ldnvqe -lmpi -ljpeg -lupvqe -lVoiceEngine) $(BUILD_N) $(BUILD_P) $(BUILD_Q) star6b0: - $(eval SDK = ./sdk/infinity6) $(eval CFLAGS += -D__SIGMASTAR__ -D__INFINITY6__ -D__INFINITY6B0__) $(eval LIB = -lcam_os_wrapper -lm -lmi_rgn -lmi_sys) $(BUILD_N) $(BUILD_P) $(BUILD_Q) +star6c: + $(eval CFLAGS += -D__SIGMASTAR__ -D__INFINITY6__ -D__INFINITY6C__) + $(eval LIB = -lcam_os_wrapper -lmi_rgn -lmi_sys) + $(BUILD_N) + $(BUILD_P) + $(BUILD_Q) + star6e: - $(eval SDK = ./sdk/infinity6) $(eval CFLAGS += -D__SIGMASTAR__ -D__INFINITY6__ -D__INFINITY6E__) $(eval LIB = -lcam_os_wrapper -lm -lmi_rgn -lmi_sys -lmi_venc) $(BUILD_N) $(BUILD_P) $(BUILD_Q) +native: + $(eval CFLAGS += -D_x86) + $(eval LIB = -lcsfml-graphics -lcsfml-window -lcsfml-system `pkg-config --libs cairo x11` -lm) + $(eval BUILD = $(CC) $(SRCS) -L $(DRV) $(CFLAGS) $(LIB) -levent_core -O0 -g -o $(OUTPUT)) + $(BUILD_N) + $(BUILD_P) + $(BUILD_Q) \ No newline at end of file diff --git a/build.sh b/build.sh index d2d65fb..5a9e9c9 100755 --- a/build.sh +++ b/build.sh @@ -1,32 +1,33 @@ #!/bin/bash -DL="https://github.com/openipc/firmware/releases/download/latest" +DL="https://github.com/OpenIPC/firmware/releases/download/toolchain/toolchain" + +if [ "$#" -ne 1 ]; then + echo "Usage: $0 [goke|hisi|hi3536|star6b0|star6e|star6c|native]" + exit 1 +fi if [[ "$1" == *"star6b0" ]]; then - CC=cortex_a7_thumb2_hf-gcc13-musl-4_9 - GCC=$PWD/toolchain/$CC/bin/arm-linux-gcc + CC=sigmastar-infinity6b0 elif [[ "$1" == *"star6e" ]]; then - CC=cortex_a7_thumb2_hf-gcc13-glibc-4_9 - GCC=$PWD/toolchain/$CC/bin/arm-linux-gcc + CC=sigmastar-infinity6e +elif [[ "$1" == *"star6c" ]]; then + CC=sigmastar-infinity6c elif [[ "$1" == *"goke" ]]; then - CC=cortex_a7_thumb2-gcc13-musl-4_9 - GCC=$PWD/toolchain/$CC/bin/arm-linux-gcc + CC=goke-gk7205v200 elif [[ "$1" == *"hisi" ]]; then - CC=cortex_a7_thumb2-gcc13-musl-4_9 - GCC=$PWD/toolchain/$CC/bin/arm-linux-gcc -else - echo "Usage: $0 [goke|hisi|star6b0|star6e|]" - exit 1 + CC=hisilicon-hi3516ev200 +elif [[ "$1" == *"hi3536" ]]; then + CC=hisilicon-hi3536dv100 fi -OUT=$PWD/release/$1 - -mkdir -p $OUT - -if [ ! -e toolchain/$CC ]; then - wget -c -q --show-progress $DL/$CC.tgz -P $PWD - mkdir -p toolchain/$CC - tar -xf $CC.tgz -C toolchain/$CC --strip-components=1 || exit 1 - rm -f $CC.tgz +if [[ "$1" != *"native"* ]]; then + if [ ! -e toolchain/$CC ]; then + wget -c -q --show-progress $DL.$CC.tgz -P $PWD + mkdir -p toolchain/$CC + tar -xf toolchain.$CC.tgz -C toolchain/$CC --strip-components=1 || exit 1 + rm -f $CC.tgz + fi + OUT=msposd_$1 fi if [ ! -e firmware ]; then @@ -35,14 +36,23 @@ fi if [ "$1" = "goke" ]; then DRV=$PWD/firmware/general/package/goke-osdrv-gk7205v200/files/lib - make -B CC=$GCC DRV=$DRV TOOLCHAIN=$PWD/toolchain/$CC OUTPUT=$OUT $1 + make -B CC=$GCC DRV=$DRV TOOLCHAIN=$PWD/toolchain/$CC $1 elif [ "$1" = "hisi" ]; then DRV=$PWD/firmware/general/package/hisilicon-osdrv-hi3516ev200/files/lib - make -B CC=$GCC DRV=$DRV TOOLCHAIN=$PWD/toolchain/$CC OUTPUT=$OUT $1 + make -B CC=$GCC DRV=$DRV TOOLCHAIN=$PWD/toolchain/$CC $1 +elif [ "$1" = "hi3536" ]; then + DRV=$PWD/firmware/general/package/hisilicon-osdrv-hi3536dv100/files/lib + make -B CC=$GCC DRV=$DRV TOOLCHAIN=$PWD/toolchain/$CC $1 elif [ "$1" = "star6b0" ]; then DRV=$PWD/firmware/general/package/sigmastar-osdrv-infinity6b0/files/lib - make -B CC=$GCC DRV=$DRV TOOLCHAIN=$PWD/toolchain/$CC OUTPUT=$OUT $1 + make -B CC=$GCC DRV=$DRV TOOLCHAIN=$PWD/toolchain/$CC $1 elif [ "$1" = "star6e" ]; then DRV=$PWD/firmware/general/package/sigmastar-osdrv-infinity6e/files/lib - make -B CC=$GCC DRV=$DRV TOOLCHAIN=$PWD/toolchain/$CC OUTPUT=$OUT $1 + make -B CC=$GCC DRV=$DRV TOOLCHAIN=$PWD/toolchain/$CC $1 +elif [ "$1" = "star6c" ]; then + DRV=$PWD/firmware/general/package/sigmastar-osdrv-infinity6c/files/lib + make -B CC=$GCC DRV=$DRV TOOLCHAIN=$PWD/toolchain/$CC $1 +else + DRV=$PWD + make DRV=$DRV $1 fi From a97587c52b6f0b85c09306121ffc750f25ed0f7d Mon Sep 17 00:00:00 2001 From: Daniel Li Date: Wed, 5 Feb 2025 15:55:09 +0800 Subject: [PATCH 3/5] remove binary files which should be in released package --- ALink42p | Bin 23792 -> 0 bytes ALink42q | Bin 24024 -> 0 bytes 2 files changed, 0 insertions(+), 0 deletions(-) delete mode 100644 ALink42p delete mode 100644 ALink42q diff --git a/ALink42p b/ALink42p deleted file mode 100644 index 72324363f2903ea613464efeb6220f8c77f88843..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 23792 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 diff --git a/ALink42q b/ALink42q deleted file mode 100644 index a7db3355cc5244eb2ca53358a9509c5158a8a412..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 24024 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

NUVk_Nospos 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 From 0b5389cc681fa9088bcfb1c138ed3b177a3f56ca Mon Sep 17 00:00:00 2001 From: Daniel Li Date: Wed, 5 Feb 2025 17:19:25 +0800 Subject: [PATCH 4/5] fix and build test for goke|hi3516|star6b0|star6e|star6c targets --- Makefile | 30 ++++++++++++------------------ build.sh | 21 +++++++++------------ 2 files changed, 21 insertions(+), 30 deletions(-) diff --git a/Makefile b/Makefile index c62a27e..e22f935 100644 --- a/Makefile +++ b/Makefile @@ -3,9 +3,9 @@ VERSION_STRING := $(shell date +"%Y%m%d_%H%M%S") CFLAGS ?= CFLAGS += -Wno-address-of-packed-member -DVERSION_STRING="\"$(VERSION_STRING)\"" -TARGET_N :="ALink42n" -TARGET_P :="ALink42p" -TARGET_Q :="ALink42q" +TARGET_N :=ALink42n +TARGET_P :=ALink42p +TARGET_Q :=ALink42q SRCS_N := $(TARGET_N).c SRCS_P := $(TARGET_P).c @@ -21,50 +21,44 @@ clean: goke: $(eval CFLAGS += -D__GOKE__) - $(eval LIB = -ldl -ldnvqe -lgk_api -lhi_mpi -lsecurec -lupvqe -lvoice_engine -ldnvqe) + $(eval LIB = -lm) $(BUILD_N) $(BUILD_P) $(BUILD_Q) -hisi: - $(eval CFLAGS += -D__GOKE__) - $(eval LIB = -ldnvqe -lmpi -lsecurec -lupvqe -lVoiceEngine) - $(BUILD_N) - $(BUILD_P) - $(BUILD_Q) -hi3536: - $(eval CFLAGS += -D__GOKE__ -D__HI3536__) - $(eval LIB = -lm -ldnvqe -lmpi -ljpeg -lupvqe -lVoiceEngine) +hi3516: + $(eval CFLAGS += -D__HI3516__) + $(eval LIB = -lm) $(BUILD_N) $(BUILD_P) $(BUILD_Q) star6b0: $(eval CFLAGS += -D__SIGMASTAR__ -D__INFINITY6__ -D__INFINITY6B0__) - $(eval LIB = -lcam_os_wrapper -lm -lmi_rgn -lmi_sys) + $(eval LIB = -lm) $(BUILD_N) $(BUILD_P) $(BUILD_Q) star6c: $(eval CFLAGS += -D__SIGMASTAR__ -D__INFINITY6__ -D__INFINITY6C__) - $(eval LIB = -lcam_os_wrapper -lmi_rgn -lmi_sys) + $(eval LIB = -lm) $(BUILD_N) $(BUILD_P) $(BUILD_Q) star6e: $(eval CFLAGS += -D__SIGMASTAR__ -D__INFINITY6__ -D__INFINITY6E__) - $(eval LIB = -lcam_os_wrapper -lm -lmi_rgn -lmi_sys -lmi_venc) + $(eval LIB = -lm) $(BUILD_N) $(BUILD_P) $(BUILD_Q) native: $(eval CFLAGS += -D_x86) - $(eval LIB = -lcsfml-graphics -lcsfml-window -lcsfml-system `pkg-config --libs cairo x11` -lm) + $(eval LIB = -lm) $(eval BUILD = $(CC) $(SRCS) -L $(DRV) $(CFLAGS) $(LIB) -levent_core -O0 -g -o $(OUTPUT)) $(BUILD_N) $(BUILD_P) - $(BUILD_Q) \ No newline at end of file + $(BUILD_Q) diff --git a/build.sh b/build.sh index 5a9e9c9..c16ff7e 100755 --- a/build.sh +++ b/build.sh @@ -2,22 +2,20 @@ DL="https://github.com/OpenIPC/firmware/releases/download/toolchain/toolchain" if [ "$#" -ne 1 ]; then - echo "Usage: $0 [goke|hisi|hi3536|star6b0|star6e|star6c|native]" + echo "Usage: $0 [goke|hi3516|star6b0|star6e|star6c|native]" exit 1 fi -if [[ "$1" == *"star6b0" ]]; then +if [[ "$1" == *"goke" ]]; then + CC=goke-gk7205v200 +elif [[ "$1" == *"hi3516" ]]; then + CC=hisilicon-hi3516ev200 +elif [[ "$1" == *"star6b0" ]]; then CC=sigmastar-infinity6b0 elif [[ "$1" == *"star6e" ]]; then CC=sigmastar-infinity6e elif [[ "$1" == *"star6c" ]]; then CC=sigmastar-infinity6c -elif [[ "$1" == *"goke" ]]; then - CC=goke-gk7205v200 -elif [[ "$1" == *"hisi" ]]; then - CC=hisilicon-hi3516ev200 -elif [[ "$1" == *"hi3536" ]]; then - CC=hisilicon-hi3536dv100 fi if [[ "$1" != *"native"* ]]; then @@ -34,15 +32,14 @@ if [ ! -e firmware ]; then git clone https://github.com/openipc/firmware --depth=1 fi +GCC=$PWD/toolchain/$CC/bin/arm-linux-gcc + if [ "$1" = "goke" ]; then DRV=$PWD/firmware/general/package/goke-osdrv-gk7205v200/files/lib make -B CC=$GCC DRV=$DRV TOOLCHAIN=$PWD/toolchain/$CC $1 -elif [ "$1" = "hisi" ]; then +elif [ "$1" = "hi3516" ]; then DRV=$PWD/firmware/general/package/hisilicon-osdrv-hi3516ev200/files/lib make -B CC=$GCC DRV=$DRV TOOLCHAIN=$PWD/toolchain/$CC $1 -elif [ "$1" = "hi3536" ]; then - DRV=$PWD/firmware/general/package/hisilicon-osdrv-hi3536dv100/files/lib - make -B CC=$GCC DRV=$DRV TOOLCHAIN=$PWD/toolchain/$CC $1 elif [ "$1" = "star6b0" ]; then DRV=$PWD/firmware/general/package/sigmastar-osdrv-infinity6b0/files/lib make -B CC=$GCC DRV=$DRV TOOLCHAIN=$PWD/toolchain/$CC $1 From c35e8ccbd3a00dacf7ee1a188af7f43c60b6cd63 Mon Sep 17 00:00:00 2001 From: Daniel Li Date: Wed, 5 Feb 2025 17:43:28 +0800 Subject: [PATCH 5/5] fix target selection according to #7 --- Makefile | 42 ++++++++++++------------------------------ alink_drone | Bin 34380 -> 0 bytes 2 files changed, 12 insertions(+), 30 deletions(-) delete mode 100644 alink_drone diff --git a/Makefile b/Makefile index e22f935..8cbaa83 100644 --- a/Makefile +++ b/Makefile @@ -3,62 +3,44 @@ VERSION_STRING := $(shell date +"%Y%m%d_%H%M%S") CFLAGS ?= CFLAGS += -Wno-address-of-packed-member -DVERSION_STRING="\"$(VERSION_STRING)\"" -TARGET_N :=ALink42n -TARGET_P :=ALink42p -TARGET_Q :=ALink42q - -SRCS_N := $(TARGET_N).c -SRCS_P := $(TARGET_P).c -SRCS_Q := $(TARGET_Q).c +TARGET_DRONE :=alink_drone +SRCS_DRONE := $(TARGET_DRONE).c OUTPUT ?= $(PWD) -BUILD_N = $(CC) $(SRCS_N) -I$(TOOLCHAIN)/usr/include -L$(DRV) $(CFLAGS) $(LIB) -levent_core -Os -s -o $(OUTPUT)/$(TARGET_N) -BUILD_P = $(CC) $(SRCS_P) -I$(TOOLCHAIN)/usr/include -L$(DRV) $(CFLAGS) $(LIB) -levent_core -Os -s -o $(OUTPUT)/$(TARGET_P) -BUILD_Q = $(CC) $(SRCS_Q) -I$(TOOLCHAIN)/usr/include -L$(DRV) $(CFLAGS) $(LIB) -levent_core -Os -s -o $(OUTPUT)/$(TARGET_Q) +BUILD_DRONE = $(CC) $(SRCS_DRONE) -I$(TOOLCHAIN)/usr/include -L$(DRV) $(CFLAGS) $(LIB) -levent_core -Os -s -o $(OUTPUT)/$(TARGET_DRONE) + clean: - rm -f *.o $(TARGET_N) $(TARGET_P) $(TARGET_Q) + rm -f *.o $(TARGET_DRONE) goke: $(eval CFLAGS += -D__GOKE__) $(eval LIB = -lm) - $(BUILD_N) - $(BUILD_P) - $(BUILD_Q) - + $(BUILD_DRONE) hi3516: $(eval CFLAGS += -D__HI3516__) $(eval LIB = -lm) - $(BUILD_N) - $(BUILD_P) - $(BUILD_Q) + $(BUILD_DRONE) star6b0: $(eval CFLAGS += -D__SIGMASTAR__ -D__INFINITY6__ -D__INFINITY6B0__) $(eval LIB = -lm) - $(BUILD_N) - $(BUILD_P) - $(BUILD_Q) + $(BUILD_DRONE) star6c: $(eval CFLAGS += -D__SIGMASTAR__ -D__INFINITY6__ -D__INFINITY6C__) $(eval LIB = -lm) - $(BUILD_N) - $(BUILD_P) - $(BUILD_Q) + $(BUILD_DRONE) star6e: $(eval CFLAGS += -D__SIGMASTAR__ -D__INFINITY6__ -D__INFINITY6E__) $(eval LIB = -lm) - $(BUILD_N) - $(BUILD_P) - $(BUILD_Q) + $(BUILD_DRONE) native: $(eval CFLAGS += -D_x86) $(eval LIB = -lm) $(eval BUILD = $(CC) $(SRCS) -L $(DRV) $(CFLAGS) $(LIB) -levent_core -O0 -g -o $(OUTPUT)) - $(BUILD_N) - $(BUILD_P) - $(BUILD_Q) + $(BUILD_DRONE) + diff --git a/alink_drone b/alink_drone deleted file mode 100644 index 96b1f16b391c6678afe9bfa817c31fec85e35273..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 34380 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