Commit Graph

35 Commits

Author SHA1 Message Date
irengrig cfa5c56f23
Add build libgd example, add it to tests (#42)
Unfortunately, many additional variables needed to make CMake find libraries.
2018-08-20 21:22:45 +02:00
irengrig 3dd96c7a14
Important refactoring of the $EXT_BUILD_DEPS directory structure. (#41)
Some libraries define not only C/C++ libraries and headers, but also
scripts for finding this libraries (pkg_config, CMake find/config scripts).
Another important use case is defining CMake functions to be used in the CMake build of the dependent targets.
As for CMake such scripts are searched for in the number of directory path combinations, relative to CMAKE_INSTALL_PREFIX, including for both Unix and Windows,
<prefix>/<name>*/(lib/<arch>|lib|share)/cmake/<name>*/          (W/U)
<prefix>/<name>*/(lib/<arch>|lib|share)/<name>*/                (W/U)
<prefix>/<name>*/(lib/<arch>|lib|share)/<name>*/(cmake|CMake)/  (W/U)

acceptable solution would be copying the whole CMake install directory under the dependencies root $EXT_BUILD_DEPS, which is passed as CMAKE_INSTALL_PREFIX.

For the libraries, which put their CMake scripts into some other paths, user can add copy command using postfix_script parameter.

To be documented better.
2018-08-20 18:47:49 +02:00
irengrig af3f730c22
allow headers-only libraries (#40) 2018-08-20 17:39:35 +02:00
irengrig 45419956f5
correct utils.sh: in symlinking directory contents check if file passed (#39)
In that case, the file itself should be linked to the target directory
It shows up if we depend on the library, which provides only header files,
and no information on the wrapping directory. Technically it is correct, but
then our linking script should be prepared to link individual files as well as wrapping directories.
Example: cc_import of header-only library.
2018-08-20 17:00:13 +02:00
irengrig 85b4e59103
correct bugs with shared and interface libs in cc_toolchain_util.bzl (#38) 2018-08-20 16:46:24 +02:00
irengrig 840796ef4d
remove debug print (#37) 2018-08-20 16:00:27 +02:00
irengrig 8989362236
install prefix: indicate relative value with "./" (#36)
Unfortunately, the prefix is never relative.
If the relative value is passed, current directory is used as base,
and the real prefix is $(pwd)/<relative-prefix>
However, keep any value, passed by user, as finally outside the build that value can be used.
2018-08-20 15:56:35 +02:00
irengrig 6a0af905db
cmake env vars and cache entries: fix dictionary keys checks (#35) 2018-08-20 15:51:52 +02:00
irengrig 6af670f976
add attribute to append to toolchains env variables (#33)
to be used for flags addition
2018-08-17 23:04:52 +02:00
irengrig 2bfa976185
fix joining cache entries if there is no such toolchain key (#32) 2018-08-17 22:33:48 +02:00
irengrig 66f0863c32
do not pass android ndk as additional dependency (#31)
because now it gets passed with the cc_toolchain files
2018-08-17 21:27:27 +02:00
irengrig 4b8af84398
utils.sh: do not copy directories into themselves (#30)
When creating the directory structure for running cmake/configure,
search for underlying items, but exclude self (which used to be returned by find).
For that, use -mindepth option
2018-08-17 17:39:30 +02:00
irengrig df6e76f2cc
add toolchain files to the input files (#29) 2018-08-16 23:22:01 +02:00
irengrig 6ae93cf516
cmake, shell script: pass parameter to find Ubuntu-16 compatible (#28) 2018-08-16 14:00:26 +02:00
irengrig 19ff39c6d8
cmake: add option cache_entries to pass cache initializers (#27)
Have explicit dict option "cache_entries" for passing CMake cache initializer key-values pairs to the rule.
This gives us ability to join user initializers and toolchain initializers. This might be useful with flags option.
2018-08-16 09:53:52 +02:00
irengrig 9f97e440ca
print generated script text as debug information (#26) 2018-08-14 15:54:35 +02:00
irengrig f1ada8ad32
restore android example BUILD file (#24) 2018-08-13 20:01:39 +02:00
irengrig e418a1555b
Update README with information on how to correctly use rule (#23)
fixes https://github.com/bazelbuild/rules_foreign_cc/issues/12
2018-08-13 15:18:14 +02:00
irengrig be719ee2fc
correct workspace_definitions.bzl, do not include self (#21)
* correct workspace_definitions.bzl, do not include self

* use workspace definitions from WORKSPACE
2018-08-13 15:02:25 +02:00
irengrig 838fdb117c
export workspace_definitions.bzl (#20) 2018-08-13 14:48:58 +02:00
irengrig 6245c8bad9
add workspace definitions file (#19) 2018-08-13 14:45:24 +02:00
irengrig 33ba461485
export rules (#18) 2018-08-13 14:30:15 +02:00
irengrig 9e67b25500
build targets -> test targets (#17) 2018-08-13 13:09:30 +02:00
irengrig 21391856d0
first tests for ci (#16) 2018-08-13 12:44:53 +02:00
irengrig 37eb556e1f
add workspace .bazelrc with the needed C/C++ Skylark option (#15) 2018-08-13 11:59:34 +02:00
irengrig 6c11ff4482
move examples into examples directory (#14) 2018-08-13 11:55:05 +02:00
irengrig 30b61168e0
make cmake rule accept install-prefix option (#11)
this way the users can influence which install prefix will appear in the
generated code
install prefix have to be relative - we are doing the hermetic build
modify our shell script to copy the result of the build into the target directory
(we can not leave it in temp directory, it will be deleted)
2018-08-08 16:49:50 +02:00
irengrig 86a0d34a98
update README: new --experimental_cc_skylark_api_enabled_packages value (#10) 2018-08-08 16:49:35 +02:00
irengrig 14d64106fa
update README file; promote cmake_external, configure is not ready yet (#9) 2018-08-06 15:24:46 +02:00
irengrig 067d4be22e
use tools paths and flags from the toolchain (#7)
* take tools paths and flags from the toolchain

* correct toolchain data extraction, correct cmake flags and environment

* framework script: export variables intended to be used in config script

config script can create child processes which could use this variables

* cmake: prepend relative [to the execroot] paths with "$EXT_BUILD_ROOT/"

unfortunately, CMake does not understand relative paths
(sometimes it runs tests for the passed compiler and for that
concatenates the passed relative path to some tmp directory created for test)

we replace only paths starting with external/ and <top-package-name>/,
so we are quite fine to not make a mistake with replacing some not related to paths text;
the targets for replacement take very different form (judging by examining
toolchain definitions), for instance "-Lexternal/something"

* test data for cross compilation for android and with --crosstool_top

data files taken from bazel examples and bazel test data;

NB one of the interesting things is that we need to specify tools dependency on android sdk and ndk, so that cmake_external shell script have access to these tools

* remove cross compilation example with CROSSTOOL for now

* add very simple CMake library (test data)

* rename target to indicate it is not a test, but example

* adjust android example:

rename the target to indicate it is not a test but example,
add android ndk sources as additional tool for cmake target,
(otherwise it is not available in sandbox)
use more simple cmake-built library

* corrections to the framework & cmake:

- correct search for the root directory of the filegroup (when it is not under external)
- it was a mistake to specify shared library linker, specify CMAKE_AR instead
- unfortunately, I have not discovered how to modify CMake behaviour to pass the custom static flags (rcsD) before "-qc <target>" to the ar linker; option from documentation does not work. To be investigated. For now, do not pass the static cxx linker options, taken from Bazel toolchain.
2018-08-06 15:23:18 +02:00
irengrig 44c0c97846
allow usage of underscore in external libraries rules (#8)
* allow usage of underscore in external libraries rules

* iterate the name string with index (correct review comment)

sorry for autoformatting changes; the real changes are in lines 259, 260

* iterate the name string with index (correct review comment)
2018-08-06 15:20:29 +02:00
irengrig 7792e40fc0
provide several libraries as outputs from external build rules (#6)
i.e. not single libraries, because in general case several build targets
can be created by a single CMake/configure-make build, and several of them linked to the next dependency
2018-07-30 14:59:02 +02:00
irengrig 0fd3a22fbc
external build framework function and cmake_external rule (#4)
* external build framework macro and cmake_external rule

* declare deps headers as inputs as well; correct sed expression

* use symlinking instead of copying, filter duplicates

* correct detect root

* corrections for copying tools and include directories

* correct review comments

* provide a way to pass modified attributes to the framework function

create a function that creates a dict from ctx.attr,
replaces/adds values and creates a resulting struct;
have mandatory attributes as mandatory parameters to this function

* correct review comments

* correct detect_root

* introduce parameter for passing user defined link options

* add documentation, define default static library to be built

* correct/improve documentation

* more correct gathering headers and include directories from dependencies

* correct review comments

* correct passing transitive link options
2018-07-30 12:56:09 +02:00
Carmi Grushko 5fda9e82bd
Add code and examples (#1) 2018-04-26 13:52:06 -04:00
Carmi Grushko f0eea1b63e first commit 2018-04-24 22:17:47 -04:00