/* * JoeyDev * Copyright (C) 2018-2023 Scott Duensing * * This software is provided 'as-is', without any express or implied * warranty. In no event will the authors be held liable for any damages * arising from the use of this software. * * Permission is granted to anyone to use this software for any purpose, * including commercial applications, and to alter it and redistribute it * freely, subject to the following restrictions: * * 1. The origin of this software must not be misrepresented; you must not * claim that you wrote the original software. If you use this software * in a product, an acknowledgment in the product documentation would be * appreciated but is not required. * 2. Altered source versions must be plainly marked as such, and must not be * misrepresented as being the original software. * 3. This notice may not be removed or altered from any source distribution. */ #ifndef COMPILER_H #define COMPILER_H #include "libtcc.h" #include "sigsegv.h" #if HAVE_SIGSEGV_RECOVERY #include #include #if defined _WIN32 && !defined __CYGWIN__ // Windows doesn't have sigset_t. typedef int sigset_t; #define sigemptyset(set) #define sigprocmask(how,set,oldset) #endif #endif enum CompilerErrorsE { COMPILER_ERROR_NONE = 0, COMPILER_ERROR_ALREADY_RUNNING, COMPILER_ERROR_IN_CODE, COMPILER_ERROR_CANNOT_RELOCATE, COMPILER_ERROR_NO_ENTRYPOINT, COMPILER_ERROR_SIGHANDLER_FAILED, COMPILER_ERROR_SEGFAULT, COMPILER_ERROR_NO_THREAD, COMPILER_ERROR_COUNT }; struct CompilerContextS; typedef void (*CompilerCallback)(struct CompilerContextS **context); typedef struct CompilerContextS { TCCState *s; pthread_t thread; gboolean isRunning; int compilerResult; int programResult; CompilerCallback callback; void *userData; char *script; int (*RecipeEntryPoint)(char *, char *); char *arg1; char *arg2; char *oldPath; #if HAVE_SIGSEGV_RECOVERY volatile int runPass; jmp_buf runJump; sigset_t runSigSet; #endif } CompilerContextT; void compilerDeleteContext(CompilerContextT **context); gboolean compilerHadError(CompilerContextT **context); CompilerContextT *compilerNewContext(CompilerCallback callback, void *userData); void compilerRunRecipe(CompilerContextT *context, char *recipe, char *input, char *outputPath); #endif // COMPILER_H