From: Martin Storsjo Date: Sat, 18 May 2013 20:32:49 +0000 (+0300) Subject: Add support for armv7-win32-vs11 X-Git-Tag: v1.3.0~1117 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=ad484fc6be3b11448c67787786e1fd2f22ee18eb;p=libvpx Add support for armv7-win32-vs11 The arm assembly files are named .s after conversion, to reuse as much of the existing makefile infrastructure for conversion to gas format as possible. Within the generated visual studio project, only the converted assembly sources are available, which might not be optimal for actually developing it, but is acceptable for just building the library. Multithreading is disabled since the traditional win32 threading functions aren't available on WinRT/Windows Phone 8. Building of vpx itself and the examples succeed, while building the tests fail due to them using functions not available in the windows store/windows phone API subsets - therefore the unit tests are disabled. This works for building in Visual Studio Express 2012 for Windows Phone, while Visual Studio Express 2012 for Windows 8 (for "Windows Store" apps) seems to reject the vcxproj files due to not supporting "classic style native application or managed projects". The built static library should be compatible with that platform though. Change-Id: Idcd7eca60bfaaaeb09392a9cd7a02e4a670e3b30 --- diff --git a/build/arm-msvs/obj_int_extract.bat b/build/arm-msvs/obj_int_extract.bat new file mode 100644 index 000000000..147342d3d --- /dev/null +++ b/build/arm-msvs/obj_int_extract.bat @@ -0,0 +1,25 @@ +REM Copyright (c) 2013 The WebM project authors. All Rights Reserved. +REM +REM Use of this source code is governed by a BSD-style license +REM that can be found in the LICENSE file in the root of the source +REM tree. An additional intellectual property rights grant can be found +REM in the file PATENTS. All contributing project authors may +REM be found in the AUTHORS file in the root of the source tree. +echo on + +cl /I "./" /I "%1" /nologo /c /DWINAPI_FAMILY=WINAPI_FAMILY_PHONE_APP "%1/vp9/common/vp9_asm_com_offsets.c" +cl /I "./" /I "%1" /nologo /c /DWINAPI_FAMILY=WINAPI_FAMILY_PHONE_APP "%1/vp9/decoder/vp9_asm_dec_offsets.c" +cl /I "./" /I "%1" /nologo /c /DWINAPI_FAMILY=WINAPI_FAMILY_PHONE_APP "%1/vp9/encoder/vp9_asm_enc_offsets.c" +obj_int_extract.exe rvds "vp9_asm_com_offsets.obj" > "vp9_asm_com_offsets.asm" +obj_int_extract.exe rvds "vp9_asm_dec_offsets.obj" > "vp9_asm_dec_offsets.asm" +obj_int_extract.exe rvds "vp9_asm_enc_offsets.obj" > "vp9_asm_enc_offsets.asm" + +cl /I "./" /I "%1" /nologo /c /DWINAPI_FAMILY=WINAPI_FAMILY_PHONE_APP "%1/vp8/common/vp8_asm_com_offsets.c" +cl /I "./" /I "%1" /nologo /c /DWINAPI_FAMILY=WINAPI_FAMILY_PHONE_APP "%1/vp8/decoder/vp8_asm_dec_offsets.c" +cl /I "./" /I "%1" /nologo /c /DWINAPI_FAMILY=WINAPI_FAMILY_PHONE_APP "%1/vp8/encoder/vp8_asm_enc_offsets.c" +obj_int_extract.exe rvds "vp8_asm_com_offsets.obj" > "vp8_asm_com_offsets.asm" +obj_int_extract.exe rvds "vp8_asm_dec_offsets.obj" > "vp8_asm_dec_offsets.asm" +obj_int_extract.exe rvds "vp8_asm_enc_offsets.obj" > "vp8_asm_enc_offsets.asm" + +cl /I "./" /I "%1" /nologo /c /DWINAPI_FAMILY=WINAPI_FAMILY_PHONE_APP "%1/vpx_scale/vpx_scale_asm_offsets.c" +obj_int_extract.exe rvds "vpx_scale_asm_offsets.obj" > "vpx_scale_asm_offsets.asm" diff --git a/build/make/Makefile b/build/make/Makefile index 6c93c78d2..a369be8cd 100644 --- a/build/make/Makefile +++ b/build/make/Makefile @@ -376,6 +376,7 @@ ifneq ($(call enabled,DIST-SRCS),) DIST-SRCS-$(CONFIG_MSVS) += build/make/gen_msvs_sln.sh DIST-SRCS-$(CONFIG_MSVS) += build/x86-msvs/yasm.rules DIST-SRCS-$(CONFIG_MSVS) += build/x86-msvs/obj_int_extract.bat + DIST-SRCS-$(CONFIG_MSVS) += build/arm-msvs/obj_int_extract.bat DIST-SRCS-$(CONFIG_RVCT) += build/make/armlink_adapter.sh # Include obj_int_extract if we use offsets from *_asm_*_offsets DIST-SRCS-$(ARCH_ARM)$(ARCH_X86)$(ARCH_X86_64) += build/make/obj_int_extract.c diff --git a/build/make/configure.sh b/build/make/configure.sh index 5c38c8107..cb7d7fb11 100755 --- a/build/make/configure.sh +++ b/build/make/configure.sh @@ -417,6 +417,7 @@ BUILD_PFX=${BUILD_PFX} TOOLCHAIN=${toolchain} ASM_CONVERSION=${asm_conversion_cmd:-${source_path}/build/make/ads2gas.pl} GEN_VCPROJ=${gen_vcproj_cmd} +MSVS_ARCH_DIR=${msvs_arch_dir} CC=${CC} CXX=${CXX} @@ -828,6 +829,13 @@ EOF check_add_asflags -mthumb -mimplicit-it=always fi ;; + vs*) + asm_conversion_cmd="${source_path}/build/make/ads2armasm_ms.pl" + AS_SFX=.s + msvs_arch_dir=arm-msvs + disable multithread + disable unit_tests + ;; rvct) CC=armcc AR=armar @@ -1070,6 +1078,7 @@ EOF # invoked directly. Checking at configure time is unnecessary. # Skip the check by setting AS arbitrarily AS=msvs + msvs_arch_dir=x86-msvs ;; esac diff --git a/build/make/gen_msvs_vcxproj.sh b/build/make/gen_msvs_vcxproj.sh index 38ffa267c..487591525 100755 --- a/build/make/gen_msvs_vcxproj.sh +++ b/build/make/gen_msvs_vcxproj.sh @@ -155,7 +155,7 @@ generate_filter() { objf=$(echo ${f%.*}.obj | sed -e 's/^[\./]\+//g' -e 's,/,_,g') - if [ "$pat" == "asm" ] && $asm_use_custom_step; then + if ([ "$pat" == "asm" ] || [ "$pat" == "s" ]) && $asm_use_custom_step; then open_tag CustomBuild \ Include=".\\$f" for plat in "${platforms[@]}"; do @@ -258,7 +258,7 @@ for opt in "$@"; do *) file_list[${#file_list[@]}]="$opt" case "$opt" in - *.asm) uses_asm=true + *.asm|*.s) uses_asm=true ;; esac ;; @@ -312,6 +312,17 @@ case "$target" in asm_Debug_cmdline="yasm -Xvc -g cv8 -f \$(PlatformName) ${yasmincs} "%(FullPath)"" asm_Release_cmdline="yasm -Xvc -f \$(PlatformName) ${yasmincs} "%(FullPath)"" ;; + arm*) + asm_Debug_cmdline="armasm -nologo "%(FullPath)"" + asm_Release_cmdline="armasm -nologo "%(FullPath)"" + if [ "$name" = "obj_int_extract" ]; then + # We don't want to build this tool for the target architecture, + # but for an architecture we can run locally during the build. + platforms[0]="Win32" + else + platforms[0]="ARM" + fi + ;; *) die "Unsupported target $target!" ;; esac @@ -359,7 +370,18 @@ generate_vcxproj() { tag_content ConfigurationType StaticLibrary fi if [ "$vs_ver" = "11" ]; then - tag_content PlatformToolset v110 + if [ "$plat" = "ARM" ]; then + # Setting the wp80 toolchain automatically sets the + # WINAPI_FAMILY define, which is required for building + # code for arm with the windows headers. Alternatively, + # one could add AppContainerApplication=true in the Globals + # section and add PrecompiledHeader=NotUsing and + # CompileAsWinRT=false in ClCompile and SubSystem=Console + # in Link. + tag_content PlatformToolset v110_wp80 + else + tag_content PlatformToolset v110 + fi fi tag_content CharacterSet Unicode if [ "$config" = "Release" ]; then @@ -470,7 +492,7 @@ generate_vcxproj() { done open_tag ItemGroup - generate_filter "Source Files" "c;cc;def;odl;idl;hpj;bat;asm;asmx" + generate_filter "Source Files" "c;cc;def;odl;idl;hpj;bat;asm;asmx;s" close_tag ItemGroup open_tag ItemGroup generate_filter "Header Files" "h;hm;inl;inc;xsd" diff --git a/configure b/configure index eda16e634..3854ae9ea 100755 --- a/configure +++ b/configure @@ -98,6 +98,7 @@ all_platforms="${all_platforms} armv7-darwin-gcc" #neon Cortex-A8 all_platforms="${all_platforms} armv7-linux-rvct" #neon Cortex-A8 all_platforms="${all_platforms} armv7-linux-gcc" #neon Cortex-A8 all_platforms="${all_platforms} armv7-none-rvct" #neon Cortex-A8 +all_platforms="${all_platforms} armv7-win32-vs11" all_platforms="${all_platforms} mips32-linux-gcc" all_platforms="${all_platforms} ppc32-darwin8-gcc" all_platforms="${all_platforms} ppc32-darwin9-gcc" diff --git a/libs.mk b/libs.mk index 9c7dcdaaf..8428f899d 100644 --- a/libs.mk +++ b/libs.mk @@ -12,7 +12,7 @@ # ARM assembly files are written in RVCT-style. We use some make magic to # filter those files to allow GCC compilation ifeq ($(ARCH_ARM),yes) - ASM:=$(if $(filter yes,$(CONFIG_GCC)),.asm.s,.asm) + ASM:=$(if $(filter yes,$(CONFIG_GCC)$(CONFIG_MSVS)),.asm.s,.asm) else ASM:=.asm endif @@ -208,7 +208,7 @@ ifeq ($(CONFIG_EXTERNAL_BUILD),yes) ifeq ($(CONFIG_MSVS),yes) obj_int_extract.$(VCPROJ_SFX): $(SRC_PATH_BARE)/build/make/obj_int_extract.c - @cp $(SRC_PATH_BARE)/build/x86-msvs/obj_int_extract.bat . + @cp $(SRC_PATH_BARE)/build/$(MSVS_ARCH_DIR)/obj_int_extract.bat . @echo " [CREATE] $@" $(qexec)$(GEN_VCPROJ) \ --exe \