Add generator
This commit is contained in:
parent
62eb0d6104
commit
bec996d6ae
2
.gitignore
vendored
Normal file
2
.gitignore
vendored
Normal file
|
@ -0,0 +1,2 @@
|
|||
*.exe
|
||||
*.pdb
|
45
LICENSE
Normal file
45
LICENSE
Normal file
|
@ -0,0 +1,45 @@
|
|||
This software is available as a choice of the following licenses. Choose
|
||||
whichever you prefer.
|
||||
|
||||
===============================================================================
|
||||
ALTERNATIVE 1 - Public Domain (www.unlicense.org)
|
||||
===============================================================================
|
||||
This is free and unencumbered software released into the public domain.
|
||||
|
||||
Anyone is free to copy, modify, publish, use, compile, sell, or distribute this
|
||||
software, either in source code form or as a compiled binary, for any purpose,
|
||||
commercial or non-commercial, and by any means.
|
||||
|
||||
In jurisdictions that recognize copyright laws, the author or authors of this
|
||||
software dedicate any and all copyright interest in the software to the public
|
||||
domain. We make this dedication for the benefit of the public at large and to
|
||||
the detriment of our heirs and successors. We intend this dedication to be an
|
||||
overt act of relinquishment in perpetuity of all present and future rights to
|
||||
this software under copyright law.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
|
||||
ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
||||
WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||
|
||||
For more information, please refer to <http://unlicense.org/>
|
||||
|
||||
===============================================================================
|
||||
ALTERNATIVE 2 - MIT No Attribution
|
||||
===============================================================================
|
||||
Permission is hereby granted, free of charge, to any person obtaining a copy of
|
||||
this software and associated documentation files (the "Software"), to deal in
|
||||
the Software without restriction, including without limitation the rights to
|
||||
use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies
|
||||
of the Software, and to permit persons to whom the Software is furnished to do
|
||||
so.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||
SOFTWARE.
|
17
README.md
Normal file
17
README.md
Normal file
|
@ -0,0 +1,17 @@
|
|||
# dr_libs.jai
|
||||
|
||||
Jai bindings for [dr_libs](https://github.com/mackron/dr_libs)
|
||||
|
||||
## Initial setup
|
||||
|
||||
If you want to build the lib then you'll need the source code. You can do this with: `git submodule update --init --recursive`.
|
||||
In the future if you need to pull in the source submodule again (e.g. the folder got deleted), then run: `git submodule update --recursive`
|
||||
|
||||
## Usage
|
||||
|
||||
Simply import the module. If you're using a static library version then you're set. If you generated a DLL (and new bindings to load it) then you need to copy the DLL from the windows/ folder to the working directory of your exe.
|
||||
|
||||
## TODO
|
||||
|
||||
* Add support for other platforms.
|
||||
|
133
generate.jai
Normal file
133
generate.jai
Normal file
|
@ -0,0 +1,133 @@
|
|||
#!/usr/bin/env jai
|
||||
|
||||
libs_to_include: Libs = Libs.DR_WAV | Libs.DR_FLAC | Libs.DR_MP3; // @consider making this a metaprogram/command line arg?
|
||||
|
||||
Libs :: enum_flags {
|
||||
DR_WAV;
|
||||
DR_FLAC;
|
||||
DR_MP3;
|
||||
}
|
||||
|
||||
AT_COMPILE_TIME :: true;
|
||||
|
||||
COMPILE :: true; // Enable to compile the dr_libs library from source before generating bindings.
|
||||
COMPILE_DEBUG :: false; // Compile a debug or release version of dr_libs
|
||||
|
||||
MAKE_STATIC_LIB :: true;
|
||||
MAKE_DYNAMIC_LIB :: false;
|
||||
|
||||
#assert (MAKE_STATIC_LIB || MAKE_DYNAMIC_LIB) && !(MAKE_STATIC_LIB && MAKE_DYNAMIC_LIB);
|
||||
|
||||
SOURCE_PATH :: "source";
|
||||
|
||||
#if AT_COMPILE_TIME {
|
||||
#run {
|
||||
set_build_options_dc(.{do_output=false});
|
||||
if !generate_bindings() {
|
||||
compiler_set_workspace_status(.FAILED);
|
||||
}
|
||||
}
|
||||
}
|
||||
else {
|
||||
#import "System";
|
||||
|
||||
main :: () {
|
||||
set_working_directory(path_strip_filename(get_path_of_running_executable()));
|
||||
if !generate_bindings() {
|
||||
exit(1);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
generate_bindings :: () -> bool {
|
||||
if libs_to_include == 0 {
|
||||
log_error("You need to specify at least one library for binding generation!\n");
|
||||
return true;
|
||||
}
|
||||
|
||||
// Prepare the source for our needs.
|
||||
{
|
||||
copy_file(tprint("%/dr_wav.h", SOURCE_PATH), tprint("%/dr_wav.c", SOURCE_PATH));
|
||||
copy_file(tprint("%/dr_flac.h", SOURCE_PATH), tprint("%/dr_flac.c", SOURCE_PATH));
|
||||
copy_file(tprint("%/dr_mp3.h", SOURCE_PATH), tprint("%/dr_mp3.c", SOURCE_PATH));
|
||||
}
|
||||
|
||||
src_files: [..] string;
|
||||
extra: [..] string;
|
||||
|
||||
libs_info := type_info(Libs);
|
||||
for libs_info.values {
|
||||
if libs_to_include & cast(Libs)it {
|
||||
name := libs_info.names[it_index];
|
||||
array_add(*src_files, tprint("%/%.c", SOURCE_PATH, to_lower_copy(name)));
|
||||
array_add(*extra, tprint("/D%_IMPLEMENTATION", name));
|
||||
}
|
||||
}
|
||||
|
||||
#if COMPILE {
|
||||
#import "BuildCpp";
|
||||
|
||||
success := false;
|
||||
|
||||
#if OS == .WINDOWS {
|
||||
make_directory_if_it_does_not_exist("windows");
|
||||
|
||||
#if MAKE_DYNAMIC_LIB {
|
||||
success = build_cpp_dynamic_lib("windows/dr_libs", ..src_files, extra = extra, debug=COMPILE_DEBUG);
|
||||
}
|
||||
else {
|
||||
success = build_cpp_static_lib("windows/dr_libs", ..src_files, extra = extra, debug=COMPILE_DEBUG);
|
||||
if success {
|
||||
// Remove existing DLL otherwise the bindings will have a "#library" directive that loads the DLL. The lib version is "#library,no_dll"
|
||||
if file_exists("windows/dr_libs.dll") {
|
||||
deleted := file_delete("windows/dr_libs.dll");
|
||||
if !deleted {
|
||||
log_error("Failed to remove existing dr_libs.dll from the windows/ folder.\n\n");
|
||||
success = false;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
else {
|
||||
log_error("This OS isn't supported yet.\n");
|
||||
}
|
||||
|
||||
if !success return false;
|
||||
}
|
||||
|
||||
output_filename: string;
|
||||
opts: Generate_Bindings_Options;
|
||||
{
|
||||
using opts;
|
||||
|
||||
#if OS == .WINDOWS {
|
||||
array_add(*libpaths, "windows");
|
||||
output_filename = "windows.jai";
|
||||
}
|
||||
else {
|
||||
log_error("This OS isn't supported yet.\n");
|
||||
return false;
|
||||
}
|
||||
|
||||
array_add(*libnames, "dr_libs");
|
||||
array_add(*system_include_paths, GENERATOR_DEFAULT_SYSTEM_INCLUDE_PATH);
|
||||
array_add(*include_paths, SOURCE_PATH);
|
||||
|
||||
source_files = src_files;
|
||||
|
||||
log_stripped_declarations = false; // Set to true if things aren't working...
|
||||
generate_compile_time_struct_checks = true;
|
||||
}
|
||||
return generate_bindings(opts, output_filename);
|
||||
}
|
||||
|
||||
#scope_file
|
||||
|
||||
#import "Basic";
|
||||
#import "Bindings_Generator";
|
||||
#import "Compiler";
|
||||
#import "File";
|
||||
#import "File_Utilities";
|
||||
#import "String";
|
||||
|
13
module.jai
Normal file
13
module.jai
Normal file
|
@ -0,0 +1,13 @@
|
|||
#scope_module
|
||||
|
||||
size_t :: u64;
|
||||
|
||||
#import "Basic";
|
||||
|
||||
#if OS == .WINDOWS {
|
||||
#load "windows.jai";
|
||||
}
|
||||
else {
|
||||
assert(false);
|
||||
}
|
||||
|
3103
windows.jai
Normal file
3103
windows.jai
Normal file
File diff suppressed because it is too large
Load Diff
BIN
windows/dr_libs.lib
Normal file
BIN
windows/dr_libs.lib
Normal file
Binary file not shown.
Loading…
Reference in New Issue
Block a user