Skip to content

Commit f89e99a

Browse files
klsruanseproDev
authored andcommitted
Update Build System
1 parent d5bdfb1 commit f89e99a

5 files changed

Lines changed: 127 additions & 96 deletions

File tree

.github/workflows/ci.yml

Lines changed: 36 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
name: "Build external dependecies"
1+
name: "Build external dependencies"
22

33
on: workflow_dispatch
44

@@ -30,14 +30,44 @@ jobs:
3030
3131
- uses: actions/checkout@v3
3232

33-
- name: Building Libraries
33+
- name: Building Libraries Windows
34+
if: matrix.os.host == 'windows-latest'
3435
shell: bash
3536
run: |
3637
bash dependencies/build.sh
38+
cp -f dependencies/binaries/jpeg/libturbojpeg.dll dependencies/binaries/libturbojpeg.dll
3739
38-
- name: Upload Artifacts
40+
- name: Upload Artifacts Windows
3941
uses: actions/upload-artifact@v3
42+
if: matrix.os.host == 'windows-latest'
4043
with:
41-
name: ${{ matrix.os.name }}
42-
path: |
43-
release/
44+
name: Windows
45+
path: dependencies/binaries/*.dll
46+
47+
- name: Building Libraries Linux
48+
if: matrix.os.host == 'ubuntu-latest'
49+
shell: bash
50+
run: |
51+
bash dependencies/build.sh
52+
cp -f dependencies/binaries/jpeg/libturbojpeg.so dependencies/binaries/libturbojpeg.so
53+
54+
- name: Upload Artifacts Linux
55+
uses: actions/upload-artifact@v3
56+
if: matrix.os.host == 'ubuntu-latest'
57+
with:
58+
name: Linux
59+
path: dependencies/binaries/*.so
60+
61+
- name: Building Libraries MacOS
62+
if: matrix.os.host == 'macos-11'
63+
shell: bash
64+
run: |
65+
bash dependencies/build.sh
66+
cp -f dependencies/binaries/jpeg/libturbojpeg.dylib dependencies/binaries/libturbojpeg.dylib
67+
68+
- name: Upload Artifacts MacOS
69+
uses: actions/upload-artifact@v3
70+
if: matrix.os.host == 'macos-11'
71+
with:
72+
name: MacOS
73+
path: dependencies/binaries/*.dylib

.gitignore

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,2 +1,3 @@
11
release/
22
dependencies/subprojects/
3+
dependencies/binaries/

dependencies/CMakeLists.txt

Lines changed: 68 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,68 @@
1+
cmake_minimum_required(VERSION 3.10)
2+
option(BUILD_SHARED_LIBS "Build Shared Libs" ON)
3+
4+
# libpolyclipping
5+
project(clipper_wrap LANGUAGES CXX)
6+
7+
set(CLIPPER_SRC
8+
subprojects/libpolyclipping/clipper.cpp
9+
clipper.wrap.cpp
10+
)
11+
set(CMAKE_INSTALL_LIBDIR ${CMAKE_SOURCE_DIR}/clipper_build)
12+
13+
add_library(clipper_wrap SHARED ${CLIPPER_SRC})
14+
target_include_directories(clipper_wrap PUBLIC subprojects/libpolyclipping)
15+
target_compile_options(clipper_wrap PRIVATE -w -O3)
16+
17+
if (NOT UNIX)
18+
target_link_libraries(clipper_wrap PUBLIC -static)
19+
endif (UNIX)
20+
21+
# lodepng
22+
project(lodepng_wrap LANGUAGES CXX)
23+
24+
set(LODEPNG_SRC subprojects/lodepng/lodepng.cpp)
25+
set(CMAKE_INSTALL_LIBDIR ${CMAKE_SOURCE_DIR}/lodepng_build)
26+
27+
add_library(lodepng_wrap SHARED ${LODEPNG_SRC})
28+
target_compile_options(lodepng_wrap PRIVATE -W -Wall -Wextra -ansi -pedantic -O3)
29+
30+
if (NOT UNIX)
31+
target_link_libraries(lodepng_wrap PUBLIC -static)
32+
endif (UNIX)
33+
34+
# giflib
35+
project(giflib_wrap LANGUAGES C)
36+
37+
set(GIFLIB_SRC
38+
subprojects/giflib/lib/dgif_lib.c
39+
subprojects/giflib/lib/egif_lib.c
40+
subprojects/giflib/lib/gif_err.c
41+
subprojects/giflib/lib/gif_font.c
42+
subprojects/giflib/lib/gif_hash.c
43+
subprojects/giflib/lib/gifalloc.c
44+
subprojects/giflib/lib/quantize.c
45+
)
46+
set(CMAKE_INSTALL_LIBDIR ${CMAKE_SOURCE_DIR}/giflib_build)
47+
48+
add_library(giflib_wrap SHARED ${GIFLIB_SRC})
49+
target_compile_options(giflib_wrap PRIVATE -w -fno-builtin -g -c -W -Wreturn-type -Wcomment -O3)
50+
51+
if (NOT UNIX)
52+
target_link_libraries(giflib_wrap PUBLIC -static)
53+
endif (UNIX)
54+
55+
install(TARGETS clipper_wrap
56+
RUNTIME DESTINATION "${CMAKE_INSTALL_LIBDIR}"
57+
LIBRARY DESTINATION "${CMAKE_INSTALL_LIBDIR}"
58+
)
59+
60+
install(TARGETS lodepng_wrap
61+
RUNTIME DESTINATION "${CMAKE_INSTALL_LIBDIR}"
62+
LIBRARY DESTINATION "${CMAKE_INSTALL_LIBDIR}"
63+
)
64+
65+
install(TARGETS giflib_wrap
66+
RUNTIME DESTINATION "${CMAKE_INSTALL_LIBDIR}"
67+
LIBRARY DESTINATION "${CMAKE_INSTALL_LIBDIR}"
68+
)

dependencies/build.sh

Lines changed: 22 additions & 86 deletions
Original file line numberDiff line numberDiff line change
@@ -1,97 +1,33 @@
1-
#!/bin/sh
1+
# https://github.com/tamasmeszaros/libpolyclipping.git#784ff113071f1fa7832ebe74667f2fd0756c634f
2+
# https://github.com/lvandeve/lodepng.git#997936fd2b45842031e4180d73d7880e381cf33f
3+
# https://github.com/rcancro/giflib.git#4b0c893cfddf16421bd3f59207fdf65f06e9a10d
4+
# https://github.com/libjpeg-turbo/libjpeg-turbo.git#8162eddf041e0be26f5c671bb6528723c55fed9d
25

3-
# captures git repository name with HTTPS protocol
4-
git_HTTPS="https://github.com/.+/(.+)\.git#.+"
6+
pvd=$PWD
57

6-
# shortcut to subprojects and additional folders
7-
inc="release"
8-
sub="dependencies/subprojects"
9-
10-
# windows
11-
ext=".dll"
12-
lib=""
13-
14-
# check OS
15-
if [[ "$OSTYPE" == "linux-gnu"* ]]; then
16-
ext=".so"
17-
lib="lib"
18-
elif [[ "$OSTYPE" == "darwin"* ]]; then
19-
ext=".dylib"
20-
lib="lib"
21-
fi
22-
23-
# creates folders
8+
sub=$pvd/dependencies/subprojects
249
[ ! -d $sub ] && mkdir -p $sub
25-
[ ! -d $inc ] && mkdir -p $inc
26-
27-
# sets flags
28-
flags="-Wall -Wextra -fPIC -O3"
29-
30-
# calls additional dependencies
31-
while read -u3 rep_path; do
32-
if [[ $rep_path =~ $git_HTTPS ]]; then
33-
# Clone repo and checkout correct commit
34-
rep="${rep_path%\#*}"
35-
commit="${rep_path#*\#}"
36-
rep_name=${BASH_REMATCH[1]}
37-
rep_dir="$sub/$rep_name"
38-
rm -rf $rep_dir
39-
40-
git clone $rep $rep_dir
41-
cwd="$PWD"
42-
cd $rep_dir
43-
git checkout $commit
44-
cd $cwd
45-
46-
if [ $rep_name = "libpolyclipping" ]; then
47-
cpp_dir="$sub/libpolyclipping"
48-
cpp_rel="$inc/zpclipper"
49-
c_files="$cpp_dir/clipper.cpp $cpp_dir/clipper.wrap.cpp"
5010

51-
# required files and folders
52-
cp -f "dependencies/clipper.wrap.cpp" $cpp_dir
53-
mkdir -p $cpp_rel
11+
bin=$pvd/dependencies/binaries
12+
[ ! -d $bin ] && mkdir -p $bin
5413

55-
if [[ $ext = ".dylib" ]]; then
56-
clang++ $flags -std=c++17 -c $c_files
57-
clang++ -shared *.o -o "$cpp_rel/${lib}polyclipping${ext}"
58-
else
59-
g++ $flags -std=c++17 -c $c_files
60-
g++ -shared *.o -o "$cpp_rel/${lib}polyclipping${ext}"
61-
fi
62-
elif [ $rep_name = "lodepng" ]; then
63-
ldp_dir="$sub/lodepng"
64-
ldp_rel="$inc/zlodepng"
65-
c_files="$ldp_dir/lodepng.c"
14+
binj=$pvd/dependencies/binaries/jpeg
15+
[ ! -d $binj ] && mkdir -p $binj
6616

67-
# required files and folders
68-
cp -f "$ldp_dir/lodepng.cpp" $c_files
69-
mkdir -p $ldp_rel
17+
git clone https://github.com/tamasmeszaros/libpolyclipping.git $sub/libpolyclipping && cd $sub/libpolyclipping
18+
git checkout 784ff113071f1fa7832ebe74667f2fd0756c634f
7019

71-
gcc $flags -ansi -pedantic -c $c_files
72-
gcc -shared *.o -o "$ldp_rel/${lib}lodepng${ext}"
73-
elif [ $rep_name = "giflib" ]; then
74-
gif_dir="$sub/giflib/lib"
75-
gif_rel="$inc/zgiflib"
20+
git clone https://github.com/lvandeve/lodepng.git $sub/lodepng && cd $sub/lodepng
21+
git checkout 997936fd2b45842031e4180d73d7880e381cf33f
7622

77-
# required files and folders
78-
mkdir -p $gif_rel
23+
git clone https://github.com/rcancro/giflib.git $sub/giflib && cd $sub/giflib
24+
git checkout 4b0c893cfddf16421bd3f59207fdf65f06e9a10d
7925

80-
gcc $flags -w -c $gif_dir/*.c
81-
gcc -shared *.o -o "$gif_rel/${lib}giflib${ext}"
82-
elif [ $rep_name = "libjpeg-turbo" ]; then
83-
peg_dir="$sub/libjpeg-turbo"
84-
peg_rel="$inc/zturbojpeg"
85-
peg_bld="$peg_dir/build"
26+
git clone https://github.com/libjpeg-turbo/libjpeg-turbo.git $sub/libjpeg-turbo && cd $sub/libjpeg-turbo
27+
git checkout 8162eddf041e0be26f5c671bb6528723c55fed9d
8628

87-
# required files and folders
88-
mkdir -p $peg_rel
29+
cmake $pvd/dependencies -DCMAKE_CXX_COMPILER=gcc -DCMAKE_CXX_COMPILER=g++ -G "Unix Makefiles" -B $bin
30+
cd $bin && make clipper_wrap && make lodepng_wrap && make giflib_wrap
8931

90-
cmake $peg_dir -DCMAKE_C_COMPILER=gcc -G "Unix Makefiles" -B $peg_bld
91-
make -C $peg_bld
92-
cp -f "$peg_bld/libturbojpeg${ext}" "$peg_rel/${lib}turbojpeg${ext}"
93-
fi
94-
# removes the object files after the build
95-
rm -rf *.o
96-
fi
97-
done 3< "dependencies/list.txt"
32+
cmake $pvd/dependencies/subprojects/libjpeg-turbo -DCMAKE_CXX_COMPILER=gcc -DCMAKE_CXX_COMPILER=g++ -G "Unix Makefiles" -B $binj
33+
make -C $binj

dependencies/list.txt

Lines changed: 0 additions & 4 deletions
This file was deleted.

0 commit comments

Comments
 (0)