mirror of
https://github.com/krgamestudios/Toy.git
synced 2026-04-15 14:54:07 +10:00
Squashed: Set up a pipeline for repl script testing
It's not ready yet, but considering how much crap this took to get working... I'm done for the night. commit 0f3ee91a0628654a61d47a0c41cd3e39c801b8f9 Author: Kayne Ruse <kayneruse@gmail.com> Date: Sat Sep 28 20:27:44 2024 +1000 I have a titanic patience... but even the titanic sank commit d606e0948b78bc0614c81bbea48abf5ffd9f2194 Author: Kayne Ruse <kayneruse@gmail.com> Date: Sat Sep 28 20:03:57 2024 +1000 Terminated commit 7b3b59321d349a8e361857ee3dbe955ec27cb38c Author: Kayne Ruse <kayneruse@gmail.com> Date: Sat Sep 28 20:00:11 2024 +1000 What the hell? commit 36104b7b5a5d5487c84ab98fec1ae69487fd1a90 Author: Kayne Ruse <kayneruse@gmail.com> Date: Sat Sep 28 19:55:28 2024 +1000 PLEASE commit 0de373d10ad56cba228e9473509a527bf7a3208d Author: Kayne Ruse <kayneruse@gmail.com> Date: Sat Sep 28 19:31:28 2024 +1000 Remember to commit the file! commit 1cb5780e2dc281ecc723b4042cd9ee1f9a3115ab Author: Kayne Ruse <kayneruse@gmail.com> Date: Sat Sep 28 19:24:32 2024 +1000 Please be correct commit 2235d716c1d872db3744905fbd2305e65f96361a Author: Kayne Ruse <kayneruse@gmail.com> Date: Sat Sep 28 18:58:00 2024 +1000 Nearly there commit eabe49130cfdbe93cc3a2056819e267f97304cf1 Author: Kayne Ruse <kayneruse@gmail.com> Date: Sat Sep 28 18:51:04 2024 +1000 Oh green world, don't desert me now commit f0127e2d4947ce47284f2ec72f41a5b6a62121b8 Author: Kayne Ruse <kayneruse@gmail.com> Date: Sat Sep 28 18:42:50 2024 +1000 I'm on a highway to hell... commit f96c0f51a48b080d11d15947940d678ae4f88024 Author: Kayne Ruse <kayneruse@gmail.com> Date: Sat Sep 28 18:41:01 2024 +1000 OK, so there's a lot of security there. commit af3645893a744b7cfa2638bf607373565b8e6ef9 Author: Kayne Ruse <kayneruse@gmail.com> Date: Sat Sep 28 18:33:51 2024 +1000 I'm going to steal the declaration of independence commit e71e1c1b4243e89a580d8b04b4d236ea66ded78c Author: Kayne Ruse <kayneruse@gmail.com> Date: Sat Sep 28 18:27:11 2024 +1000 Show me the money! commit f29ba6eb96c31e9bbcf23b6ece137381f5be4050 Author: Kayne Ruse <kayneruse@gmail.com> Date: Sat Sep 28 18:12:23 2024 +1000 Say hello to my little friend! commit 3a5ee93884b1169abae48923161d7b47b8a45cdd Author: Kayne Ruse <kayneruse@gmail.com> Date: Sat Sep 28 18:06:59 2024 +1000 You had me at hello commit 2901d92f24082173e7119a37baa12a6e968796c8 Author: Kayne Ruse <kayneruse@gmail.com> Date: Sat Sep 28 18:02:49 2024 +1000 You and your little dog too! commit 967194e0593233e17ea7737647dc8042ee3bf0aa Author: Kayne Ruse <kayneruse@gmail.com> Date: Sat Sep 28 17:52:13 2024 +1000 I'll get you my pretty! commit ad48a7aec8ba7ab9e11d23104cd171169cc5ff45 Author: Kayne Ruse <kayneruse@gmail.com> Date: Sat Sep 28 17:50:14 2024 +1000 Do you feel lucky, punk? commit 13fa5c1e96fc7c64f71009f705b8bd69b8dfabf2 Author: Kayne Ruse <kayneruse@gmail.com> Date: Sat Sep 28 17:48:04 2024 +1000 Frankly my dear, I don't give a damn commit 2f15a5a7a71c22bd3f34f619887137c7cd09001b Author: Kayne Ruse <kayneruse@gmail.com> Date: Sat Sep 28 17:20:06 2024 +1000 One of us, one of us, one of us! commit e696d15ea62cb5d965638e04e6f0458b19cf9e28 Author: Kayne Ruse <kayneruse@gmail.com> Date: Sat Sep 28 17:16:04 2024 +1000 Why did it have to be snakes? commit 90631eda6263c30b0643007fc2c7a84e5e08826d Author: Kayne Ruse <kayneruse@gmail.com> Date: Sat Sep 28 17:07:11 2024 +1000 No, I am your father! commit 22e1d61caac3d37ce7fe9fc41bc3b60949fe5a81 Author: Kayne Ruse <kayneruse@gmail.com> Date: Sat Sep 28 17:00:18 2024 +1000 I'm sorry Dave, I can't let you do that commit 9aa17b8b04eb65c6c9bf8b015458f749db97494d Author: Kayne Ruse <kayneruse@gmail.com> Date: Sat Sep 28 16:57:24 2024 +1000 LIVE, DARN YOU, LIVE! commit 1b7f0704d9a2744f10377384ff5f36ea7f61c2da Author: Kayne Ruse <kayneruse@gmail.com> Date: Sat Sep 28 16:52:58 2024 +1000 That's a whole lotta nothing commit fd4001a9eb557afb3d6cbe409c72f7416b08db60 Author: Kayne Ruse <kayneruse@gmail.com> Date: Sat Sep 28 16:44:34 2024 +1000 Here goes nothing commit 7ba09ef0acda2fede952a912a8a1849e9b6c59b7 Author: Kayne Ruse <kayneruse@gmail.com> Date: Sat Sep 28 16:40:28 2024 +1000 Oh, this is gonna be fun, trying to build on a machine I don't even have commit 1155054552ef46ceb4c21117e35f8e5e46b26dbe Author: Kayne Ruse <kayneruse@gmail.com> Date: Sat Sep 28 16:34:06 2024 +1000 There is no repl-gdb in Ba Sing Se commit 5361a31da1d9278972dcbe3c8a0ad59ea6e2ab41 Author: Kayne Ruse <kayneruse@gmail.com> Date: Sat Sep 28 16:31:05 2024 +1000 Changed -R to -rpath commit de982ce2846dd6ffe316648e32a8a04b9d7f242d Author: Kayne Ruse <kayneruse@gmail.com> Date: Sat Sep 28 16:27:14 2024 +1000 Fixed printf() string literal commit 5ddec42af5b46a0c25f64b088a4992433e5a4116 Author: Kayne Ruse <kayneruse@gmail.com> Date: Sat Sep 28 16:24:05 2024 +1000 Workflow experiment commit 28570940b8758fc7f05c957055580e4286a887af Author: Kayne Ruse <kayneruse@gmail.com> Date: Sat Sep 28 16:10:19 2024 +1000 Fixed workflow for macos
This commit is contained in:
34
.github/workflows/continuous-integration-v2.yml
vendored
34
.github/workflows/continuous-integration-v2.yml
vendored
@@ -16,7 +16,8 @@ on:
|
|||||||
|
|
||||||
#CI workflows using a matrix
|
#CI workflows using a matrix
|
||||||
jobs:
|
jobs:
|
||||||
run-test-suites:
|
run-test-cases:
|
||||||
|
continue-on-error: true
|
||||||
strategy:
|
strategy:
|
||||||
matrix:
|
matrix:
|
||||||
platforms:
|
platforms:
|
||||||
@@ -24,14 +25,35 @@ jobs:
|
|||||||
- { os: windows-latest, preinstall: , gdb_skip: false }
|
- { os: windows-latest, preinstall: , gdb_skip: false }
|
||||||
- { os: macos-latest, preinstall: , gdb_skip: true }
|
- { os: macos-latest, preinstall: , gdb_skip: true }
|
||||||
commands:
|
commands:
|
||||||
- make tests
|
- { exec: make tests, gdb: false }
|
||||||
- make tests-gdb
|
- { exec: make tests-gdb, gdb: true }
|
||||||
|
|
||||||
runs-on: ${{ matrix.platforms.os }}
|
runs-on: ${{ matrix.platforms.os }}
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@v4
|
- uses: actions/checkout@v4
|
||||||
- name: Preinstall dependencies
|
- name: Preinstall dependencies
|
||||||
run: ${{ matrix.platforms.preinstall }}
|
run: ${{ matrix.platforms.preinstall }}
|
||||||
- name: run the test suites
|
- name: run the test cases
|
||||||
if: matrix.platforms.gdb_skip != true
|
if: matrix.commands.gdb == false || matrix.platforms.gdb_skip == false
|
||||||
run: ${{ matrix.commands }}
|
run: ${{ matrix.commands.exec }}
|
||||||
|
|
||||||
|
#TODO: hook this up to real script files
|
||||||
|
run-test-repl-scripts:
|
||||||
|
continue-on-error: true
|
||||||
|
needs: run-test-cases
|
||||||
|
strategy:
|
||||||
|
matrix:
|
||||||
|
platforms:
|
||||||
|
- { os: ubuntu-latest }
|
||||||
|
- { os: windows-latest }
|
||||||
|
- { os: macos-latest }
|
||||||
|
commands:
|
||||||
|
- { build: make repl, run: out/repl.exe -f '../scripts/example.toy' }
|
||||||
|
|
||||||
|
runs-on: ${{ matrix.platforms.os }}
|
||||||
|
steps:
|
||||||
|
- uses: actions/checkout@v4
|
||||||
|
- name: compile the repl
|
||||||
|
run: ${{ matrix.commands.build }}
|
||||||
|
- name: run the repl scripts
|
||||||
|
run: ${{ matrix.commands.run }}
|
||||||
|
|||||||
9
makefile
9
makefile
@@ -9,7 +9,7 @@ export TOY_OUTDIR=out
|
|||||||
export TOY_OBJDIR=obj
|
export TOY_OBJDIR=obj
|
||||||
|
|
||||||
#targets
|
#targets
|
||||||
all: tests
|
all:
|
||||||
|
|
||||||
.PHONY: source
|
.PHONY: source
|
||||||
source:
|
source:
|
||||||
@@ -24,7 +24,7 @@ tests: clean
|
|||||||
$(MAKE) -C tests -k
|
$(MAKE) -C tests -k
|
||||||
|
|
||||||
.PHONY: tests-gdb
|
.PHONY: tests-gdb
|
||||||
tests-gdb:
|
tests-gdb: clean
|
||||||
$(MAKE) -C tests all-gdb -k
|
$(MAKE) -C tests all-gdb -k
|
||||||
|
|
||||||
#util targets
|
#util targets
|
||||||
@@ -34,9 +34,6 @@ $(TOY_OUTDIR):
|
|||||||
$(TOY_OBJDIR):
|
$(TOY_OBJDIR):
|
||||||
mkdir $(TOY_OBJDIR)
|
mkdir $(TOY_OBJDIR)
|
||||||
|
|
||||||
$(TOY_OBJDIR)/%.o: $(TOY_SOURCEDIR)/%.c
|
|
||||||
$(CC) -c -o $@ $< $(addprefix -I,$(TOY_SOURCEDIR)) $(CFLAGS)
|
|
||||||
|
|
||||||
#util commands
|
#util commands
|
||||||
.PHONY: clean
|
.PHONY: clean
|
||||||
clean:
|
clean:
|
||||||
@@ -68,5 +65,3 @@ else
|
|||||||
@echo "Deletion failed - what platform is this?"
|
@echo "Deletion failed - what platform is this?"
|
||||||
endif
|
endif
|
||||||
|
|
||||||
.PHONY: rebuild
|
|
||||||
rebuild: clean all
|
|
||||||
|
|||||||
127
repl/main.c
127
repl/main.c
@@ -3,12 +3,72 @@
|
|||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
#include <string.h>
|
#include <string.h>
|
||||||
|
|
||||||
|
//utilities
|
||||||
|
unsigned char* readFile(char* path, int* size) {
|
||||||
|
//open the file
|
||||||
|
FILE* file = fopen(path, "rb");
|
||||||
|
if (file == NULL) {
|
||||||
|
*size = -1; //missing file error
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
//determine the file's length
|
||||||
|
fseek(file, 0L, SEEK_END);
|
||||||
|
*size = ftell(file);
|
||||||
|
rewind(file);
|
||||||
|
|
||||||
|
//make some space
|
||||||
|
unsigned char* buffer = TOY_ALLOCATE(unsigned char, *size + 1);
|
||||||
|
if (buffer == NULL) {
|
||||||
|
fclose(file);
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
if (fread(buffer, sizeof(unsigned char), *size, file) < *size) {
|
||||||
|
fclose(file);
|
||||||
|
*size = -2; //singal a read error
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
fclose(file);
|
||||||
|
|
||||||
|
buffer[(*size)++] = '\0';
|
||||||
|
return buffer;
|
||||||
|
}
|
||||||
|
|
||||||
|
int dir(char* dest, const char* src) {
|
||||||
|
//extract the directory from src, and store it in dest
|
||||||
|
|
||||||
|
#if defined(_WIN32) || defined(_WIN64)
|
||||||
|
char* p = strrchr(src, '\\');
|
||||||
|
#else
|
||||||
|
char* p = strrchr(src, '/');
|
||||||
|
#endif
|
||||||
|
|
||||||
|
int len = p != NULL ? p - src + 1 : 0;
|
||||||
|
strncpy(dest, src, len);
|
||||||
|
dest[len] = '\0';
|
||||||
|
|
||||||
|
return len;
|
||||||
|
}
|
||||||
|
|
||||||
|
#define APPEND(dest, src) \
|
||||||
|
memcpy((dest) + (strlen(dest)), (src), strlen((src)));
|
||||||
|
|
||||||
|
#if defined(_WIN32) || defined(_WIN64)
|
||||||
|
#define FLIPSLASH(str) for (int i = 0; str[i]; i++) str[i] = str[i] == '/' ? '\\' : str[i];
|
||||||
|
#else
|
||||||
|
#define FLIPSLASH(str) for (int i = 0; str[i]; i++) str[i] = str[i] == '\\' ? '/' : str[i];
|
||||||
|
#endif
|
||||||
|
|
||||||
//handle command line arguments
|
//handle command line arguments
|
||||||
typedef struct CmdLine {
|
typedef struct CmdLine {
|
||||||
bool error;
|
bool error;
|
||||||
bool help;
|
bool help;
|
||||||
bool version;
|
bool version;
|
||||||
const char* infile;
|
char* infile;
|
||||||
|
int infileLength;
|
||||||
} CmdLine;
|
} CmdLine;
|
||||||
|
|
||||||
void usageCmdLine(int argc, const char* argv[]) {
|
void usageCmdLine(int argc, const char* argv[]) {
|
||||||
@@ -46,11 +106,11 @@ freely, subject to the following restrictions:\n\
|
|||||||
misrepresented as being the original software.\n\
|
misrepresented as being the original software.\n\
|
||||||
3. This notice may not be removed or altered from any source distribution.\n\n";
|
3. This notice may not be removed or altered from any source distribution.\n\n";
|
||||||
|
|
||||||
printf(license);
|
printf("%s",license);
|
||||||
}
|
}
|
||||||
|
|
||||||
CmdLine parseCmdLine(int argc, const char* argv[]) {
|
CmdLine parseCmdLine(int argc, const char* argv[]) {
|
||||||
CmdLine cmd = { .error = false, .help = false, .version = false, .infile = NULL };
|
CmdLine cmd = { .error = false, .help = false, .version = false, .infile = NULL, .infileLength = 0 };
|
||||||
|
|
||||||
for (int i = 1; i < argc; i++) {
|
for (int i = 1; i < argc; i++) {
|
||||||
if (!strcmp(argv[i], "-h") || !strcmp(argv[i], "--help")) {
|
if (!strcmp(argv[i], "-h") || !strcmp(argv[i], "--help")) {
|
||||||
@@ -66,7 +126,18 @@ CmdLine parseCmdLine(int argc, const char* argv[]) {
|
|||||||
cmd.error = true;
|
cmd.error = true;
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
cmd.infile = argv[++i];
|
if (cmd.infile != NULL) { //don't leak
|
||||||
|
TOY_FREE_ARRAY(char, cmd.infile, strlen(cmd.infile));
|
||||||
|
}
|
||||||
|
|
||||||
|
i++;
|
||||||
|
|
||||||
|
//total space to reserve - it's actually longer than needed, due to the exe name being removed
|
||||||
|
cmd.infileLength = strlen(argv[0]) + strlen(argv[i]);
|
||||||
|
cmd.infile = TOY_ALLOCATE(char, cmd.infileLength);
|
||||||
|
dir(cmd.infile, argv[0]);
|
||||||
|
APPEND(cmd.infile, argv[i]);
|
||||||
|
FLIPSLASH(cmd.infile);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -78,49 +149,6 @@ CmdLine parseCmdLine(int argc, const char* argv[]) {
|
|||||||
return cmd;
|
return cmd;
|
||||||
}
|
}
|
||||||
|
|
||||||
//utilities
|
|
||||||
unsigned char* readFile(const char* path, int* size) {
|
|
||||||
//open the file
|
|
||||||
FILE* file = fopen(path, "rb");
|
|
||||||
if (file == NULL) {
|
|
||||||
*size = -1; //missing file error
|
|
||||||
return NULL;
|
|
||||||
}
|
|
||||||
|
|
||||||
//determine the file's length
|
|
||||||
fseek(file, 0L, SEEK_END);
|
|
||||||
*size = ftell(file);
|
|
||||||
rewind(file);
|
|
||||||
|
|
||||||
//make some space
|
|
||||||
unsigned char* buffer = TOY_ALLOCATE(unsigned char, *size);
|
|
||||||
if (buffer == NULL) {
|
|
||||||
fclose(file);
|
|
||||||
return NULL;
|
|
||||||
}
|
|
||||||
|
|
||||||
//
|
|
||||||
if (fread(buffer, sizeof(unsigned char), *size, file) < *size) {
|
|
||||||
fclose(file);
|
|
||||||
*size = -2; //singal a read error
|
|
||||||
return NULL;
|
|
||||||
}
|
|
||||||
|
|
||||||
fclose(file);
|
|
||||||
return buffer;
|
|
||||||
}
|
|
||||||
|
|
||||||
void dir(char* dest, const char* src) {
|
|
||||||
//extract the directory from src, and store it in dest
|
|
||||||
const char* p = strrchr(src, '/');
|
|
||||||
int len = p != NULL ? p - src + 1 : 0;
|
|
||||||
strncpy(dest, src, len);
|
|
||||||
dest[len] = '\0';
|
|
||||||
}
|
|
||||||
|
|
||||||
#define APPEND(dest, src) \
|
|
||||||
sprintf(dest + strlen(dest), src)
|
|
||||||
|
|
||||||
//main file
|
//main file
|
||||||
int main(int argc, const char* argv[]) {
|
int main(int argc, const char* argv[]) {
|
||||||
CmdLine cmd = parseCmdLine(argc, argv);
|
CmdLine cmd = parseCmdLine(argc, argv);
|
||||||
@@ -139,6 +167,10 @@ int main(int argc, const char* argv[]) {
|
|||||||
int size;
|
int size;
|
||||||
unsigned char* source = readFile(cmd.infile, &size);
|
unsigned char* source = readFile(cmd.infile, &size);
|
||||||
|
|
||||||
|
TOY_FREE_ARRAY(char, cmd.infile, cmd.infileLength); //clean this up, since it's no longer needed
|
||||||
|
cmd.infile = NULL;
|
||||||
|
cmd.infileLength = 0;
|
||||||
|
|
||||||
//check the file
|
//check the file
|
||||||
if (source == NULL) {
|
if (source == NULL) {
|
||||||
if (size == 0) {
|
if (size == 0) {
|
||||||
@@ -225,5 +257,4 @@ int main(int argc, const char* argv[]) {
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
//TODO: simple and consistent way to print an AST and Toy_Value
|
//TODO: simple and consistent way to print an AST and Toy_Value
|
||||||
@@ -2,7 +2,7 @@
|
|||||||
CC=gcc
|
CC=gcc
|
||||||
CFLAGS+=-g -Wall -Werror -Wno-unused-parameter -Wno-unused-function -Wno-unused-variable
|
CFLAGS+=-g -Wall -Werror -Wno-unused-parameter -Wno-unused-function -Wno-unused-variable
|
||||||
LIBS+=-lm -lToy
|
LIBS+=-lm -lToy
|
||||||
LDFLAGS+=-Wl,-R -Wl,'$$ORIGIN'
|
LDFLAGS+=-Wl,-rpath,'$$ORIGIN'
|
||||||
|
|
||||||
#directories
|
#directories
|
||||||
REPL_ROOTDIR=..
|
REPL_ROOTDIR=..
|
||||||
@@ -18,10 +18,10 @@ REPL_OBJFILES=$(addprefix $(REPL_OBJDIR)/,$(notdir $(REPL_REPLFILES:.c=.o)))
|
|||||||
REPL_TARGETNAME=repl.exe
|
REPL_TARGETNAME=repl.exe
|
||||||
|
|
||||||
#linker fix
|
#linker fix
|
||||||
LDFLAGS+=-L$(realpath $(shell pwd)/$(REPL_OUTDIR))
|
LDFLAGS+=-L$(realpath $(REPL_OUTDIR))
|
||||||
|
|
||||||
#build the object files, compile the test cases, and run
|
#build the object files, compile the test cases, and run
|
||||||
all: clean build link
|
all: build link
|
||||||
|
|
||||||
#targets for each step
|
#targets for each step
|
||||||
.PHONY: build
|
.PHONY: build
|
||||||
@@ -43,6 +43,12 @@ $(REPL_OBJDIR)/%.o: $(REPL_REPLDIR)/%.c
|
|||||||
|
|
||||||
$(REPL_OUTDIR)/$(REPL_TARGETNAME): $(REPL_OBJFILES)
|
$(REPL_OUTDIR)/$(REPL_TARGETNAME): $(REPL_OBJFILES)
|
||||||
$(CC) -DTOY_IMPORT $(CFLAGS) -o $@ $(REPL_OBJFILES) $(LDFLAGS) $(LIBS)
|
$(CC) -DTOY_IMPORT $(CFLAGS) -o $@ $(REPL_OBJFILES) $(LDFLAGS) $(LIBS)
|
||||||
|
ifeq ($(shell uname),Darwin) #dylib fix
|
||||||
|
otool -L $@
|
||||||
|
install_name_tool -add_rpath @executable_path/. $@
|
||||||
|
install_name_tool -change ../out/libToy.dylib @executable_path/libToy.dylib $@
|
||||||
|
otool -L $@
|
||||||
|
endif
|
||||||
|
|
||||||
#util commands
|
#util commands
|
||||||
.PHONY: clean
|
.PHONY: clean
|
||||||
|
|||||||
@@ -20,21 +20,21 @@ SRC_TARGETNAME=Toy
|
|||||||
#SRC_LIBLINE is a fancy way of making the linker work correctly
|
#SRC_LIBLINE is a fancy way of making the linker work correctly
|
||||||
ifeq ($(shell uname),Linux)
|
ifeq ($(shell uname),Linux)
|
||||||
SRC_TARGETEXT=.so
|
SRC_TARGETEXT=.so
|
||||||
SRC_LIBLINE=-Wl,-rpath,. -Wl,--out-implib=$(SRC_OUTDIR)/lib$(SRC_TARGETNAME).a -Wl,--whole-archive $(SRC_OBJFILES) -Wl,--no-whole-archive
|
SRC_LIBLINE=-shared -Wl,-rpath,. -Wl,--out-implib=$(SRC_OUTDIR)/lib$(SRC_TARGETNAME).a -Wl,--whole-archive $(SRC_OBJFILES) -Wl,--no-whole-archive
|
||||||
CFLAGS+=-fPIC
|
CFLAGS+=-fPIC
|
||||||
# else ifeq ($(OS),Windows_NT)
|
else ifeq ($(OS),Windows_NT)
|
||||||
# SRC_TARGETEXT=.dll
|
SRC_TARGETEXT=.dll
|
||||||
# SRC_LIBLINE=-Wl,-rpath,. -Wl,--out-implib=$(SRC_OUTDIR)/lib$(OUTNAME).dll.a -Wl,--export-all-symbols -Wl,--enable-auto-import -Wl,--whole-archive $(SRC_OBJFILES) -Wl,--no-whole-archive
|
SRC_LIBLINE=-shared -Wl,-rpath,. -Wl,--out-implib=$(SRC_OUTDIR)/lib$(SRC_TARGETNAME).a -Wl,--whole-archive $(SRC_OBJFILES) -Wl,--no-whole-archive -Wl,--export-all-symbols -Wl,--enable-auto-import
|
||||||
# else ifeq ($(shell uname),Darwin)
|
else ifeq ($(shell uname),Darwin)
|
||||||
# SRC_TARGETEXT=.dylib
|
SRC_TARGETEXT=.dylib
|
||||||
# SRC_LIBLINE=$(SRC_OBJFILES)
|
SRC_LIBLINE=-shared -Wl,-rpath,. $(SRC_OBJFILES)
|
||||||
else
|
else
|
||||||
@echo "Platform test failed - what platform is this?"
|
@echo "Platform test failed - what platform is this?"
|
||||||
exit 1
|
exit 1
|
||||||
endif
|
endif
|
||||||
|
|
||||||
#build the object files, compile the test cases, and run
|
#build the object files, compile the test cases, and run
|
||||||
all: clean build link
|
all: build link
|
||||||
|
|
||||||
#targets for each step
|
#targets for each step
|
||||||
.PHONY: build
|
.PHONY: build
|
||||||
@@ -42,7 +42,7 @@ build: $(SRC_OUTDIR) $(SRC_OBJDIR) $(SRC_OBJFILES)
|
|||||||
|
|
||||||
.PHONY: link
|
.PHONY: link
|
||||||
link: $(SRC_OUTDIR)
|
link: $(SRC_OUTDIR)
|
||||||
$(CC) -DTOY_EXPORT $(CFLAGS) -shared -o $(SRC_OUTDIR)/lib$(SRC_TARGETNAME)$(SRC_TARGETEXT) $(SRC_LIBLINE)
|
$(CC) -DTOY_EXPORT $(CFLAGS) -o $(SRC_OUTDIR)/lib$(SRC_TARGETNAME)$(SRC_TARGETEXT) $(SRC_LIBLINE)
|
||||||
|
|
||||||
#util targets
|
#util targets
|
||||||
$(SRC_OUTDIR):
|
$(SRC_OUTDIR):
|
||||||
|
|||||||
Reference in New Issue
Block a user