rules.mk: make toolchain dirs define more consistent Make toolchain dirs define more consistent between internal and external toolchains. Make use of specific dirs also for intenral toolchain and generilize include and lib inclusion. Also set TOOLCHAIN_ROOT_DIR for internal toolchain as this is what packages should use to reference staging toolchain directory. Signed-off-by: Christian Marangi <ansuelsmth@gmail.com>
prereq-build: increase GCC requirement to 8 The current minimum OS requirement for OpenWrt is Ubuntu 18.04, which includes 7 and 8. 8 is necessary for ccache. gcc and g+++ are now symlinked to staging_dir, similar to Python. Signed-off-by: Rosen Penev <rosenp@gmail.com>
build: replace SSTRIP_ARGS with SSTRIP_DISCARD_TRAILING_ZEROES sstrip only has one functional arg. Make that a bool option, which can easily depend on other knobs then. This is required to be disabled for the mold linker. Signed-off-by: Andre Heider <a.heider@gmail.com>
rules: prepare to use different linkers This explicitely adds the default linker to the target LDFLAGS. No functional change intended. Signed-off-by: Andre Heider <a.heider@gmail.com>
treewide: add ORIG_PATH variable Add a variable that stores the original value of $PATH in the host system's shell, before Make alters it. This can be useful for when it is necessary to ignore symlinks and programs made by the build system. Define this new variable before all instances of 'export PATH:=' or similar. Signed-off-by: Michael Pratt <mcpratt@pm.me>
tools: add gnulib source By having a local copy of gnulib, we can: import the latest macro fixes into any package, get rid of some statically stored macros that were otherwise missing, bootstrap GNU tools with the latest relevant source without having to wait for a release or rely on git submodules, and possibly more... The patch assists in bootstrapping by ignoring the building of po files using gettext, and also to allow a user-defined path to a program to include parameters. Signed-off-by: Michael Pratt <mcpratt@pm.me>
prereq-build: add check for true and false Some uses cases, like with autotools, need a path for 'true' if we use them to force something to skip. This will work by default on Linux hosts, and require MacOS hosts to get coreutils, which is currently installed in the CI for 'macos-latest' host. In the future, prereq stage can be reworked to search for the actual binary instead of relying on env. Signed-off-by: Michael Pratt <mcpratt@pm.me>
rules.mk: add FILECMD variable Some packages using Libtool have the possibility of using this environment variable if set, instead of the direct command for "file" using PATH, or the need to patch a hard-coded path. This is a new feature of Libtool 2.4.7 Ref: bf261073d ("tools/libtool: bump to 2.4.7") Signed-off-by: Michael Pratt <mcpratt@pm.me>
Remove ccache wrappers These wrappers are not needed as CC doesn't need to be a single word. a53b084e497a9f1629a2caada833ebe14a6838b7 which introduced the wrappers doesn't explain why they were really needed and why only for the target and not for the host. Moreover, name of the wrappers breaks a ccache assumption: since v4.0-3-g6a92b4cd3a67 it has special handling for "chained" invocation such as "ccache ccache gcc" where it skips all the "ccache*" names in the middle and proceeds to run as if it was started as "ccache gcc"[1][2]. This becomes important when a build system sees ccache in the PATH and automatically enables it by prepending to CC. An example of such a system would be autosetup as used by jimtcl. With the wrappers it breaks as the command line ends up being just "ccache -Os..." because "ccache_cc" gets skipped as it starts with "ccache". [1] https://github.com/ccache/ccache/blob/master/src/ccache.cpp#L2105 [2] https://github.com/ccache/ccache/blob/master/src/Util.cpp#L802 Reported-by: Karl Palsson <karlp@etactica.com> Signed-off-by: Paul Fertser <fercerpav@gmail.com>
treewide: derive host and hostpkg path from STAGING_DIR STAGING_DIR may be provided from command line. We currently hardcoded STAGING_DIR_HOST and STAGING_DIR_HOSTPKG to the default location but we currently have some relocatable patch that derive the path from STAGING_DIR. Fix this and correctly derive STAGING_DIR_HOST and STAGING_DIR_HOSTPKG from STAGING_DIR. The intention is to fix inconsistency from the relocatable patch and the use of STAGING_DIR_HOST that is always hardcoded. This with a wrong configuration may end up in broken state with some host tools expecing a PATH from STAGING_DIR and others using library from the default staging_dir/host path. To save downstream project the original implementation is saved while fixing the inconsistency between patch and .mk. Signed-off-by: Christian Marangi <ansuelsmth@gmail.com>
rules: drop -Wno-error additional flags from default TARGET_CFLAGS We currently enable -Wno-error=unused-but-set-variable and -Wno-error=unused-result by default on every compile package. While this is (relatively) unharmful, we should follow other project direction and starts enforcing good code quality. For example the linux kernel recently started to enforce Wall by default and clean code is mandatory for inclusion. Drop for good these flags and and make it mandatory to correctly handle return values at least with a warning log if they are not strictly error condition. Signed-off-by: Christian Marangi <ansuelsmth@gmail.com>
rules: fix broken commitcount on alpine system To generate commitcount we use grep --max-count. This is not present on alpine grep and cause wrong generation. Use -m as it's just the short version of --max-count and more portable. Fixes: #11200 Signed-off-by: Christian Marangi <ansuelsmth@gmail.com>
rules.mk: move DOWNLOAD_CHECK_CERTIFICATE to include/download.mk Move DOWNLOAD_CHECK_CERTIFICATE to include/download.mk as it's a better place than exporting it in the global rules.mk makefile. Signed-off-by: Christian Marangi <ansuelsmth@gmail.com>
rules.mk: add option to download files into a subdirectory Some packages download a single raw file or set of raw files instead of an archive. The filenames of these download files have names and version numbers that do not directly correspond to the name and version of the package as it is defined in its Makefile. To better organize downloaded files, this adds the option of creating a subdirectory in the download directory for these files that can be named with package specific variables. DL_DIR is now a recursively expanded variable since the value now depends on whether DL_SUBDIR is defined. Signed-off-by: Michael Pratt <mcpratt@pm.me>
scripts: always check certificates Remove flags from wget and curl instructing them to ignore bad server certificates. Although other mechanisms can protect against malicious modifications of downloads, other vectors of attack may be available to an adversary. TLS certificate verification can be disabled by turning oof the "Enable TLS certificate verification during package download" option enabled by default in the "Global build settings" in "make menuconfig" Signed-off-by: Josh Roys <roysjosh@gmail.com> [ add additional info on how to disable this option ] Signed-off-by: Christian Marangi <ansuelsmth@gmail.com>
rules_mk: don't include wrapped bin with external toolchains Don't add wrapped bin to the TARGET_PATH as it does cause compilation error. cmake.mk will use the "command -v" and will use the wrapped bin instead of the external toolchain bin as they have the same name and command will select the first result. Signed-off-by: Christian Marangi <ansuelsmth@gmail.com>
rules_mk: use gcc versions for external toolchain When using the OpenWrt toolchain as an external toolchain the build failed due to missing LTO support. By choosing the GCC wrappers of the tools this commit makes sure that the LTO-enabled executables are being used. Signed-off-by: Vincent Wiemann <vincent.wiemann@ironai.com> [ wrap the commit description to 72 char ] Signed-off-by: Christian Marangi <ansuelsmth@gmail.com>
kernel: filter -no-plt from KCFLAGS Compiler option -no-plt will break kernel builds on some architectures eg. (x86) Filter this option from the recently introduced handling of KCFLAGS vs EXTRA_OPTIMISATION Fixes: 1d42af720c6b ("kernel: use KCFLAGS for passing EXTRA_OPTIMIZATION flags") Suggested-by: Felix Fietkau <nbd@nbd.name> Signed-off-by: Kevin Darbyshire-Bryant <ldir@darbyshire-bryant.me.uk>
build: change PYTHON to python3 On recent macOS, /usr/bin/python3 is a wrapper that finds the right python executable It checks argv[0] to determine if python2 or python3 should be called. Always execute it as python3 to ensure it calls the right version Signed-off-by: Felix Fietkau <nbd@nbd.name>
build: add HOST_CXXFLAGS for host build Added HOST_CXXFLAGS to specify CXXFLAGS during host-compile (e.g. to specify c++ standard: HOST_CXXFLAGS += -std=c++11) Signed-off-by: Sergey V. Lobanov <sergey@lobanov.in>