-
Notifications
You must be signed in to change notification settings - Fork 620
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
build-sys: fix cross-compilation failure caused by building/executing…
… packcc there exists a ready-to-use macro called `AX_PROG_CXX_FOR_BUILD` which is provided by `ax_prog_cc_for_build.m4` and is widely used for supporting cross-compilation. this macro defined `CC_FOR_BUILD`, `CFLAGS_FOR_BUILD`, `CPPFLAGS_FOR_BUILD`, `LDFLAGS_FOR_BUILD`, `BUILD_EXEEXT` variables. user can set `CC_FOR_BUILD`、`CFLAGS_FOR_BUILD`、`CPPFLAGS_FOR_BUILD`、`LDFLAGS_FOR_BUILD` when cross-compiling. when native-compiling, `FOO_FOR_BUILD` is same as `FOO`. here is a example show you how to use these variables: configure \ --host=armv7a-linux-androideabi \ --prefix=`pwd`/out \ --enable-static \ --disable-seccomp \ CC=/usr/local/opt/android-sdk/ndk-bundle/toolchains/llvm/prebuilt/darwin-x86_64/bin/armv7a-linux-androideabi21-clang \ CFLAGS='-v' \ CPP='/usr/local/opt/android-sdk/ndk-bundle/toolchains/llvm/prebuilt/darwin-x86_64/bin/armv7a-linux-androideabi21-clang -E' \ CPPFLAGS='-I/Users/leleliu008/.ndk-pkg/pkg/jansson/armeabi-v7a/include -I/Users/leleliu008/.ndk-pkg/pkg/libyaml/armeabi-v7a/include -I/Users/leleliu008/.ndk-pkg/pkg/libxml2/armeabi-v7a/include -I/Users/leleliu008/.ndk-pkg/pkg/libiconv/armeabi-v7a/include --sysroot /usr/local/opt/android-sdk/ndk-bundle/toolchains/llvm/prebuilt/darwin-x86_64/sysroot -Qunused-arguments -Dftello=ftell -Dfseeko=fseek' \ LDFLAGS='-L/Users/leleliu008/.ndk-pkg/pkg/jansson/armeabi-v7a/lib -L/Users/leleliu008/.ndk-pkg/pkg/libyaml/armeabi-v7a/lib -L/Users/leleliu008/.ndk-pkg/pkg/libxml2/armeabi-v7a/lib -L/Users/leleliu008/.ndk-pkg/pkg/libiconv/armeabi-v7a/lib --sysroot /usr/local/opt/android-sdk/ndk-bundle/toolchains/llvm/prebuilt/darwin-x86_64/sysroot' \ AR=/usr/local/opt/android-sdk/ndk-bundle/toolchains/llvm/prebuilt/darwin-x86_64/bin/arm-linux-androideabi-ar \ RANLIB=/usr/local/opt/android-sdk/ndk-bundle/toolchains/llvm/prebuilt/darwin-x86_64/bin/arm-linux-androideabi-ranlib \ CC_FOR_BUILD=/usr/bin/cc \ CFLAGS_FOR_BUILD='-v' \ PKG_CONFIG_PATH=/Users/leleliu008/.ndk-pkg/pkg/libiconv/armeabi-v7a/lib/pkgconfig:/Users/leleliu008/.ndk-pkg/pkg/libxml2/armeabi-v7a/lib/pkgconfig:/Users/leleliu008/.ndk-pkg/pkg/libyaml/armeabi-v7a/lib/pkgconfig:/Users/leleliu008/.ndk-pkg/pkg/jansson/armeabi-v7a/lib/pkgconfig \ PKG_CONFIG_LIBDIR=/Users/leleliu008/.ndk-pkg/pkg ax_prog_cc_for_build.m4 has been downloaded from `http://git.savannah.gnu.org/gitweb/?p=autoconf-archive.git;a=blob_plain;f=m4/ax_prog_cc_for_build.m4` and placed in m4 directory. to use aclocal from Automake to generate aclocal.m4, we must also set `ACLOCAL_AMFLAGS = -I m4` in top-level Makefile.am. build packcc don't follow `The Uniform Naming Scheme`. because automake auto append `$(EXEEXT)` to `*_PROGRAMS` when generating the Makefile, but here we want to use `$(BUILD_EXEEXT)`. as we don't use `The Uniform Naming Scheme`, we must clean `packcc` and `packcc.exe` by myself. References: *https://www.gnu.org/software/autoconf-archive/ax_prog_cc_for_build.html *https://www.gnu.org/software/autoconf/manual/autoconf-2.69/html_node/Input.html *https://www.gnu.org/software/automake/manual/html_node/Uniform.html
- Loading branch information
leleliu008
committed
Dec 5, 2020
1 parent
e52cf4a
commit 1daaf2b
Showing
3 changed files
with
185 additions
and
11 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,139 @@ | ||
# =========================================================================== | ||
# https://www.gnu.org/software/autoconf-archive/ax_prog_cc_for_build.html | ||
# =========================================================================== | ||
# | ||
# SYNOPSIS | ||
# | ||
# AX_PROG_CC_FOR_BUILD | ||
# | ||
# DESCRIPTION | ||
# | ||
# This macro searches for a C compiler that generates native executables, | ||
# that is a C compiler that surely is not a cross-compiler. This can be | ||
# useful if you have to generate source code at compile-time like for | ||
# example GCC does. | ||
# | ||
# The macro sets the CC_FOR_BUILD and CPP_FOR_BUILD macros to anything | ||
# needed to compile or link (CC_FOR_BUILD) and preprocess (CPP_FOR_BUILD). | ||
# The value of these variables can be overridden by the user by specifying | ||
# a compiler with an environment variable (like you do for standard CC). | ||
# | ||
# It also sets BUILD_EXEEXT and BUILD_OBJEXT to the executable and object | ||
# file extensions for the build platform, and GCC_FOR_BUILD to `yes' if | ||
# the compiler we found is GCC. All these variables but GCC_FOR_BUILD are | ||
# substituted in the Makefile. | ||
# | ||
# LICENSE | ||
# | ||
# Copyright (c) 2008 Paolo Bonzini <bonzini@gnu.org> | ||
# | ||
# Copying and distribution of this file, with or without modification, are | ||
# permitted in any medium without royalty provided the copyright notice | ||
# and this notice are preserved. This file is offered as-is, without any | ||
# warranty. | ||
|
||
#serial 18 | ||
|
||
AU_ALIAS([AC_PROG_CC_FOR_BUILD], [AX_PROG_CC_FOR_BUILD]) | ||
AC_DEFUN([AX_PROG_CC_FOR_BUILD], [dnl | ||
AC_REQUIRE([AC_PROG_CC])dnl | ||
AC_REQUIRE([AC_PROG_CPP])dnl | ||
AC_REQUIRE([AC_CANONICAL_BUILD])dnl | ||
dnl Use the standard macros, but make them use other variable names | ||
dnl | ||
pushdef([ac_cv_prog_CPP], ac_cv_build_prog_CPP)dnl | ||
pushdef([ac_cv_prog_cc_c89], ac_cv_build_prog_cc_c89)dnl | ||
pushdef([ac_cv_prog_gcc], ac_cv_build_prog_gcc)dnl | ||
pushdef([ac_cv_prog_cc_works], ac_cv_build_prog_cc_works)dnl | ||
pushdef([ac_cv_prog_cc_cross], ac_cv_build_prog_cc_cross)dnl | ||
pushdef([ac_cv_prog_cc_g], ac_cv_build_prog_cc_g)dnl | ||
pushdef([ac_cv_c_compiler_gnu], ac_cv_build_c_compiler_gnu)dnl | ||
pushdef([ac_cv_exeext], ac_cv_build_exeext)dnl | ||
pushdef([ac_cv_objext], ac_cv_build_objext)dnl | ||
pushdef([ac_exeext], ac_build_exeext)dnl | ||
pushdef([ac_objext], ac_build_objext)dnl | ||
pushdef([CC], CC_FOR_BUILD)dnl | ||
pushdef([CPP], CPP_FOR_BUILD)dnl | ||
pushdef([GCC], GCC_FOR_BUILD)dnl | ||
pushdef([CFLAGS], CFLAGS_FOR_BUILD)dnl | ||
pushdef([CPPFLAGS], CPPFLAGS_FOR_BUILD)dnl | ||
pushdef([EXEEXT], BUILD_EXEEXT)dnl | ||
pushdef([LDFLAGS], LDFLAGS_FOR_BUILD)dnl | ||
pushdef([OBJEXT], BUILD_OBJEXT)dnl | ||
pushdef([host], build)dnl | ||
pushdef([host_alias], build_alias)dnl | ||
pushdef([host_cpu], build_cpu)dnl | ||
pushdef([host_vendor], build_vendor)dnl | ||
pushdef([host_os], build_os)dnl | ||
pushdef([ac_cv_host], ac_cv_build)dnl | ||
pushdef([ac_cv_host_alias], ac_cv_build_alias)dnl | ||
pushdef([ac_cv_host_cpu], ac_cv_build_cpu)dnl | ||
pushdef([ac_cv_host_vendor], ac_cv_build_vendor)dnl | ||
pushdef([ac_cv_host_os], ac_cv_build_os)dnl | ||
pushdef([ac_tool_prefix], ac_build_tool_prefix)dnl | ||
pushdef([am_cv_CC_dependencies_compiler_type], am_cv_build_CC_dependencies_compiler_type)dnl | ||
pushdef([am_cv_prog_cc_c_o], am_cv_build_prog_cc_c_o)dnl | ||
pushdef([cross_compiling], cross_compiling_build)dnl | ||
cross_compiling_build=no | ||
ac_build_tool_prefix= | ||
AS_IF([test -n "$build"], [ac_build_tool_prefix="$build-"], | ||
[test -n "$build_alias"],[ac_build_tool_prefix="$build_alias-"]) | ||
AC_LANG_PUSH([C]) | ||
AC_PROG_CC | ||
_AC_COMPILER_EXEEXT | ||
_AC_COMPILER_OBJEXT | ||
AC_PROG_CPP | ||
dnl Restore the old definitions | ||
dnl | ||
popdef([cross_compiling])dnl | ||
popdef([am_cv_prog_cc_c_o])dnl | ||
popdef([am_cv_CC_dependencies_compiler_type])dnl | ||
popdef([ac_tool_prefix])dnl | ||
popdef([ac_cv_host_os])dnl | ||
popdef([ac_cv_host_vendor])dnl | ||
popdef([ac_cv_host_cpu])dnl | ||
popdef([ac_cv_host_alias])dnl | ||
popdef([ac_cv_host])dnl | ||
popdef([host_os])dnl | ||
popdef([host_vendor])dnl | ||
popdef([host_cpu])dnl | ||
popdef([host_alias])dnl | ||
popdef([host])dnl | ||
popdef([OBJEXT])dnl | ||
popdef([LDFLAGS])dnl | ||
popdef([EXEEXT])dnl | ||
popdef([CPPFLAGS])dnl | ||
popdef([CFLAGS])dnl | ||
popdef([GCC])dnl | ||
popdef([CPP])dnl | ||
popdef([CC])dnl | ||
popdef([ac_objext])dnl | ||
popdef([ac_exeext])dnl | ||
popdef([ac_cv_objext])dnl | ||
popdef([ac_cv_exeext])dnl | ||
popdef([ac_cv_c_compiler_gnu])dnl | ||
popdef([ac_cv_prog_cc_g])dnl | ||
popdef([ac_cv_prog_cc_cross])dnl | ||
popdef([ac_cv_prog_cc_works])dnl | ||
popdef([ac_cv_prog_cc_c89])dnl | ||
popdef([ac_cv_prog_gcc])dnl | ||
popdef([ac_cv_prog_CPP])dnl | ||
dnl restore global variables ac_ext, ac_cpp, ac_compile, | ||
dnl ac_link, ac_compiler_gnu (dependant on the current | ||
dnl language after popping): | ||
AC_LANG_POP([C]) | ||
dnl Finally, set Makefile variables | ||
dnl | ||
AC_SUBST(BUILD_EXEEXT)dnl | ||
AC_SUBST(BUILD_OBJEXT)dnl | ||
AC_SUBST([CFLAGS_FOR_BUILD])dnl | ||
AC_SUBST([CPPFLAGS_FOR_BUILD])dnl | ||
AC_SUBST([LDFLAGS_FOR_BUILD])dnl | ||
]) |