mirror of
https://github.com/jart/cosmopolitan.git
synced 2025-01-31 19:43:32 +00:00
70 lines
1.9 KiB
Bash
Executable file
70 lines
1.9 KiB
Bash
Executable file
#!/bin/sh
|
|
# replacement for c++ command
|
|
#
|
|
# we assume you run the following beforehand
|
|
#
|
|
# sudo chmod 1777 /opt
|
|
# cd /opt
|
|
# git clone https://github.com/jart/cosmopolitan cosmo
|
|
# cd cosmo
|
|
# make -j
|
|
#
|
|
# you can then use it to build open source projects, e.g.
|
|
#
|
|
# export CC=cosmocc
|
|
# export CXX=cosmoc++
|
|
# export LD=cosmoc++
|
|
# ./configure --prefix=/opt/cosmos
|
|
# make -j
|
|
# make install
|
|
#
|
|
|
|
if [ "$1" = "--version" ]; then
|
|
cat <<'EOF'
|
|
x86_64-unknown-cosmo-g++ (GCC) 9.2.0
|
|
Copyright (C) 2019 Free Software Foundation, Inc.
|
|
This is free software; see the source for copying conditions. There is NO
|
|
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
|
|
EOF
|
|
exit 0
|
|
fi
|
|
|
|
CXX="/opt/cosmo/o/third_party/gcc/bin/x86_64-linux-musl-g++"
|
|
CCFLAGS="-O2 -fno-omit-frame-pointer -fdata-sections -ffunction-sections -fno-pie -pg -mnop-mcount -mno-tls-direct-seg-refs"
|
|
CXXFLAGS="-fno-exceptions -fuse-cxa-atexit -fno-threadsafe-statics"
|
|
CPPFLAGS="-DNDEBUG -nostdinc -iquote /opt/cosmo -isystem /opt/cosmos/include -isystem /opt/cosmo/libc/isystem -include libc/integral/normalize.inc"
|
|
LDFLAGS="-static -no-pie -nostdlib -fuse-ld=bfd -Wl,-melf_x86_64 -Wl,--gc-sections -Wl,-z,max-page-size=0x1000 -L/opt/cosmos/lib -Wl,-T,/opt/cosmo/o/ape/public/ape.lds /opt/cosmo/o/ape/ape-no-modify-self.o /opt/cosmo/o/libc/crt/crt.o"
|
|
LDLIBS="/opt/cosmo/o/third_party/libcxx/libcxx.a /opt/cosmo/o/cosmopolitan.a"
|
|
|
|
HAS_C=0
|
|
HAS_O=0
|
|
HAS_E=0
|
|
FIRST=1
|
|
for x; do
|
|
if [ $FIRST -eq 1 ]; then
|
|
set --
|
|
FIRST=0
|
|
fi
|
|
if [ "$x" = "-c" ]; then
|
|
HAS_C=1
|
|
fi
|
|
if [ "$x" = "-E" ]; then
|
|
HAS_E=1
|
|
fi
|
|
if [ "$x" = "-o" ] || [ "${x#-o}" != "$x" ]; then
|
|
HAS_O=1
|
|
fi
|
|
set -- "$@" "$x"
|
|
done
|
|
|
|
if [ "$HAS_E" = "1" ]; then
|
|
set -- $CPPFLAGS "$@"
|
|
elif [ "$HAS_C" = "1" ]; then
|
|
set -- $CCFLAGS $CXXFLAGS $CPPFLAGS "$@"
|
|
else
|
|
set -- $LDFLAGS $CPPFLAGS "$@" $LDLIBS
|
|
fi
|
|
|
|
set -- "$CXX" "$@"
|
|
printf '(cd %s; %s)\n' "$PWD" "$*" >>/tmp/build.log
|
|
exec "$@"
|