#!/usr/bin/python3 # Copyright 2016 Benjamin Barenblat # # Licensed under the Apache License, Version 2.0 (the “License”); you may not # use this file except in compliance with the License. You may obtain a copy of # the License at # # http://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an “AS IS” BASIS, WITHOUT # WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the # License for the specific language governing permissions and limitations under # the License. import subprocess import sys import os CPPFLAGS = ["-D_FORTIFY_SOURCE=2"] CFLAGS = ["-ftrapv", "-fstack-protector-strong", "--param=ssp-buffer-size=4", "-ffunction-sections", "-fdata-sections"] LDFLAGS = ["-Wl,--gc-sections", "-Wl,-Bsymbolic-functions", "-Wl,-z,relro", "-Wl,-z,now", "-Wl,--hash-style=gnu", "-Wl,--no-copy-dt-needed-entries", "-Wl,--as-needed"] def dpkg_buildflags(variable): process = subprocess.run(("dpkg-buildflags", "--get", variable), env={"DEB_BUILD_MAINT_OPTIONS": "hardening=+all"}, stdout=subprocess.PIPE) return [flag for flag in process.stdout.split() if not (flag.startswith("-O") or f in ("-g", "-fPIE", "-pie"))] args = ["clang", "-pipe"] + (CPPFLAGS + CFLAGS if "-c" in sys.argv else LDFLAGS) for arg in sys.argv[1:]: if arg == "-O3": arg = "-O2" elif arg.startswith("-lurweb"): arg = "-l:lib" + arg[2:] + ".a" args.append(arg) if "UGTD_BUILD_VERBOSE" in os.environ: print(" ".join(args)) os.execvp("clang", args)