Skip to content

Commit 1ed306e

Browse files
committed
Merge pull request #7 from saxbophone/develop
Version v0.5.9
2 parents 6b7b5dc + 2de97bc commit 1ed306e

File tree

7 files changed

+51
-32
lines changed

7 files changed

+51
-32
lines changed

.gitignore

Lines changed: 0 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -30,9 +30,3 @@
3030

3131
# Debug files
3232
*.dSYM/
33-
34-
# Custom executables using names used in Makefile
35-
tests
36-
prepare
37-
generate
38-
render

Makefile

Lines changed: 19 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -9,57 +9,59 @@ INCLUDES=
99
CFLAGS=$(STANDARD) $(OPTIMISE) $(DEBUG) $(INCLUDES)
1010
LIBPNG=-lpng
1111
LIB=saxbospiral.h
12+
OS_NAME=
13+
EXE_SUFFIX=.out
1214

1315
saxbospiral.o: saxbospiral.c $(LIB)
14-
$(CC) $(CFLAGS) -c saxbospiral.c
16+
$(CC) $(CFLAGS) -o saxbospiral$(OS_NAME).o -c saxbospiral.c
1517

1618
tests.o: $(LIB) tests.c
17-
$(CC) $(CFLAGS) -c tests.c
19+
$(CC) $(CFLAGS) -o tests$(OS_NAME).o -c tests.c
1820

1921
tests: saxbospiral.o tests.o
20-
$(CC) $(CFLAGS) -o tests saxbospiral.o tests.o
22+
$(CC) $(CFLAGS) -o tests$(OS_NAME)$(EXE_SUFFIX) saxbospiral$(OS_NAME).o tests$(OS_NAME).o
2123

2224
prepare.o: $(LIB) prepare.c
23-
$(CC) $(CFLAGS) -c prepare.c
25+
$(CC) $(CFLAGS) -o prepare$(OS_NAME).o -c prepare.c
2426

2527
prepare: saxbospiral.o prepare.o
26-
$(CC) $(CFLAGS) -o prepare saxbospiral.o prepare.o
28+
$(CC) $(CFLAGS) -o prepare$(OS_NAME)$(EXE_SUFFIX) saxbospiral$(OS_NAME).o prepare$(OS_NAME).o
2729

2830
generate.o: $(LIB) generate.c
29-
$(CC) $(CFLAGS) -c generate.c
31+
$(CC) $(CFLAGS) -o generate$(OS_NAME).o -c generate.c
3032

3133
generate: saxbospiral.o generate.o
32-
$(CC) $(CFLAGS) -o generate saxbospiral.o generate.o
34+
$(CC) $(CFLAGS) -o generate$(OS_NAME)$(EXE_SUFFIX) saxbospiral$(OS_NAME).o generate$(OS_NAME).o
3335

3436
render.o: $(LIB) render.c
35-
$(CC) $(CFLAGS) -c render.c
37+
$(CC) $(CFLAGS) -o render$(OS_NAME).o -c render.c
3638

3739
render: saxbospiral.o render.o
38-
$(CC) $(CFLAGS) -o render saxbospiral.o render.o $(LIBPNG)
40+
$(CC) $(CFLAGS) -o render$(OS_NAME)$(EXE_SUFFIX) saxbospiral$(OS_NAME).o render$(OS_NAME).o $(LIBPNG)
3941

4042
test-unit: tests
41-
./tests
43+
./tests$(OS_NAME)$(EXE_SUFFIX)
4244

4345
test-func: prepare generate render
4446
@echo "Running Functional Test"
4547
@echo -n "saxbospiral `git describe --abbrev=0`" > message.hex
46-
@./prepare message.hex message.sxp.hex
47-
@./generate message.sxp.hex
48-
@./render message.sxp.hex saxbospiral_test.png
48+
@./prepare$(OS_NAME)$(EXE_SUFFIX) message.hex message.sxp.hex
49+
@./generate$(OS_NAME)$(EXE_SUFFIX) message.sxp.hex
50+
@./render$(OS_NAME)$(EXE_SUFFIX) message.sxp.hex saxbospiral_test.png
4951
@diff saxbospiral.png saxbospiral_test.png
5052
@rm saxbospiral_test.png message.hex message.sxp.hex
5153

5254
logo: prepare generate render
5355
@echo "Generating logo"
5456
@echo -n "saxbospiral `git describe --abbrev=0`" > saxbospiral.hex
55-
@./prepare saxbospiral.hex saxbospiral.sxp
56-
@./generate saxbospiral.sxp
57-
@./render saxbospiral.sxp saxbospiral.png
57+
@./prepare$(OS_NAME)$(EXE_SUFFIX) saxbospiral.hex saxbospiral.sxp
58+
@./generate$(OS_NAME)$(EXE_SUFFIX) saxbospiral.sxp
59+
@./render$(OS_NAME)$(EXE_SUFFIX) saxbospiral.sxp saxbospiral.png
5860
@rm saxbospiral.hex saxbospiral.sxp
5961

6062
build: prepare generate render
6163

6264
clean:
63-
rm -f *.o tests prepare generate render
65+
rm -f *.o *.out *.exe
6466

6567
all: test-unit test-func build

build_all.sh

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
#!/usr/bin/env bash
2+
3+
# NOTE: This file assumes you are running linux and have installed cross-compilers for Windows and OSX.
4+
# I used w64-mingw32-gcc and OSXCROSS (https://github.com/tpoechtrager/osxcross) respectively.
5+
6+
$POSIX_EXTENSION='';
7+
if [[ $USE_POSIX_EXTENSIONS ]]; then
8+
$POSIX_EXTENSION='.out';
9+
fi
10+
11+
make prepare generate tests OS_NAME=_lin64 EXE_SUFFIX=$POSIX_EXTENSION; # linux 64-bit target
12+
make prepare generate tests OPTIMISE=-O3 CC=o32-clang OS_NAME=_osx32 EXE_SUFFIX=$POSIX_EXTENSION; # osx 32-bit target
13+
make prepare generate tests OPTIMISE=-O3 CC=o64-clang OS_NAME=_osx64 EXE_SUFFIX=$POSIX_EXTENSION; # osx 64-bit target
14+
make prepare generate tests OPTIMISE=-O3 CC=i686-w64-mingw32-gcc OS_NAME=_win32 EXE_SUFFIX=.exe; # windows 32-bit target
15+
make prepare generate tests OPTIMISE=-O3 CC=x86_64-w64-mingw32-gcc OS_NAME=_win64 EXE_SUFFIX=.exe; # windows 64-bit target

saxbospiral.c

Lines changed: 11 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -11,10 +11,12 @@ extern "C"{
1111
#endif
1212

1313
const version_t VERSION = {
14-
.major = 0, .minor = 5, .patch = 8,
14+
.major = 0, .minor = 5, .patch = 9,
1515
};
1616

17+
// constants related to how spiral data is packed in files - measured in bytes
1718
const size_t FILE_HEADER_SIZE = 25;
19+
const size_t LINE_T_PACK_SIZE = 4;
1820

1921
// vector direction constants
2022
const vector_t VECTOR_DIRECTIONS[4] = {
@@ -287,7 +289,7 @@ load_spiral(buffer_t buffer) {
287289
spiral_size |= (buffer.bytes[16 + i]) << (8 * (7 - i));
288290
}
289291
// Check that the file data section is large enough for the spiral size
290-
if((buffer.size - FILE_HEADER_SIZE) != (sizeof(line_t) * spiral_size)) {
292+
if((buffer.size - FILE_HEADER_SIZE) != (LINE_T_PACK_SIZE * spiral_size)) {
291293
// this check failed, so return it as it is
292294
return output;
293295
}
@@ -299,18 +301,18 @@ load_spiral(buffer_t buffer) {
299301
for(size_t i = 0; i < spiral_size; i++) {
300302
// direction is stored in 2 most significant bits of each 32-bit sequence
301303
output.lines[i].direction = (
302-
buffer.bytes[FILE_HEADER_SIZE + (i * sizeof(line_t))] >> 6
304+
buffer.bytes[FILE_HEADER_SIZE + (i * LINE_T_PACK_SIZE)] >> 6
303305
);
304306
// length is stored as 30 least significant bits, so we have to unpack it
305307
// handle first byte on it's own as we only need least 6 bits of it
306308
// bit mask and shift 3 bytes to left
307309
output.lines[i].length = (
308-
buffer.bytes[FILE_HEADER_SIZE + (i * sizeof(line_t))] & 0b00111111
310+
buffer.bytes[FILE_HEADER_SIZE + (i * LINE_T_PACK_SIZE)] & 0b00111111
309311
) << 24;
310312
// handle remaining 3 bytes in loop
311313
for(uint8_t j = 0; j < 3; j++) {
312314
output.lines[i].length |= (
313-
buffer.bytes[FILE_HEADER_SIZE + (i * sizeof(line_t)) + 1 + j]
315+
buffer.bytes[FILE_HEADER_SIZE + (i * LINE_T_PACK_SIZE) + 1 + j]
314316
) << (8 * (2 - j));
315317
}
316318
}
@@ -325,7 +327,7 @@ buffer_t
325327
dump_spiral(spiral_t spiral) {
326328
// build output buffer struct, base size on header + spiral size
327329
buffer_t output = {
328-
.size = (FILE_HEADER_SIZE + (sizeof(line_t) * spiral.size)),
330+
.size = (FILE_HEADER_SIZE + (LINE_T_PACK_SIZE * spiral.size)),
329331
};
330332
// allocate memory
331333
output.bytes = calloc(1, output.size);
@@ -348,16 +350,16 @@ dump_spiral(spiral_t spiral) {
348350
// serialise each line in the spiral to 4 bytes, handle first byte first
349351
// map direction to 2 most significant bits
350352
output.bytes[
351-
FILE_HEADER_SIZE + (i * sizeof(line_t))
353+
FILE_HEADER_SIZE + (i * LINE_T_PACK_SIZE)
352354
] = (spiral.lines[i].direction << 6);
353355
// handle first 6 bits of the length
354356
output.bytes[
355-
FILE_HEADER_SIZE + (i * sizeof(line_t))
357+
FILE_HEADER_SIZE + (i * LINE_T_PACK_SIZE)
356358
] |= (spiral.lines[i].length >> 24);
357359
// handle remaining 3 bytes in a loop
358360
for(uint8_t j = 0; j < 3; j++) {
359361
output.bytes[
360-
FILE_HEADER_SIZE + (i * sizeof(line_t)) + 1 + j
362+
FILE_HEADER_SIZE + (i * LINE_T_PACK_SIZE) + 1 + j
361363
] = (uint8_t)(spiral.lines[i].length >> (8 * (2 - j)));
362364
}
363365
}

saxbospiral.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,9 @@ typedef struct version_t {
1717

1818
extern const version_t VERSION;
1919

20+
// constants related to how spiral data is packed in files - measured in bytes
2021
extern const size_t FILE_HEADER_SIZE;
22+
extern const size_t LINE_T_PACK_SIZE;
2123

2224
// type for representing a cartesian direction
2325
typedef uint8_t direction_t;

saxbospiral.png

4 Bytes
Loading

stress.sh

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
#!/usr/bin/env bash
2+
echo -n "TEST" > test.hex;
3+
./prepare test.hex test.sxp.hex;
4+
time for i in {1..1000}; do ./generate test.sxp.hex; done;

0 commit comments

Comments
 (0)