initial import
commit
a419f01538
|
@ -0,0 +1,63 @@
|
|||
OpenBSD ZIG_LIBC support
|
||||
========================
|
||||
|
||||
Simple shell script to build a `ZIG_LIBC` environment for [Zig](https://ziglang.org/) targeting [OpenBSD](https://www.openbsd.org/).
|
||||
|
||||
Usage
|
||||
-----
|
||||
|
||||
```
|
||||
$ ./build-ziglibc.sh
|
||||
usage: ./build-ziglibc.sh url output-dir
|
||||
```
|
||||
|
||||
- *url* : URL pointing to OpenBSD sets.
|
||||
|
||||
Typical url to use: https://cdn.openbsd.org/pub/OpenBSD/*version*/*platform*/
|
||||
|
||||
Please note that OpenBSD officially support only the two last
|
||||
released versions. Snapshots url is also valid for targeting
|
||||
-current, but be aware that it is a moving target.
|
||||
|
||||
Refer to [supported platforms](https://www.openbsd.org/plat.html)
|
||||
list from OpenBSD site web for the name used.
|
||||
|
||||
- *output-dir* : where to put the environment.
|
||||
|
||||
Prefer absolute path: it will be used in generated `libc.conf` file.
|
||||
|
||||
The directory will be created.
|
||||
|
||||
|
||||
Examples of url
|
||||
---------------
|
||||
|
||||
- OpenBSD 6.9 [amd64](https://www.openbsd.org/amd64.html) (x86_64 on Linux world)
|
||||
|
||||
https://cdn.openbsd.org/pub/OpenBSD/6.9/amd64/
|
||||
|
||||
- OpenBSD -current [i386](https://www.openbsd.org/i386.html)
|
||||
|
||||
https://cdn.openbsd.org/pub/OpenBSD/snapshots/i386/
|
||||
|
||||
|
||||
Use the environment
|
||||
-------------------
|
||||
|
||||
```
|
||||
$ ZIG_LIBC=path/to/amd64/libc.conf zig build-exe -target x86_64-openbsd -o test/helloz test/hello.zig
|
||||
$ ZIG_LIBC=path/to/amd64/libc.conf zig cc -target x86_64-openbsd -o test/helloc test/hello.c
|
||||
```
|
||||
|
||||
Make shell wrapper
|
||||
------------------
|
||||
|
||||
For easy use of crosscompilation, you could create a shell wrapper
|
||||
named `x86_64-openbsd-cc`:
|
||||
|
||||
```
|
||||
#!/bin/sh
|
||||
exec env ZIG_LIBC=path/to/amd64/libc.conf zig cc -target x86_64-openbsd "$@"
|
||||
```
|
||||
|
||||
And do the same for `x86_64-openbsd-c++`, `x86_64-openbsd-ar`, …
|
|
@ -0,0 +1,79 @@
|
|||
#!/bin/sh
|
||||
set -eu
|
||||
|
||||
# tool used to download. url as argument, output to stdout.
|
||||
DOWNLOAD_BIN=${DOWNLOAD_BIN:-ftp -Vo-}
|
||||
#DOWNLOAD_BIN=${DOWNLOAD_BIN:-curl -s}
|
||||
|
||||
if [ $# -ne 2 ]; then
|
||||
cat >&2 <<EOF
|
||||
usage: ${0} url output-dir
|
||||
|
||||
examples:
|
||||
- ${0} https://cdn.openbsd.org/pub/OpenBSD/6.9/amd64/ \${PWD}/6.9/amd64
|
||||
- ${0} https://cdn.openbsd.org/pub/OpenBSD/snapshots/i386/ \${PWD}/snapshots/i386
|
||||
|
||||
EOF
|
||||
exit 1
|
||||
fi
|
||||
|
||||
url="${1}"
|
||||
target_directory="${2}"
|
||||
|
||||
if [ -r "${target_directory}/libc.conf" ] ; then
|
||||
echo "warn: ${target_directory}/libc.conf already exists" >&2
|
||||
exit 0
|
||||
fi
|
||||
|
||||
echo "- Getting OpenBSD version" >&2
|
||||
target_version=`${DOWNLOAD_BIN} "${url}/SHA256" \
|
||||
| sed -ne 's,.*(base\([0-9]\)\([0-9]\)\.tgz).*,\1\2,p'`
|
||||
|
||||
echo "- Downloading and extracting libc environment" >&2
|
||||
mkdir -p "${target_directory}"
|
||||
cat >"${target_directory}/CACHEDIR.TAG" <<EOF
|
||||
Signature: 8a477f597d28d172789f06886806bc55
|
||||
# This file is a cache directory tag created by ${0}.
|
||||
# For information about cache directory tags see https://bford.info/cachedir/
|
||||
EOF
|
||||
|
||||
${DOWNLOAD_BIN} "${url}/base${target_version}.tgz" \
|
||||
| tar zxf - -C "${target_directory}" ./usr/include ./usr/lib
|
||||
${DOWNLOAD_BIN} "${url}/comp${target_version}.tgz" \
|
||||
| tar zxf - -C "${target_directory}" ./usr/include ./usr/lib
|
||||
|
||||
echo "- Creating linux-like library links" >&2
|
||||
for lib in "${target_directory}"/usr/lib/lib*.so.*.* ; do
|
||||
ln -fs -- "${lib}" "${lib%.*.*}"
|
||||
done
|
||||
|
||||
echo "- Creating ZIG_LIBC file" >&2
|
||||
cat >"${target_directory}/libc.conf" <<EOF
|
||||
# The directory that contains \`stdlib.h\`.
|
||||
# On POSIX-like systems, include directories be found with: \`cc -E -Wp,-v -xc /dev/null\`
|
||||
include_dir=${target_directory}/usr/include
|
||||
|
||||
# The system-specific include directory. May be the same as \`include_dir\`.
|
||||
# On Windows it's the directory that includes \`vcruntime.h\`.
|
||||
# On POSIX it's the directory that includes \`sys/errno.h\`.
|
||||
sys_include_dir=${target_directory}/usr/include
|
||||
|
||||
# The directory that contains \`crt1.o\` or \`crt2.o\`.
|
||||
# On POSIX, can be found with \`cc -print-file-name=crt1.o\`.
|
||||
# Not needed when targeting MacOS.
|
||||
crt_dir=${target_directory}/usr/lib
|
||||
|
||||
# The directory that contains \`vcruntime.lib\`.
|
||||
# Only needed when targeting MSVC on Windows.
|
||||
msvc_lib_dir=
|
||||
|
||||
# The directory that contains \`kernel32.lib\`.
|
||||
# Only needed when targeting MSVC on Windows.
|
||||
kernel32_lib_dir=
|
||||
|
||||
# The directory that contains \`crtbeginS.o\` and \`crtendS.o\`
|
||||
# Only needed when targeting Haiku.
|
||||
gcc_dir=
|
||||
EOF
|
||||
|
||||
echo "ZIG_LIBC=${target_directory}/libc.conf"
|
|
@ -0,0 +1,9 @@
|
|||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
|
||||
int
|
||||
main(int argc, char *argv[])
|
||||
{
|
||||
printf("Hello world\n");
|
||||
return EXIT_SUCCESS;
|
||||
}
|
|
@ -0,0 +1,5 @@
|
|||
const std = @import("std");
|
||||
|
||||
pub fn main() void {
|
||||
std.debug.print("Hello world\n", .{});
|
||||
}
|
Loading…
Reference in New Issue