mirror of
https://github.com/renbaoshuo/s2oj-gcc.git
synced 2024-12-27 04:01:54 +00:00
This commit is contained in:
commit
d38cc9314a
22
.drone.yml
Normal file
22
.drone.yml
Normal file
@ -0,0 +1,22 @@
|
||||
|
||||
---
|
||||
kind: pipeline
|
||||
type: docker
|
||||
name: Build
|
||||
|
||||
trigger:
|
||||
event:
|
||||
- push
|
||||
- custom
|
||||
|
||||
steps:
|
||||
- name: Build & Upload
|
||||
image: ubuntu:22.04
|
||||
commands:
|
||||
- sudo apt update && sudo apt install libgmp-dev libmpfr-dev libmpc-dev gcc-multilib
|
||||
- bash build.sh
|
||||
environment:
|
||||
GITEA_ENDPOINT: https://git.m.ac
|
||||
GITEA_USER: baoshuo
|
||||
GITEA_TOKEN:
|
||||
from_secret: GITEA_TOKEN
|
3
.gitignore
vendored
Normal file
3
.gitignore
vendored
Normal file
@ -0,0 +1,3 @@
|
||||
build/
|
||||
deb/
|
||||
*.deb
|
56
build.sh
Normal file
56
build.sh
Normal file
@ -0,0 +1,56 @@
|
||||
#!/bin/bash
|
||||
|
||||
CURRENT_DIR=$(pwd)
|
||||
GCC_VERSION="13.2.0"
|
||||
# GCC_GIT="git://gcc.gnu.org/git/gcc.git"
|
||||
GCC_GIT="https://git.m.ac/mirrors/gcc.git"
|
||||
GCC_SRC="${CURRENT_DIR}/../src"
|
||||
BUILD_DIR="build"
|
||||
|
||||
# Clone GCC
|
||||
echo "===> Cloning GCC..."
|
||||
git clone -b "releases/gcc-$GCC_VERSION" --depth 1 "${GCC_GIT}" "${GCC_SRC}"
|
||||
|
||||
# Apply patches
|
||||
echo "===> Applying patches..."
|
||||
cd ${GCC_SRC}
|
||||
patch -p1 < ../patches/gcc-$GCC_VERSION.patch
|
||||
cd ${CURRENT_DIR}
|
||||
|
||||
# Configure GCC
|
||||
echo "===> Configuring GCC..."
|
||||
cd ${CURRENT_DIR}/${BUILD_DIR}
|
||||
${GCC_SRC}/configure -v \
|
||||
--enable-languages=c,c++ \
|
||||
--prefix=/usr \
|
||||
--build=x86_64-linux-gnu \
|
||||
--host=x86_64-linux-gnu \
|
||||
--target=x86_64-linux-gnu \
|
||||
--with-pkgversion="s2oj-gcc-$GCC_VERSION~1baoshuo1"
|
||||
|
||||
# Build GCC
|
||||
echo "===> Building GCC..."
|
||||
make -j$(nproc)
|
||||
|
||||
# Make .deb package
|
||||
echo "===> Making .deb package \"s2oj-gcc-$GCC_VERSION~1baoshuo1.deb\" ..."
|
||||
make -j$(nproc) DESTDIR=${CURRENT_DIR}/deb install
|
||||
cd ${CURRENT_DIR}/deb
|
||||
mkdir -p DEBIAN
|
||||
cat << EOF > DEBIAN/control
|
||||
Package: s2oj-gcc
|
||||
Version: $GCC_VERSION~1baoshuo1
|
||||
Section: base
|
||||
Priority: optional
|
||||
Architecture: amd64
|
||||
Maintainer: Baoshuo <i@baoshuo.ren>
|
||||
Description: GCC $GCC_VERSION for S2OJ
|
||||
EOF
|
||||
cd ${CURRENT_DIR}
|
||||
dpkg-deb --build deb s2oj-gcc-$GCC_VERSION~1baoshuo1.deb
|
||||
|
||||
# Upload package to Gitea
|
||||
echo "===> Uploading package to Gitea..."
|
||||
curl --user "${GITEA_USER}:${GITEA_TOKEN}" \
|
||||
--upload-file s2oj-gcc-$GCC_VERSION~1baoshuo1.deb \
|
||||
${GITEA_ENDPOINT}/api/packages/${GITEA_USER}/debian/pool/all/main/upload
|
34
patches/gcc-13.2.0.patch
Normal file
34
patches/gcc-13.2.0.patch
Normal file
@ -0,0 +1,34 @@
|
||||
diff --git a/gcc/c-family/c-attribs.cc b/gcc/c-family/c-attribs.cc
|
||||
index 072cfb691..0c1a26b21 100644
|
||||
--- a/gcc/c-family/c-attribs.cc
|
||||
+++ b/gcc/c-family/c-attribs.cc
|
||||
@@ -5626,6 +5626,12 @@ static tree
|
||||
handle_optimize_attribute (tree *node, tree name, tree args,
|
||||
int ARG_UNUSED (flags), bool *no_add_attrs)
|
||||
{
|
||||
+ if (getenv("ONLINE_JUDGE"))
|
||||
+ {
|
||||
+ error_at (DECL_SOURCE_LOCATION (*node), "%qE attribute is disallowed in online judge mode", name);
|
||||
+ return NULL_TREE;
|
||||
+ }
|
||||
+
|
||||
/* Ensure we have a function type. */
|
||||
if (TREE_CODE (*node) != FUNCTION_DECL)
|
||||
{
|
||||
diff --git a/gcc/c-family/c-pragma.cc b/gcc/c-family/c-pragma.cc
|
||||
index 0d2b333ce..091c0edc9 100644
|
||||
--- a/gcc/c-family/c-pragma.cc
|
||||
+++ b/gcc/c-family/c-pragma.cc
|
||||
@@ -1163,6 +1163,12 @@ handle_pragma_optimize (cpp_reader *)
|
||||
bool close_paren_needed_p = false;
|
||||
tree optimization_previous_node = optimization_current_node;
|
||||
|
||||
+ if (getenv("ONLINE_JUDGE"))
|
||||
+ {
|
||||
+ error ("%<#pragma GCC optimize%> is not allowed in online judge mode");
|
||||
+ return;
|
||||
+ }
|
||||
+
|
||||
if (cfun)
|
||||
{
|
||||
error ("%<#pragma GCC optimize%> is not allowed inside functions");
|
Loading…
Reference in New Issue
Block a user