Skip to content

Commit d65d7b7

Browse files
authored
Resolve libm relative to sysroot (#82)
* aarch64-none-linux-gnu: Resolve libm relative to sysroot * arm-none-linux-gnueabihf: added test with libm
1 parent 1abff3e commit d65d7b7

9 files changed

Lines changed: 31 additions & 0 deletions

File tree

test/aarch64-none-linux-gnu/BUILD

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,7 @@ cc_binary(
3434
linkopts = [
3535
"-nostartfiles",
3636
"-Wl,--entry,main",
37+
"-lm",
3738
],
3839
deps = [":arm_library"],
3940
)

test/aarch64-none-linux-gnu/library.cpp

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
#include "library.h"
22
#include <vector>
3+
#include <cmath>
34

45
uint16_t baz(uint8_t a) { return a * 2; }
56

@@ -13,3 +14,7 @@ uint16_t foobaz() {
1314
vec.push_back(1);
1415
return vec[0];
1516
}
17+
18+
double math_fn(double val) {
19+
return sin(val);
20+
}

test/aarch64-none-linux-gnu/library.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,3 +3,4 @@
33
uint16_t baz(uint8_t var);
44
uint32_t foo(void);
55
uint16_t foobaz();
6+
double math_fn(double val);
Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,8 @@
11
// The simplest possible main function
2+
#include "library.h"
3+
#include <iostream>
24

35
int main(){
6+
std::cout << math_fn(10) << "\n";
47
return 0;
58
}

test/arm-none-linux-gnueabihf/BUILD

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,9 @@ cc_binary(
3333
"-mcpu=cortex-a5",
3434
"-mthumb",
3535
],
36+
linkopts = [
37+
"-lm",
38+
],
3639
deps = [":arm_library"],
3740
)
3841

test/arm-none-linux-gnueabihf/library.cpp

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
#include "library.h"
22
#include <vector>
3+
#include <cmath>
34

45
uint16_t baz(uint8_t a) { return a * 2; }
56

@@ -13,3 +14,7 @@ uint16_t foobaz() {
1314
vec.push_back(1);
1415
return vec[0];
1516
}
17+
18+
double math_fn(double val) {
19+
return sin(val);
20+
}

test/arm-none-linux-gnueabihf/library.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,3 +3,4 @@
33
uint16_t baz(uint8_t var);
44
uint32_t foo(void);
55
uint16_t foobaz();
6+
double math_fn(double val);
Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,8 @@
11
// The simplest possible main function
2+
#include "library.h"
3+
#include <iostream>
24

35
int main(){
6+
std::cout << math_fn(10) << "\n";
47
return 0;
58
}

toolchain/patches/0001-Resolve-libc-relative-to-sysroot-aarch64_none_linux_gnu.patch

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,3 +14,12 @@ relative to the library search directories.
1414
OUTPUT_FORMAT(elf64-littleaarch64)
1515
-GROUP ( /lib64/libc.so.6 /usr/lib64/libc_nonshared.a AS_NEEDED ( /lib/ld-linux-aarch64.so.1 ) )
1616
+GROUP ( =/lib64/libc.so.6 =/usr/lib64/libc_nonshared.a AS_NEEDED ( =/lib/ld-linux-aarch64.so.1 ) )
17+
18+
--- a/aarch64-none-linux-gnu/libc/usr/lib64/libm.so
19+
+++ b/aarch64-none-linux-gnu/libc/usr/lib64/libm.so
20+
@@ -1,4 +1,4 @@
21+
/* GNU ld script
22+
*/
23+
OUTPUT_FORMAT(elf64-littleaarch64)
24+
-GROUP ( /lib64/libm.so.6 AS_NEEDED ( /lib64/libmvec.so.1 ) )
25+
+GROUP ( =/lib64/libm.so.6 AS_NEEDED ( =/lib64/libmvec.so.1 ) )

0 commit comments

Comments
 (0)