77// Additional exceptions apply. For full license details, see LICENSE.txt or visit:
88// https://alliedmods.net/amxmodx-license
99
10- #include < stdio.h>
11- #if defined(__linux__) | defined(__APPLE__)
10+ #if defined(__linux__) || defined(__APPLE__)
1211 #include < unistd.h>
1312#else
1413 #include < fcntl.h>
1918#include " amxxpc.h"
2019#include " binary.h"
2120#include " zlib.h"
22- #include < stdlib.h>
21+ #include < cstdio>
22+ #include < cstdlib>
23+
24+ #ifdef BUILD_STATIC_AMXXPC
25+ #include < sc.h>
26+ extern " C" void Compile32 (int argc, char ** argv);
27+ #else
28+ #if defined(EMSCRIPTEN)
29+ extern " C" void Compile32 (int argc, char ** argv);
30+ extern " C" int pc_printf (const char * message, ...);
31+ #else
32+ static PRINTF pc_printf = nullptr ;
33+ #endif
34+ #endif
2335
2436#ifdef _MSC_VER
2537 // MSVC8 - replace POSIX functions with ISO C++ conformant ones as they are deprecated
@@ -33,54 +45,51 @@ bool CompressPl(abl* pl);
3345void Pl2Bh (const abl* pl, BinPlugin* bh);
3446void WriteBh (const BinaryWriter* bw, const BinPlugin* bh);
3547
36- #if defined(EMSCRIPTEN)
37- extern " C" void Compile32 (int argc, char ** argv);
38- extern " C" int pc_printf (const char * message, ...);
39- #else
40- static PRINTF pc_printf = nullptr ;
41- #endif
42-
4348int main (const int argc, char ** argv)
4449{
4550 abl pl32;
4651
47- #if defined(EMSCRIPTEN)
52+ #ifndef BUILD_STATIC_AMXXPC
53+ #if defined(EMSCRIPTEN)
4854 COMPILER sc32 = (COMPILER)Compile32;
49- #else
50- #if defined(__linux__)
55+ #else
56+ #if defined(__linux__)
5157 HINSTANCE lib = NULL ;
5258 if (FileExists (" ./amxxpc32.so" )) {
5359 lib = dlmount (" ./amxxpc32.so" );
5460 }
5561 else {
5662 lib = dlmount (" amxxpc32.so" );
5763 }
58- #elif defined(__APPLE__)
64+ #elif defined(__APPLE__)
5965 HINSTANCE lib = dlmount (" amxxpc32.dylib" );
60- #else
66+ #else
6167 const HINSTANCE lib = dlmount (" amxxpc32.dll" );
62- #endif
68+ #endif
6369 if (!lib) {
64- #if defined(__linux__) || defined(__APPLE__)
70+ #if defined(__linux__) || defined(__APPLE__)
6571 printf (" compiler failed to instantiate: %s\n " , dlerror ());
66- #else
72+ #else
6773 printf (" compiler failed to instantiate: %d\n " , GetLastError ());
68- #endif
74+ #endif
6975 exit (EXIT_FAILURE);
7076 }
7177
7278 const auto sc32 = (COMPILER)dlsym (lib, " Compile32" );
7379 pc_printf = (PRINTF)dlsym (lib, " pc_printf" );
74- #endif // EMSCRIPTEN
80+ #endif // EMSCRIPTEN
7581
7682 if (!sc32 || !pc_printf) {
77- #if defined(__linux__) || defined(__APPLE__)
83+ #if defined(__linux__) || defined(__APPLE__)
7884 printf (" compiler failed to link: %p.\n " , sc32);
79- #else
85+ #else
8086 printf (" compiler failed to link: %d.\n " , GetLastError ());
81- #endif
87+ #endif
8288 exit (EXIT_FAILURE);
8389 }
90+ #else
91+ const auto sc32 = (COMPILER)Compile32;
92+ #endif
8493
8594 pc_printf (" AMX Mod X Compiler %s\n\n " , AMXX_VERSION);
8695 pc_printf (" Copyright (c) 1997-2006 ITB CompuPhase\n " );
@@ -175,7 +184,7 @@ int main(const int argc, char** argv)
175184 fclose (fp);
176185 unlink (file);
177186 pc_printf (" Error, failed to write binary\n " );
178- #if !defined EMSCRIPTEN
187+ #if !defined(BUILD_STATIC_AMXXPC) && !defined( EMSCRIPTEN)
179188 dlclose (lib);
180189#endif
181190 exit (EXIT_FAILURE);
@@ -190,7 +199,7 @@ int main(const int argc, char** argv)
190199 and "Compile and upload" buttons in AMXX-Studio doesn't work.
191200 */
192201 pc_printf (" Done.\n " );
193- #if !defined EMSCRIPTEN
202+ #if !defined(BUILD_STATIC_AMXXPC) && !defined( EMSCRIPTEN)
194203 dlclose (lib);
195204#endif
196205
0 commit comments