|
|
@ -112,6 +112,7 @@ typedef enum { |
|
|
|
OP_REMOVE = 4, // Remove existing example |
|
|
|
OP_VALIDATE = 5, // Validate examples, using [examples_list.txt] as main source by default |
|
|
|
OP_UPDATE = 6, // Validate and update required examples (as far as possible) |
|
|
|
OP_BUILD = 7, // Build example for desktop and web, copy web output |
|
|
|
} rlExampleOperation; |
|
|
|
|
|
|
|
static const char *exCategories[REXM_MAX_EXAMPLE_CATEGORIES] = { "core", "shapes", "textures", "text", "models", "shaders", "audio", "others" }; |
|
|
@ -356,6 +357,29 @@ int main(int argc, char *argv[]) |
|
|
|
|
|
|
|
opCode = OP_UPDATE; |
|
|
|
} |
|
|
|
else if (strcmp(argv[1], "build") == 0) |
|
|
|
{ |
|
|
|
// Build example for PLATFORM_DESKTOP and PLATFORM_WEB |
|
|
|
// NOTE: Build outputs to default directory, usually where the .c file is located, |
|
|
|
// to avoid issues with copying resources (at least on Desktop) |
|
|
|
// Web build files (.html, .wasm, .js, .data) are copied to raylib.com/examples repo |
|
|
|
// Check for valid upcoming argument |
|
|
|
if (argc == 2) LOG("WARNING: No example name provided to build\n"); |
|
|
|
else if (argc > 3) LOG("WARNING: Too many arguments provided\n"); |
|
|
|
else |
|
|
|
{ |
|
|
|
// Verify example exists in collection to be removed |
|
|
|
char *exColInfo = LoadFileText(exCollectionFilePath); |
|
|
|
if (TextFindIndex(exColInfo, argv[2]) != -1) // Example in the collection |
|
|
|
{ |
|
|
|
strcpy(exName, argv[2]); // Register example name for removal |
|
|
|
strncpy(exCategory, exName, TextFindIndex(exName, "_")); |
|
|
|
opCode = OP_BUILD; |
|
|
|
} |
|
|
|
else LOG("WARNING: REMOVE: Example not available in the collection\n"); |
|
|
|
UnloadFileText(exColInfo); |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
switch (opCode) |
|
|
@ -540,25 +564,11 @@ int main(int argc, char *argv[]) |
|
|
|
// Compile to: raylib.com/examples/<category>/<category>_example_name.wasm |
|
|
|
// Compile to: raylib.com/examples/<category>/<category>_example_name.js |
|
|
|
//------------------------------------------------------------------------------------------------ |
|
|
|
// TODO: Avoid platform-specific .BAT file |
|
|
|
/* |
|
|
|
SET RAYLIB_PATH=C:\GitHub\raylib |
|
|
|
SET COMPILER_PATH=C:\raylib\w64devkit\bin |
|
|
|
ENV_SET PATH=$(COMPILER_PATH) |
|
|
|
SET MAKE=mingw32-make |
|
|
|
$(MAKE) -f Makefile.Web shaders/shaders_deferred_render PLATFORM=$(PLATFORM) -B |
|
|
|
|
|
|
|
//int putenv(char *string); // putenv takes a string of the form NAME=VALUE |
|
|
|
//int setenv(const char *envname, const char *envval, int overwrite); |
|
|
|
//int unsetenv(const char *name); //unset variable |
|
|
|
putenv("RAYLIB_DIR=C:\\GitHub\\raylib"); |
|
|
|
putenv("PATH=%PATH%;C:\\raylib\\w64devkit\\bin"); |
|
|
|
setenv("RAYLIB_DIR", "C:\\GitHub\\raylib", 1); |
|
|
|
unsetenv("RAYLIB_DIR"); |
|
|
|
getenv("RAYLIB_DIR"); |
|
|
|
//putenv("RAYLIB_DIR=C:\\GitHub\\raylib"); |
|
|
|
//putenv("PATH=%PATH%;C:\\raylib\\w64devkit\\bin"); |
|
|
|
// WARNING: EMSDK_PATH must be set to proper location when calling from GitHub Actions |
|
|
|
system(TextFormat("make -f Makefile.Web %s/%s PLATFORM=PLATFORM_WEB -B", exCategory, exName)); |
|
|
|
*/ |
|
|
|
system(TextFormat("%s/build_example_web.bat %s/%s", exBasePath, exCategory, exName)); |
|
|
|
//system(TextFormat("%s/build_example_web.bat %s/%s", exBasePath, exCategory, exName)); |
|
|
|
|
|
|
|
// Copy results to web side |
|
|
|
FileCopy(TextFormat("%s/%s/%s.html", exBasePath, exCategory, exName), |
|
|
@ -634,8 +644,9 @@ int main(int argc, char *argv[]) |
|
|
|
FileRemove(TextFormat("%s/%s/%s.js", exWebPath, exCategory, exName)); |
|
|
|
|
|
|
|
// Recompile example (on raylib side) |
|
|
|
// NOTE: Tools requirements: emscripten, w64devkit |
|
|
|
system(TextFormat("%s/build_example_web.bat %s/%s", exBasePath, exRecategory, exRename)); |
|
|
|
// WARNING: EMSDK_PATH must be set to proper location when calling from GitHub Actions |
|
|
|
system(TextFormat("%s/make -f Makefile.Web %s/%s PLATFORM=PLATFORM_WEB -B", exBasePath, exRecategory, exRename)); |
|
|
|
//system(TextFormat("%s/build_example_web.bat %s/%s", exBasePath, exRecategory, exRename)); |
|
|
|
|
|
|
|
// Copy results to web side |
|
|
|
FileCopy(TextFormat("%s/%s/%s.html", exBasePath, exRecategory, exRename), |
|
|
@ -1133,6 +1144,41 @@ int main(int argc, char *argv[]) |
|
|
|
//------------------------------------------------------------------------------------------------ |
|
|
|
|
|
|
|
} break; |
|
|
|
case OP_BUILD: |
|
|
|
{ |
|
|
|
// Build: raylib.com/examples/<category>/<category>_example_name.html |
|
|
|
// Build: raylib.com/examples/<category>/<category>_example_name.data |
|
|
|
// Build: raylib.com/examples/<category>/<category>_example_name.wasm |
|
|
|
// Build: raylib.com/examples/<category>/<category>_example_name.js |
|
|
|
if (strcmp(exCategory, "others") != 0) // Skipping "others" category |
|
|
|
{ |
|
|
|
// Build example for PLATFORM_DESKTOP |
|
|
|
putenv("RAYLIB_DIR=C:\\GitHub\\raylib"); |
|
|
|
putenv("PATH=%PATH%;C:\\raylib\\w64devkit\\bin"); |
|
|
|
putenv("MAKE=mingw32-make"); |
|
|
|
|
|
|
|
ChangeDirectory(exBasePath); |
|
|
|
system(TextFormat("%s %s/%s PLATFORM=PLATFORM_DESKTOP -B", getenv("MAKE"), exCategory, exName)); |
|
|
|
|
|
|
|
// Build example for PLATFORM_WEB |
|
|
|
system(TextFormat("%s -f Makefile.Web %s/%s PLATFORM=PLATFORM_WEB -B", getenv("MAKE"), exCategory, exName)); |
|
|
|
//system(TextFormat("%s/build_example_web.bat %s/%s", exBasePath, exInfo->category, exInfo->name)); |
|
|
|
|
|
|
|
// Update generated .html metadata |
|
|
|
UpdateWebMetadata(TextFormat("%s/%s/%s.html", exBasePath, exCategory, exName), |
|
|
|
TextFormat("%s/%s/%s.c", exBasePath, exCategory, exName)); |
|
|
|
|
|
|
|
// Copy results to web side |
|
|
|
FileCopy(TextFormat("%s/%s/%s.html", exBasePath, exCategory, exName), |
|
|
|
TextFormat("%s/%s/%s.html", exWebPath, exCategory, exName)); |
|
|
|
FileCopy(TextFormat("%s/%s/%s.data", exBasePath, exCategory, exName), |
|
|
|
TextFormat("%s/%s/%s.data", exWebPath, exCategory, exName)); |
|
|
|
FileCopy(TextFormat("%s/%s/%s.wasm", exBasePath, exCategory, exName), |
|
|
|
TextFormat("%s/%s/%s.wasm", exWebPath, exCategory, exName)); |
|
|
|
FileCopy(TextFormat("%s/%s/%s.js", exBasePath, exCategory, exName), |
|
|
|
TextFormat("%s/%s/%s.js", exWebPath, exCategory, exName)); |
|
|
|
} |
|
|
|
} break; |
|
|
|
default: // Help |
|
|
|
{ |
|
|
|
// Supported commands: |
|
|
|