Stripped-down standalone build that runs w/ normal GYP

This commit is contained in:
Nathan Sobo
2012-08-10 15:54:28 -06:00
parent c2c8724ad0
commit c32eef5e92
1331 changed files with 2360 additions and 114246 deletions

View File

@@ -1,10 +0,0 @@
#include <stdio.h>
#ifdef _WIN32
__declspec(dllexport)
#endif
void module_main(void)
{
fprintf(stdout, "Hello from lib1.c\n");
fflush(stdout);
}

View File

@@ -1,10 +0,0 @@
#include <stdio.h>
#ifdef _WIN32
__declspec(dllexport)
#endif
void module_main(void)
{
fprintf(stdout, "Hello from lib2.c\n");
fflush(stdout);
}

View File

@@ -1,55 +0,0 @@
# Copyright (c) 2009 Google Inc. All rights reserved.
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.
{
'target_defaults': {
'conditions': [
['OS=="win"', {
'defines': ['PLATFORM_WIN'],
}],
['OS=="mac"', {
'defines': ['PLATFORM_MAC'],
}],
['OS=="linux"', {
'defines': ['PLATFORM_LINUX'],
# Support 64-bit shared libs (also works fine for 32-bit).
'cflags': ['-fPIC'],
'libraries': ['-ldl'],
}],
],
},
'targets': [
{
'target_name': 'program',
'type': 'executable',
'dependencies': [
'lib1',
'lib2',
],
'sources': [
'program.c',
],
},
{
'target_name': 'lib1',
'type': 'loadable_module',
'product_name': 'lib1',
'product_prefix': '',
'xcode_settings': {'OTHER_LDFLAGS': ['-dynamiclib'], 'MACH_O_TYPE': ''},
'sources': [
'lib1.c',
],
},
{
'target_name': 'lib2',
'product_name': 'lib2',
'product_prefix': '',
'type': 'loadable_module',
'xcode_settings': {'OTHER_LDFLAGS': ['-dynamiclib'], 'MACH_O_TYPE': ''},
'sources': [
'lib2.c',
],
},
],
}

View File

@@ -1,111 +0,0 @@
#include <stdio.h>
#include <stdlib.h>
#if defined(PLATFORM_WIN)
#include <windows.h>
#elif defined(PLATFORM_MAC) || defined(PLATFORM_LINUX)
#include <dlfcn.h>
#include <libgen.h>
#include <string.h>
#include <sys/param.h>
#define MAX_PATH PATH_MAX
#endif
#if defined(PLATFORM_WIN)
#define MODULE_SUFFIX ".dll"
#elif defined(PLATFORM_MAC)
#define MODULE_SUFFIX ".so"
#elif defined(PLATFORM_LINUX)
#define MODULE_SUFFIX ".so"
#endif
typedef void (*module_symbol)(void);
char bin_path[MAX_PATH + 1];
void CallModule(const char* module) {
char module_path[MAX_PATH + 1];
const char* module_function = "module_main";
module_symbol funcptr;
#if defined(PLATFORM_WIN)
HMODULE dl;
char drive[_MAX_DRIVE];
char dir[_MAX_DIR];
if (_splitpath_s(bin_path, drive, _MAX_DRIVE, dir, _MAX_DIR,
NULL, 0, NULL, 0)) {
fprintf(stderr, "Failed to split executable path.\n");
return;
}
if (_makepath_s(module_path, MAX_PATH, drive, dir, module, MODULE_SUFFIX)) {
fprintf(stderr, "Failed to calculate module path.\n");
return;
}
dl = LoadLibrary(module_path);
if (!dl) {
fprintf(stderr, "Failed to open module: %s\n", module_path);
return;
}
funcptr = (module_symbol) GetProcAddress(dl, module_function);
if (!funcptr) {
fprintf(stderr, "Failed to find symbol: %s\n", module_function);
return;
}
funcptr();
FreeLibrary(dl);
#elif defined(PLATFORM_MAC) || defined(PLATFORM_LINUX)
void* dl;
char* path_copy = strdup(bin_path);
char* bin_dir = dirname(path_copy);
int path_size = snprintf(module_path, MAX_PATH, "%s/%s%s", bin_dir, module,
MODULE_SUFFIX);
free(path_copy);
if (path_size < 0 || path_size > MAX_PATH) {
fprintf(stderr, "Failed to calculate module path.\n");
return;
}
module_path[path_size] = 0;
dl = dlopen(module_path, RTLD_LAZY);
if (!dl) {
fprintf(stderr, "Failed to open module: %s\n", module_path);
return;
}
funcptr = dlsym(dl, module_function);
if (!funcptr) {
fprintf(stderr, "Failed to find symbol: %s\n", module_function);
return;
}
funcptr();
dlclose(dl);
#endif
}
int main(int argc, char *argv[])
{
fprintf(stdout, "Hello from program.c\n");
fflush(stdout);
#if defined(PLATFORM_WIN)
if (!GetModuleFileName(NULL, bin_path, MAX_PATH)) {
fprintf(stderr, "Failed to determine executable path.\n");
return;
}
#elif defined(PLATFORM_MAC) || defined(PLATFORM_LINUX)
// Using argv[0] should be OK here since we control how the tests run, and
// can avoid exec and such issues that make it unreliable.
if (!realpath(argv[0], bin_path)) {
fprintf(stderr, "Failed to determine executable path (%s).\n", argv[0]);
return;
}
#endif
CallModule("lib1");
CallModule("lib2");
return 0;
}