mirror of https://github.com/bjornbytes/lovr.git
Convert Tupfile to Lua;
This commit is contained in:
parent
39dca2f093
commit
ecd7769ba0
98
Tupfile
98
Tupfile
|
@ -1,98 +0,0 @@
|
|||
include_rules
|
||||
|
||||
# core
|
||||
ifneq (@(PICO),y)
|
||||
SRC += src/main.c
|
||||
SRC += src/core/os_$(PLATFORM).c
|
||||
endif
|
||||
SRC += src/core/util.c
|
||||
SRC += src/core/fs.c
|
||||
SRC += src/core/map.c
|
||||
SRC += src/core/zip.c
|
||||
|
||||
# modules
|
||||
SRC_@(AUDIO) += src/modules/audio/audio.c
|
||||
SRC_@(AUDIO) += src/modules/audio/spatializer_simple.c
|
||||
SRC_@(AUDIO)@(STEAM_AUDIO) += src/modules/audio/spatializer_phonon.c
|
||||
SRC_@(AUDIO)@(OCULUS_AUDIO) += src/modules/audio/spatializer_oculus.c
|
||||
SRC_@(DATA) += src/modules/data/*.c
|
||||
SRC_@(EVENT) += src/modules/event/*.c
|
||||
SRC_@(FILESYSTEM) += src/modules/filesystem/*.c
|
||||
SRC_@(GRAPHICS) += src/modules/graphics/*.c
|
||||
SRC_@(HEADSET) += src/modules/headset/headset.c
|
||||
SRC_@(HEADSET)@(SIMULATOR) += src/modules/headset/headset_desktop.c
|
||||
SRC_@(HEADSET)@(OPENVR) += src/modules/headset/headset_openvr.c
|
||||
SRC_@(HEADSET)@(OPENXR) += src/modules/headset/headset_openxr.c
|
||||
SRC_@(HEADSET)@(OCULUS) += src/modules/headset/headset_oculus.c
|
||||
SRC_@(HEADSET)@(VRAPI) += src/modules/headset/headset_vrapi.c
|
||||
SRC_@(HEADSET)@(PICO) += src/modules/headset/headset_pico.c
|
||||
SRC_@(HEADSET)@(WEBXR) += src/modules/headset/headset_webxr.c
|
||||
SRC_@(MATH) += src/modules/math/*.c
|
||||
SRC_@(PHYSICS) += src/modules/physics/*.c
|
||||
SRC_@(SYSTEM) += src/modules/system/*.c
|
||||
SRC_@(THREAD) += src/modules/thread/*.c
|
||||
SRC_@(TIMER) += src/modules/timer/*.c
|
||||
|
||||
# lib
|
||||
SRC += src/lib/stb/*.c
|
||||
SRC_@(DATA) += src/lib/jsmn/jsmn.c
|
||||
SRC_@(DATA) += src/lib/minimp3/minimp3.c
|
||||
SRC_@(GRAPHICS) += src/lib/glad/glad.c
|
||||
SRC_@(AUDIO)@(DATA) += src/lib/miniaudio/miniaudio.c
|
||||
SRC_@(MATH) += src/lib/noise1234/noise1234.c
|
||||
SRC_@(THREAD) += src/lib/tinycthread/tinycthread.c
|
||||
|
||||
# api
|
||||
SRC += src/api/api.c
|
||||
SRC += src/api/l_lovr.c
|
||||
SRC_@(AUDIO) += src/api/l_audio*.c
|
||||
SRC_@(DATA) += src/api/l_data*.c
|
||||
SRC_@(EVENT) += src/api/l_event*.c
|
||||
SRC_@(FILESYSTEM) += src/api/l_filesystem*.c
|
||||
SRC_@(GRAPHICS) += src/api/l_graphics*.c
|
||||
SRC_@(HEADSET) += src/api/l_headset*.c
|
||||
SRC_@(MATH) += src/api/l_math*.c
|
||||
SRC_@(PHYSICS) += src/api/l_physics*.c
|
||||
SRC_@(SYSTEM) += src/api/l_system*.c
|
||||
SRC_@(THREAD) += src/api/l_thread*.c
|
||||
SRC_@(TIMER) += src/api/l_timer*.c
|
||||
|
||||
# resources
|
||||
RES += src/resources/boot.lua
|
||||
RES += src/resources/VarelaRound.ttf
|
||||
RES_@(OPENVR) += src/resources/*.json
|
||||
SRC_@(GRAPHICS) += src/resources/shaders.c
|
||||
|
||||
## build:
|
||||
# 1 [XD] resources -> bin headers
|
||||
# 2 [CC] compile .c -> .o
|
||||
# 3 [LD] link .o -> exe
|
||||
# 4 [CP] copy external libs -> libs folder
|
||||
: foreach $(RES) $(RES_y) |> !xd |> %f.h
|
||||
: foreach $(SRC) $(SRC_y) $(SRC_yy) | src/resources/*.h |> !cc |> .obj/%B.o {obj}
|
||||
: {obj} |> !ld |> bin/$(PREFIX)lovr$(SUFFIX) | $(EXTRAS) $(EXTRAS_y)
|
||||
: foreach $(LIBS) |> !cp |> $(LIB)/%b
|
||||
|
||||
# APK
|
||||
ifeq ($(PLATFORM),android)
|
||||
JAVA = src/resources/Activity.java
|
||||
CLASS = org/lovr/app/Activity.class
|
||||
JAR = bin/lovr.jar
|
||||
DEX = bin/apk/classes.dex
|
||||
MANIFEST = bin/AndroidManifest.xml
|
||||
|
||||
: src/resources/$(ACTIVITY_y).java |> !cp |> $(JAVA)
|
||||
: $(ANDROID_MANIFEST_y) |> !cp |> $(MANIFEST)
|
||||
|
||||
# java -> class -> jar -> dex
|
||||
: $(JAVA) |> ^ JAVAC %b^ javac -classpath $(CLASSPATH) -d bin %f |> bin/$(CLASS)
|
||||
: bin/$(CLASS) |> ^ JAR %b^ jar -cf %o -C bin $(CLASS) |> $(JAR)
|
||||
: $(JAR) $(EXTRA_JARS) |> !dx |> $(DEX)
|
||||
|
||||
# aapt
|
||||
: $(MANIFEST) | $(LIB)/*.so $(DEX) |> ^ AAPT %b^ aapt package $(PACKAGE_RENAME) -F %o -M %f -0 so -I $(ANDROID_JAR) $(ANDROID_ASSETS) bin/apk |> bin/.lovr.unaligned.apk
|
||||
|
||||
# align n sign
|
||||
: bin/.lovr.unaligned.apk |> !zipalign |> bin/.lovr.unsigned.apk
|
||||
: bin/.lovr.unsigned.apk |> !apksigner |> bin/lovr.apk | bin/lovr.apk.idsig
|
||||
endif
|
|
@ -0,0 +1,487 @@
|
|||
config = {
|
||||
target = nil,
|
||||
debug = true,
|
||||
optimize = false,
|
||||
supercharge = false,
|
||||
sanitize = false,
|
||||
strict = false,
|
||||
luajit = false,
|
||||
modules = {
|
||||
audio = true,
|
||||
data = true,
|
||||
event = true,
|
||||
filesystem = true,
|
||||
graphics = true,
|
||||
headset = true,
|
||||
math = true,
|
||||
physics = true,
|
||||
system = true,
|
||||
thread = true,
|
||||
timer = true
|
||||
},
|
||||
headsets = {
|
||||
desktop = true,
|
||||
openvr = false,
|
||||
openxr = false,
|
||||
oculus = false,
|
||||
vrapi = false,
|
||||
pico = false,
|
||||
webxr = false
|
||||
},
|
||||
spatializers = {
|
||||
simple = true,
|
||||
oculus = false,
|
||||
phonon = false
|
||||
},
|
||||
android = {
|
||||
sdk = nil,
|
||||
ndk = nil,
|
||||
version = nil,
|
||||
buildtoolsversion = nil,
|
||||
keystore = nil,
|
||||
keystorepass = nil,
|
||||
manifest = nil,
|
||||
package = nil,
|
||||
project = nil
|
||||
}
|
||||
}
|
||||
|
||||
---> setup
|
||||
|
||||
target = config.target or tup.getconfig('TUP_PLATFORM')
|
||||
if target == 'macosx' then target = 'macos' end
|
||||
|
||||
cc = 'clang'
|
||||
cxx = 'clang++'
|
||||
|
||||
cflags = {
|
||||
'-std=c99',
|
||||
'-pedantic',
|
||||
'-Wall',
|
||||
'-Wextra',
|
||||
config.strict and '-Werror' or '',
|
||||
'-Wno-unused-parameter',
|
||||
'-fvisibility=hidden',
|
||||
'-Isrc',
|
||||
'-Isrc/modules',
|
||||
'-Isrc/lib/stdatomic',
|
||||
}
|
||||
|
||||
bin = target == 'android' and 'bin/apk/lib/arm64-v8a' or 'bin'
|
||||
lflags = '-L' .. bin
|
||||
|
||||
base_flags = {
|
||||
config.debug and '-g' or '',
|
||||
config.optimize and '-Os' or '',
|
||||
config.supercharge and '-flto' or '',
|
||||
config.sanitize and '-fsanitize=address,undefined' or '',
|
||||
}
|
||||
|
||||
if target == 'win32' then
|
||||
cflags += '-DLOVR_GL'
|
||||
cflags += '-D_CRT_SECURE_NO_WARNINGS'
|
||||
cflags += '-DWINVER=0x0600' -- Vista
|
||||
cflags += '-D_WIN32_WINNT=0x0600'
|
||||
lflags += '-lshell32 -lole32 -luuid'
|
||||
lflags += config.debug and '-Wl,--subsystem,console' or '-Wl,--subsystem,windows'
|
||||
if not cc:match('mingw') then
|
||||
extra_outputs += { 'bin/lovr.lib', 'bin/lovr.exp' }
|
||||
if config.debug then
|
||||
extra_outputs += { 'bin/lovr.pdb', 'bin/lovr.ilk' }
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
if target == 'macos' then
|
||||
cflags += '-DLOVR_GL'
|
||||
lflags += '-Wl,-rpath,@executable_path'
|
||||
lflags += '-lobjc'
|
||||
end
|
||||
|
||||
if target == 'linux' then
|
||||
cflags += '-DLOVR_GL'
|
||||
cflags += '-D_POSIX_C_SOURCE=200809L'
|
||||
lflags += '-lm -lpthread -ldl'
|
||||
lflags += '-Wl,-rpath,\\$ORIGIN'
|
||||
end
|
||||
|
||||
if target == 'wasm' then
|
||||
cc = 'emcc'
|
||||
cxx = 'em++'
|
||||
cflags += '-DLOVR_WEBGL'
|
||||
cflags += '-D_POSIX_C_SOURCE=200809L'
|
||||
lflags += '-s USE_WEBGL2'
|
||||
lflags += '-s FORCE_FILESYSTEM'
|
||||
lflags += ([[-s EXPORTED_FUNCTIONS="[
|
||||
'_main','_lovrDestroy','_webxr_attach','_webxr_detach','_lovrCanvasCreateFromHandle',
|
||||
'_lovrCanvasDestroy','_lovrGraphicsSetBackbuffer','_lovrGraphicsSetViewMatrix',
|
||||
'_lovrGraphicsSetProjection'
|
||||
]"]]):gsub('\n', '')
|
||||
if config.headsets.webxr then
|
||||
lflags += '--js-library src/resources/webxr.js'
|
||||
end
|
||||
lflags += '--shell-file src/resources/lovr.html'
|
||||
extra_outputs += { 'bin/lovr.js', 'bin/lovr.wasm' }
|
||||
if config.modules.thread then
|
||||
cflags += '-s USE_PTHREADS=1'
|
||||
lflags += '-s USE_PTHREADS=1'
|
||||
extra_outputs += 'bin/lovr.worker.js'
|
||||
end
|
||||
end
|
||||
|
||||
if target == 'android' then
|
||||
assert(config.headsets.vrapi or config.headsets.pico or config.headsets.openxr, 'Please enable vrapi, pico, or openxr')
|
||||
hosts = { win32 = 'windows-x86_64', macos = 'darwin-x86_64', linux = 'linux-x86_64' }
|
||||
host = hosts[tup.getconfig('TUP_PLATFORM')]
|
||||
cc = ('%s/toolchains/llvm/prebuilt/%s/bin/clang'):format(config.android.ndk, host)
|
||||
cxx = cc .. '++'
|
||||
base_flags += '--target=aarch64-linux-android' .. config.android.version
|
||||
cflags += '-DLOVR_GLES'
|
||||
cflags += '-D_POSIX_C_SOURCE=200809L'
|
||||
cflags += '-I' .. config.android.ndk .. '/sources/android/native_app_glue'
|
||||
lflags += '-shared -landroid -lEGL -lGLESv3'
|
||||
end
|
||||
|
||||
overrides = {
|
||||
glad = '-Wno-pedantic',
|
||||
os_android = '-Wno-format-pedantic',
|
||||
openvr = '-Wno-unused-variable -Wno-typedef-redefinition -Wno-pedantic',
|
||||
vrapi = '-Wno-c11-extensions -Wno-gnu-empty-initializer -Wno-pedantic',
|
||||
miniaudio = '-Wno-unused-function',
|
||||
}
|
||||
|
||||
for file, override in pairs(overrides) do
|
||||
_G['cflags_' .. file] = override
|
||||
end
|
||||
|
||||
---> deps
|
||||
|
||||
local function lib(name)
|
||||
return (target == 'win32' and '$(bin)/%s.dll' or '$(bin)/lib%s.so'):format(name)
|
||||
end
|
||||
|
||||
local function copy(from, to)
|
||||
tup.rule(from, '^ CP %b^ cp %f %o', to)
|
||||
end
|
||||
|
||||
if config.luajit then
|
||||
if type(config.luajit) ~= 'string' then
|
||||
error('Sorry, building LuaJIT is not supported yet. However, you can set config.luajit to a path to a folder containing the LuaJIT library.')
|
||||
end
|
||||
cflags += '-Ideps/luajit/src'
|
||||
lflags += '-L' .. config.luajit
|
||||
lflags += '-lluajit'
|
||||
else
|
||||
cflags += '-Ideps/lua'
|
||||
lflags += '-llua'
|
||||
lua_cflags += '-fPIC'
|
||||
lua_cflags += '-Wno-empty-body'
|
||||
lua_lflags += '-shared'
|
||||
lua_lflags += '-lm'
|
||||
lua_src = {
|
||||
'lapi.c', 'lauxlib.c', 'lbaselib.c', 'lcode.c', 'ldblib.c', 'ldebug.c', 'ldo.c', 'ldump.c',
|
||||
'lfunc.c', 'lgc.c', 'linit.c', 'liolib.c', 'llex.c', 'lmathlib.c', 'lmem.c', 'loadlib.c',
|
||||
'lobject.c', 'lopcodes.c', 'loslib.c', 'lparser.c', 'lstate.c', 'lstring.c', 'lstrlib.c',
|
||||
'ltable.c', 'ltablib.c', 'ltm.c', 'lundump.c', 'lvm.c', 'lzio.c'
|
||||
}
|
||||
for i = 1, #lua_src do lua_src[i] = 'deps/lua/' .. lua_src[i] end
|
||||
tup.foreach_rule(lua_src, '^ CC lua/%b^ $(cc) $(base_flags) $(lua_cflags) -c %f -o %o', '.obj/lua/%B.o')
|
||||
tup.rule('.obj/lua/*.o', '^ LD %o^ $(cc) $(base_flags) -o %o %f $(lua_lflags)', lib('lua'))
|
||||
end
|
||||
|
||||
if target == 'win32' or target == 'macos' or target == 'linux' then
|
||||
cflags += '-Ideps/glfw/include'
|
||||
lflags += '-lglfw'
|
||||
|
||||
glfw_cflags += '-fPIC'
|
||||
glfw_cflags += ({ win32 = '-D_GLFW_WIN32', macos = '-D_GLFW_COCOA', linux = '-D_GLFW_X11' })[target]
|
||||
glfw_src += { 'init.c', 'context.c', 'input.c', 'monitor.c', 'vulkan.c', 'window.c' }
|
||||
glfw_src += ({
|
||||
win32 = { 'win32*.c', 'wgl*.c', 'egl*.c', 'osmesa*.c' },
|
||||
macos = { 'cocoa*.c', 'posix*.c' },
|
||||
linux = { 'x11*.c', 'xkb*.c', 'posix*.c', 'glx*.c', 'egl*.c', 'linux*.c', 'osmesa*.c' }
|
||||
})[target]
|
||||
for i = 1, #glfw_src do glfw_src[i] = 'deps/glfw/src/' .. glfw_src[i] end
|
||||
glfw_lflags += '-shared'
|
||||
glfw_lflags += target == 'win32' and '-lgdi32' or ''
|
||||
tup.foreach_rule(glfw_src, '^ CC glfw/%b^ $(cc) $(base_flags) $(glfw_cflags) -c %f -o %o', '.obj/glfw/%B.o')
|
||||
tup.rule('.obj/glfw/*.o', '^ LD %o^ $(cc) $(base_flags) -o %o %f $(glfw_lflags)', lib('glfw'))
|
||||
end
|
||||
|
||||
if config.modules.data then
|
||||
cflags_rasterizer += '-Ideps/msdfgen'
|
||||
lflags += '-lmsdfgen'
|
||||
|
||||
msdfgen_cflags += '-fPIC'
|
||||
msdfgen_src += 'deps/msdfgen/core/*.cpp'
|
||||
tup.foreach_rule(msdfgen_src, '^ CC msdfgen/%b^ $(cxx) $(base_flags) $(msdfgen_cflags) -c %f -o %o', '.obj/msdfgen/%B.o')
|
||||
tup.rule('.obj/msdfgen/*.o', '^ LD %o^ $(cxx) $(base_flags) -shared -o %o %f', lib('msdfgen'))
|
||||
end
|
||||
|
||||
if config.modules.physics then
|
||||
cflags += '-Ideps/ode/include'
|
||||
lflags += '-lode'
|
||||
|
||||
-- ou
|
||||
ode_cflags += '-DMAC_OS_X_VERSION=1030'
|
||||
ode_cflags += '-D_OU_NAMESPACE=odeou'
|
||||
ode_cflags += '-D_OU_FEATURE_SET=_OU_FEATURE_SET_TLS'
|
||||
ode_cflags += '-DdATOMICS_ENABLED=1'
|
||||
ode_cflags += '-Ideps/ode/ou/include'
|
||||
ode_src += 'deps/ode/ou/src/ou/*.cpp'
|
||||
|
||||
-- ccd
|
||||
ode_cflags += '-Ideps/ode/libccd/src'
|
||||
ode_cflags += '-Ideps/ode/libccd/src/custom'
|
||||
ode_cflags += {
|
||||
'-DdLIBCCD_ENABLED',
|
||||
'-DdLIBCCD_INTERNAL',
|
||||
'-DdLIBCCD_BOX_CYL',
|
||||
'-DdLIBCCD_CYL_CYL',
|
||||
'-DdLIBCCD_CAP_CYL',
|
||||
'-DdLIBCCD_CONVEX_BOX',
|
||||
'-DdLIBCCD_CONVEX_CAP',
|
||||
'-DdLIBCCD_CONVEX_CYL',
|
||||
'-DdLIBCCD_CONVEX_SPHERE',
|
||||
'-DdLIBCCD_CONVEX_CONVEX'
|
||||
}
|
||||
ode_c_src += 'deps/ode/libccd/src/*.c'
|
||||
|
||||
-- OPCODE
|
||||
ode_cflags += '-Ideps/ode/OPCODE'
|
||||
ode_src += 'deps/ode/OPCODE/*.cpp'
|
||||
ode_src += 'deps/ode/OPCODE/Ice/*.cpp'
|
||||
|
||||
-- ode
|
||||
ode_cflags += '-fPIC'
|
||||
ode_cflags += '-Wno-implicit-float-conversion'
|
||||
ode_cflags += '-Wno-array-bounds'
|
||||
ode_cflags += '-Wno-undefined-var-template'
|
||||
ode_cflags += '-Wno-undefined-bool-conversion'
|
||||
ode_cflags += '-Wno-unused-value'
|
||||
ode_cflags += '-Ideps/ode/include'
|
||||
ode_cflags += '-Ideps/ode/ode/src'
|
||||
ode_c_src += 'deps/ode/ode/src/*.c'
|
||||
ode_src += {
|
||||
'deps/ode/ode/src/*.cpp',
|
||||
'deps/ode/ode/src/joints/*.cpp'
|
||||
}
|
||||
|
||||
for i = #ode_src, 1, -1 do
|
||||
if ode_src[i]:match('gimpact') or ode_src[i]:match('dif') then
|
||||
table.remove(ode_src, i)
|
||||
end
|
||||
end
|
||||
|
||||
tup.foreach_rule(ode_c_src, '^ CC ode/%b^ $(cc) $(base_flags) $(ode_cflags) -c %f -o %o', '.obj/ode/%B.o')
|
||||
tup.foreach_rule(ode_src, '^ CC ode/%b^ $(cxx) $(base_flags) $(ode_cflags) -c %f -o %o', '.obj/ode/%B.o')
|
||||
tup.rule('.obj/ode/*.o', '^ LD %o^ $(cxx) $(base_flags) -shared -o %o %f', lib('ode'))
|
||||
end
|
||||
|
||||
if config.headsets.openvr then
|
||||
cflags_openvr += '-Ideps/openvr/headers'
|
||||
lflags += '-lopenvr_api'
|
||||
openvr_libs = {
|
||||
win32 = 'deps/openvr/bin/win64/openvr_api.dll',
|
||||
macos = 'deps/openvr/bin/osx32/openvr_api.dll',
|
||||
linux = 'deps/openvr/bin/linux64/libopenvr_api.so'
|
||||
}
|
||||
assert(openvr_libs[target], 'OpenVR is not supported on this target')
|
||||
copy(openvr_libs[target], '$(bin)/%b')
|
||||
end
|
||||
|
||||
if config.headsets.openxr then
|
||||
if target == 'android' then
|
||||
cflags_openxr += '-Ideps/OpenXR-Oculus/Include'
|
||||
lflags += 'lopenxr_loader'
|
||||
copy('deps/OpenXR-Oculus/Libs/Android/arm64-v8a/Release/libopenxr_loader.so', '$(bin)/%b')
|
||||
else
|
||||
if type(config.headsets.openxr) ~= 'string' then
|
||||
error('Sorry, building OpenXR is not supported yet. However, you can set config.headsets.openxr to a path to a folder containing the OpenXR library.')
|
||||
end
|
||||
cflags += '-Ideps/openxr/include'
|
||||
lflags += '-L' .. config.headsets.openxr
|
||||
lflags += '-lopenxr_loader'
|
||||
end
|
||||
end
|
||||
|
||||
if config.headsets.oculus then
|
||||
assert(target == 'windows', 'LibOVR is not supported on this target')
|
||||
cflags_oculus += '-Ideps/LibOVR/Include'
|
||||
copy('deps/LibOVR/LibWindows/x64/Release/VS2017/LibOVR.dll', lib('LibOVR'))
|
||||
end
|
||||
|
||||
if config.headsets.vrapi then
|
||||
assert(target == 'android', 'VrApi is not supported on this target')
|
||||
cflags_vrapi += '-Ideps/VrApi/Include'
|
||||
lflags += '-lvrapi'
|
||||
copy('deps/VrApi/Libs/Android/arm64-v8a/Release/libvrapi.so', '$(bin)/%b')
|
||||
end
|
||||
|
||||
if config.headsets.pico then
|
||||
assert(target == 'android', 'Pico is not supported on this target')
|
||||
lflags += '-lPvr_NativeSDK'
|
||||
copy('deps/pico/jni/arm64-v8a/libPvr_NativeSDK.so', '$(bin)/%b')
|
||||
end
|
||||
|
||||
if config.spatializers.oculus then
|
||||
cflags_oculus += '-Ideps/AudioSDK/Include'
|
||||
ovraudio_libs = {
|
||||
win32 = 'deps/AudioSDK/Lib/x64/ovraudio64.dll',
|
||||
linux = 'deps/AudioSDK/Lib/Linux64/libovraudio64.so',
|
||||
android = 'deps/AudioSDK/Lib/Android/arm64-v8a/libovraudio64.so'
|
||||
}
|
||||
assert(ovraudio_libs[target], 'Oculus Audio is not supported on this target')
|
||||
copy(ovraudio_libs[target], '$(bin)/%b')
|
||||
end
|
||||
|
||||
if config.spatializers.phonon then
|
||||
cflags_phonon += '-Ideps/phonon/include'
|
||||
phonon_libs = {
|
||||
win32 = 'deps/phonon/bin/Windows/x64/phonon.dll',
|
||||
macos = 'deps/phonon/lib/OSX/libphonon.dylib',
|
||||
linux = 'deps/phonon/lib/Linux/x64/libphonon.so',
|
||||
android = 'deps/phonon/lib/Android/arm64/libphonon.so'
|
||||
}
|
||||
assert(phonon_libs[target], 'Phonon is not supported on this target')
|
||||
copy(phonon_libs[target], '$(bin)/%b')
|
||||
end
|
||||
|
||||
---> lovr
|
||||
|
||||
src = {
|
||||
'src/main.c',
|
||||
'src/core/os_' .. target .. '.c',
|
||||
'src/core/util.c',
|
||||
'src/core/fs.c',
|
||||
'src/core/map.c',
|
||||
'src/core/zip.c',
|
||||
'src/api/api.c',
|
||||
'src/api/l_lovr.c'
|
||||
}
|
||||
|
||||
-- TODO rearrange source so that things can be globbed/matched consistently
|
||||
module_src = {
|
||||
audio = 'src/modules/audio/audio.c',
|
||||
data = 'src/modules/data/*.c',
|
||||
event = 'src/modules/event/*.c',
|
||||
filesystem = 'src/modules/filesystem/*.c',
|
||||
graphics = 'src/modules/graphics/*.c',
|
||||
headset = 'src/modules/headset/headset.c',
|
||||
math = 'src/modules/math/*.c',
|
||||
physics = 'src/modules/physics/*.c',
|
||||
system = 'src/modules/system/*.c',
|
||||
thread = 'src/modules/thread/*.c',
|
||||
timer = 'src/modules/timer/*.c'
|
||||
}
|
||||
|
||||
for module, enabled in pairs(config.modules) do
|
||||
if enabled then
|
||||
src += module_src[module]
|
||||
src += 'src/api/l_' .. module .. '*.c'
|
||||
else
|
||||
cflags += '-DLOVR_DISABLE_' .. module:upper()
|
||||
end
|
||||
end
|
||||
|
||||
for headset, enabled in pairs(config.headsets) do
|
||||
if enabled then
|
||||
cflags += '-DLOVR_USE_' .. headset:upper()
|
||||
src += 'src/modules/headset/headset_' .. headset .. '.c'
|
||||
end
|
||||
end
|
||||
|
||||
for spatializer, enabled in pairs(config.spatializers) do
|
||||
if enabled then
|
||||
cflags += '-DLOVR_ENABLE_' .. spatializer:upper() .. '_SPATIALIZER'
|
||||
src += 'src/modules/audio/spatializer_' .. spatializer .. '.c'
|
||||
end
|
||||
end
|
||||
|
||||
src += 'src/lib/stb/*.c'
|
||||
src += (config.modules.audio or config.modules.data) and 'src/lib/miniaudio/*.c' or nil
|
||||
src += config.modules.data and 'src/lib/jsmn/*.c' or nil
|
||||
src += config.modules.data and 'src/lib/minimp3/*.c' or nil
|
||||
src += config.modules.graphics and 'src/lib/glad/*.c' or nil
|
||||
src += config.modules.graphics and 'src/resources/shaders.c' or nil
|
||||
src += config.modules.math and 'src/lib/noise1234/*.c' or nil
|
||||
src += config.modules.thread and 'src/lib/tinycthread/*.c' or nil
|
||||
|
||||
res += 'src/resources/*.lua'
|
||||
res += 'src/resources/*.ttf'
|
||||
res += 'src/resources/*.json'
|
||||
|
||||
for i = 1, #res do
|
||||
src.extra_inputs += res[i] .. '.h'
|
||||
end
|
||||
|
||||
src.extra_inputs += extra_inputs
|
||||
|
||||
obj += '.obj/*.o'
|
||||
obj.extra_inputs = lib('*')
|
||||
|
||||
---> build
|
||||
|
||||
output = {({
|
||||
win32 = '$(bin)/lovr.exe',
|
||||
macos = '$(bin)/lovr',
|
||||
linux = '$(bin)/lovr',
|
||||
android = '$(bin)/liblovr.so',
|
||||
wasm = '$(bin)/lovr.html'
|
||||
})[target]}
|
||||
|
||||
output.extra_outputs = extra_outputs
|
||||
|
||||
tup.foreach_rule(res, '^ XD %b^ xxd -i %f > %o', '%f.h')
|
||||
tup.foreach_rule(src, '^ CC %b^ $(cc) $(base_flags) $(cflags) $(cflags_%B) -o %o -c %f', '.obj/%B.o')
|
||||
tup.rule(obj, '^ LD %o^ $(cc) $(base_flags) -o %o %f $(lflags)', output)
|
||||
|
||||
---> apk
|
||||
|
||||
if target == 'android' then
|
||||
activity =
|
||||
config.headsets.vrapi and 'src/resources/Activity_vrapi.java' or
|
||||
config.headsets.pico and 'src/resources/Activity_pico.java' or
|
||||
config.headsets.openxr and 'src/resources/Activity_openxr.java'
|
||||
|
||||
java = 'src/resources/Activity.java'
|
||||
class = 'org/lovr/app/Activity.class'
|
||||
binclass = 'bin/' .. class
|
||||
jar = 'bin/lovr.jar'
|
||||
dex = 'bin/apk/classes.dex'
|
||||
|
||||
androidjar = ('%s/platforms/android-%d/android.jar'):format(config.android.sdk, config.android.version)
|
||||
extrajar = config.headsets.pico and 'deps/pico/classes.jar' or nil
|
||||
classpathsep = tup.getconfig('TUP_PLATFORM') == 'win32' and ';' or ':'
|
||||
classpath = table.concat({ androidjar, extrajar }, classpathsep)
|
||||
|
||||
package = config.android.package and ('--rename-manifest-package ' .. config.android.package) or ''
|
||||
project = config.android.project
|
||||
|
||||
manifest = config.android.manifest or
|
||||
config.headsets.vrapi and 'src/resources/AndroidManifest_oculus.xml' or
|
||||
config.headsets.pico and 'src/resources/AndroidManifest_pico.xml' or
|
||||
config.headsets.openxr and 'src/resources/AndroidManifest_oculus.xml'
|
||||
|
||||
tools = config.android.sdk .. '/build-tools/' .. config.android.buildtoolsversion
|
||||
|
||||
ks = config.android.keystore
|
||||
kspass = config.android.keystorepass
|
||||
|
||||
unaligned = 'bin/.lovr.apk.unaligned'
|
||||
unsigned = 'bin/.lovr.apk.unsigned'
|
||||
apk = 'bin/lovr.apk'
|
||||
|
||||
copy(manifest, 'bin/AndroidManifest.xml')
|
||||
copy(activity, java)
|
||||
tup.rule(java, '^ JAVAC %b^ javac -classpath $(classpath) -d bin %f', binclass)
|
||||
tup.rule(binclass, '^ JAR %b^ jar -cf %o -C bin $(class)', jar)
|
||||
tup.rule({ jar, extrajar }, '^ DX %b^ $(tools)/dx --dex --output %o %f', dex)
|
||||
tup.rule(
|
||||
{ 'bin/AndroidManifest.xml', extra_inputs = { lib('*'), dex } },
|
||||
'^ AAPT %b^ $(tools)/aapt package $(package) -F %o -M %f -0 so -I $(androidjar) $(project) bin/apk',
|
||||
unaligned
|
||||
)
|
||||
tup.rule(unaligned, '^ ZIPALIGN %f^ $(tools)/zipalign -f -p 4 %f %o', unsigned)
|
||||
tup.rule(unsigned, '^ APKSIGNER %o^ $(tools)/apksigner sign --ks $(ks) --ks-pass $(kspass) --out %o %f', apk)
|
||||
end
|
283
Tuprules.tup
283
Tuprules.tup
|
@ -1,283 +0,0 @@
|
|||
ROOT = $(TUP_CWD)
|
||||
DEPS = $(ROOT)/deps
|
||||
LIB = bin
|
||||
|
||||
## Base
|
||||
ifeq (@(CC),)
|
||||
CC = clang
|
||||
else
|
||||
CC = @(CC)
|
||||
endif
|
||||
CFLAGS += -std=c99 -pedantic
|
||||
CFLAGS += -I$(ROOT)/src
|
||||
CFLAGS += -I$(ROOT)/src/modules
|
||||
CFLAGS += -I$(ROOT)/src/lib/stdatomic
|
||||
CFLAGS += -fvisibility=hidden
|
||||
CFLAGS += -Wall -Wextra
|
||||
CFLAGS += -Wno-unused-parameter
|
||||
CFLAGS_glad.c += -Wno-pedantic
|
||||
CFLAGS_os_android.c += -Wno-format-pedantic
|
||||
CFLAGS_os_macos.c += -xobjective-c
|
||||
CFLAGS_headset_openvr.c += -Wno-unused-variable -Wno-typedef-redefinition -Wno-pedantic
|
||||
CFLAGS_headset_vrapi.c += -Wno-c11-extensions -Wno-gnu-empty-initializer -Wno-pedantic
|
||||
CFLAGS_miniaudio.c += -Wno-unused-function
|
||||
CFLAGS_@(STRICT) += -Werror
|
||||
FLAGS_@(DEBUG) += -g
|
||||
FLAGS_@(OPTIMIZE) += -Oz
|
||||
FLAGS_@(SANITIZE) += -fsanitize=address,undefined
|
||||
CFLAGS_@(OPTIMIZE) += -fdata-sections -ffunction-sections
|
||||
ifneq (@(DEBUG),y)
|
||||
LDFLAGS += -Wl,-s
|
||||
endif
|
||||
|
||||
## Modules
|
||||
DISABLE_@(AUDIO) += -DLOVR_DISABLE_AUDIO
|
||||
DISABLE_@(DATA) += -DLOVR_DISABLE_DATA
|
||||
DISABLE_@(EVENT) += -DLOVR_DISABLE_EVENT
|
||||
DISABLE_@(FILESYSTEM) += -DLOVR_DISABLE_FILESYSTEM
|
||||
DISABLE_@(GRAPHICS) += -DLOVR_DISABLE_GRAPHICS
|
||||
DISABLE_@(HEADSET) += -DLOVR_DISABLE_HEADSET
|
||||
DISABLE_@(MATH) += -DLOVR_DISABLE_MATH
|
||||
DISABLE_@(PHYSICS) += -DLOVR_DISABLE_PHYSICS
|
||||
DISABLE_@(SYSTEM) += -DLOVR_DISABLE_SYSTEM
|
||||
DISABLE_@(THREAD) += -DLOVR_DISABLE_THREAD
|
||||
DISABLE_@(TIMER) += -DLOVR_DISABLE_TIMER
|
||||
|
||||
## Headset backends
|
||||
CFLAGS_@(SIMULATOR) += -DLOVR_USE_DESKTOP_HEADSET
|
||||
CFLAGS_@(OPENVR) += -DLOVR_USE_OPENVR
|
||||
CFLAGS_@(OPENXR) += -DLOVR_USE_OPENXR
|
||||
CFLAGS_@(OPENXR) += -Ideps/openxr/include
|
||||
CFLAGS_@(OCULUS) += -DLOVR_USE_OCULUS
|
||||
CFLAGS_@(OCULUS) += -I@(OCULUS_PATH)/LibOVR/Include
|
||||
CFLAGS_@(VRAPI) += -DLOVR_USE_VRAPI
|
||||
CFLAGS_@(PICO) += -DLOVR_USE_PICO
|
||||
CFLAGS_@(WEBXR) += -DLOVR_USE_WEBXR
|
||||
|
||||
## Spatializer backends
|
||||
CFLAGS_@(OCULUS_AUDIO) += -DLOVR_ENABLE_OCULUS_AUDIO
|
||||
CFLAGS_@(STEAM_AUDIO) += -DLOVR_ENABLE_PHONON
|
||||
|
||||
ifeq (@(PLATFORM),)
|
||||
PLATFORM = @(TUP_PLATFORM)
|
||||
else
|
||||
PLATFORM = @(PLATFORM)
|
||||
endif
|
||||
|
||||
## Windows
|
||||
ifeq ($(PLATFORM),win32)
|
||||
win32 = y
|
||||
SUFFIX = .exe
|
||||
CFLAGS += -DLOVR_GL
|
||||
CFLAGS += -D_CRT_SECURE_NO_WARNINGS
|
||||
CFLAGS += -Wno-language-extension-token
|
||||
LDFLAGS += -lShell32 -lOle32
|
||||
LDFLAGS_@(OPTIMIZE) += -Wl,--gc-sections
|
||||
EXTRAS += bin/lovr.lib bin/lovr.exp
|
||||
EXTRAS_@(DEBUG) += bin/lovr.pdb bin/lovr.ilk
|
||||
endif
|
||||
|
||||
## Linux
|
||||
ifeq ($(PLATFORM),linux)
|
||||
linux = y
|
||||
CFLAGS += -D_POSIX_C_SOURCE=200809L -D_DEFAULT_SOURCE
|
||||
CFLAGS += -DLOVR_GL
|
||||
LDFLAGS += -lm -lpthread -ldl
|
||||
LDFLAGS += -Wl,-rpath,\$ORIGIN
|
||||
LDFLAGS_@(OPTIMIZE) += -Wl,--gc-sections
|
||||
endif
|
||||
|
||||
## macOS
|
||||
ifeq ($(PLATFORM),macosx)
|
||||
macos = y
|
||||
PLATFORM = macos
|
||||
CFLAGS += -DLOVR_GL
|
||||
LDFLAGS += -Wl,-rpath,@executable_path
|
||||
LDFLAGS_@(OPTIMIZE) += -Wl,-dead_strip
|
||||
LDFLAGS += -lobjc
|
||||
endif
|
||||
|
||||
## Android
|
||||
ifeq ($(PLATFORM),android)
|
||||
android = y
|
||||
SUFFIX = .so
|
||||
PREFIX = apk/lib/arm64-v8a/lib
|
||||
LIB = bin/apk/lib/arm64-v8a
|
||||
|
||||
ifeq (@(TUP_PLATFORM),win32)
|
||||
HOST = windows-x86_64
|
||||
endif
|
||||
ifeq (@(TUP_PLATFORM),macosx)
|
||||
HOST = darwin-x86_64
|
||||
endif
|
||||
ifeq (@(TUP_PLATFORM),linux)
|
||||
HOST = linux-x86_64
|
||||
endif
|
||||
|
||||
CC = @(ANDROID_NDK)/toolchains/llvm/prebuilt/$(HOST)/bin/clang
|
||||
CFLAGS += -DLOVR_GLES
|
||||
CFLAGS += -I@(ANDROID_NDK)/sources/android/native_app_glue
|
||||
FLAGS += --target=aarch64-linux-android@(ANDROID_VERSION)
|
||||
FLAGS_@(DEBUG) += -funwind-tables
|
||||
LDFLAGS += -shared -landroid -lEGL -lGLESv3
|
||||
LDFLAGS_@(OPTIMIZE) += -Wl,--gc-sections
|
||||
|
||||
ACTIVITY_@(OPENXR) = Activity_openxr
|
||||
ACTIVITY_@(VRAPI) = Activity_vrapi
|
||||
ACTIVITY_@(PICO) = Activity_pico
|
||||
ANDROID_MANIFEST_@(OPENXR) = src/resources/AndroidManifest_oculus.xml
|
||||
ANDROID_MANIFEST_@(VRAPI) = src/resources/AndroidManifest_oculus.xml
|
||||
ANDROID_MANIFEST_@(PICO) = src/resources/AndroidManifest_pico.xml
|
||||
ifneq (@(ANDROID_MANIFEST),)
|
||||
ANDROID_MANIFEST_y = @(ANDROID_MANIFEST)
|
||||
endif
|
||||
ifneq (@(ANDROID_PACKAGE),)
|
||||
PACKAGE_RENAME = --rename-manifest-package @(ANDROID_PACKAGE)
|
||||
endif
|
||||
ifneq (@(ANDROID_ASSETS),)
|
||||
ANDROID_ASSETS = -A @(ANDROID_ASSETS)
|
||||
endif
|
||||
|
||||
ANDROID_JAR = @(ANDROID_SDK)/platforms/android-@(ANDROID_VERSION)/android.jar
|
||||
CLASSPATH = $(ANDROID_JAR)
|
||||
ifeq (@(PICO),y)
|
||||
EXTRA_JARS = $(DEPS)/pico/classes.jar
|
||||
ifeq (@(TUP_PLATFORM),win32)
|
||||
CLASSPATH = "$(CLASSPATH);$(EXTRA_JARS)"
|
||||
else
|
||||
CLASSPATH = "$(CLASSPATH):$(EXTRA_JARS)"
|
||||
endif
|
||||
endif
|
||||
|
||||
TOOLS = @(ANDROID_SDK)/build-tools/@(ANDROID_BUILD_TOOLS_VERSION)
|
||||
!dx = |> ^ DX %b^ dx --dex --output=%o %f |>
|
||||
!zipalign = |> ^ ZIPALIGN %f^ $(TOOLS)/zipalign -f -p 4 %f %o |>
|
||||
!apksigner = |> ^ APKSIGNER %o^ $(TOOLS)/apksigner sign --ks @(ANDROID_KEYSTORE) --ks-pass @(ANDROID_KEYSTORE_PASS) --out %o %f |>
|
||||
|
||||
# OpenXR
|
||||
OPENXR_LIB_PATH = $(DEPS)/OpenXR-Oculus/Libs/Android/arm64-v8a/Release
|
||||
CFLAGS_@(OPENXR) += -I$(DEPS)/OpenXR-Oculus/Include
|
||||
LDFLAGS_@(OPENXR) += -L$(OPENXR_LIB_PATH) -lopenxr_loader
|
||||
LIBS_@(OPENXR) += $(OPENXR_LIB_PATH)/libopenxr_loader.so
|
||||
|
||||
# VrApi
|
||||
VRAPI_LIB_PATH = $(DEPS)/oculus-mobile/VrApi/Libs/Android/arm64-v8a/Release
|
||||
CFLAGS_@(VRAPI) += -I$(DEPS)/oculus-mobile/VrApi/Include
|
||||
LDFLAGS_@(VRAPI) += -L$(VRAPI_LIB_PATH) -lvrapi
|
||||
LIBS_@(VRAPI) += $(VRAPI_LIB_PATH)/libvrapi.so
|
||||
|
||||
# pico
|
||||
PICO_LIB_PATH = $(DEPS)/pico/jni/arm64-v8a
|
||||
LDFLAGS_@(PICO) += -L$(PICO_LIB_PATH) -lPvr_NativeSDK
|
||||
LIBS_@(PICO) += $(PICO_LIB_PATH)/libPvr_NativeSDK.so
|
||||
endif
|
||||
|
||||
## emscripten
|
||||
ifeq ($(PLATFORM),web)
|
||||
web = y
|
||||
SUFFIX = .html
|
||||
CFLAGS += -DLOVR_WEBGL
|
||||
LDFLAGS += -s USE_WEBGL2
|
||||
LDFLAGS += -s FORCE_FILESYSTEM
|
||||
LDFLAGS += -s EXPORTED_FUNCTIONS="['_main','_lovrDestroy','_webxr_attach','_webxr_detach','_lovrCanvasCreateFromHandle','_lovrCanvasDestroy','_lovrGraphicsSetBackbuffer','_lovrGraphicsSetViewMatrix','_lovrGraphicsSetProjection']"
|
||||
LDFLAGS_@(WEBXR) += --js-library $(ROOT)/src/resources/webxr.js
|
||||
LDFLAGS += --shell-file $(ROOT)/src/resources/lovr.html
|
||||
FLAGS_@(THREAD) += -s USE_PTHREADS=1
|
||||
EXTRAS = bin/lovr.js bin/lovr.wasm
|
||||
EXTRAS_@(THREAD) += bin/lovr.worker.js
|
||||
endif
|
||||
|
||||
## Libraries
|
||||
ifneq (@(CMAKE_DEPS),)
|
||||
BUILD = @(CMAKE_DEPS)
|
||||
|
||||
ifeq (@(OPTIMIZE),y)
|
||||
CONFIG = Release
|
||||
else
|
||||
CONFIG = Debug
|
||||
endif
|
||||
|
||||
# Lua
|
||||
ifeq (@(LUAJIT),y)
|
||||
CFLAGS += -I$(DEPS)/luajit/src
|
||||
LDFLAGS_$(win32) += -L$(BUILD)/luajit/src/$(CONFIG) -lluajit
|
||||
LDFLAGS_$(macos) += -L$(BUILD)/luajit/src -lluajit
|
||||
LDFLAGS_$(linux) += -L$(BUILD)/luajit/src -lluajit
|
||||
LDFLAGS_$(android) += -L$(BUILD)/luajit/src -lluajit
|
||||
LIBS_$(win32) += $(BUILD)/luajit/src/$(CONFIG)/luajit.dll
|
||||
LIBS_$(macos) += $(BUILD)/luajit/src/libluajit.dylib
|
||||
LIBS_$(linux) += $(BUILD)/luajit/src/libluajit.so
|
||||
else
|
||||
error "Vanillua does not work on this commit"
|
||||
endif
|
||||
|
||||
# GLFW
|
||||
CFLAGS_$(win32) += -I$(DEPS)/glfw/include
|
||||
CFLAGS_$(macos) += -I$(DEPS)/glfw/include
|
||||
CFLAGS_$(linux) += -I$(DEPS)/glfw/include
|
||||
LDFLAGS_$(win32) += -L$(BUILD)/glfw/src/$(CONFIG) -lglfw3dll
|
||||
LDFLAGS_$(macos) += -L$(BUILD)/glfw/src -lglfw
|
||||
LDFLAGS_$(linux) += -L$(BUILD)/glfw/src -lglfw
|
||||
LIBS_$(win32) += $(BUILD)/glfw/src/$(CONFIG)/glfw3.dll
|
||||
LIBS_$(macos) += $(BUILD)/glfw/src/libglfw.*dylib
|
||||
LIBS_$(linux) += $(BUILD)/glfw/src/libglfw.*so*
|
||||
|
||||
# msdfgen
|
||||
CFLAGS_@(DATA) += -I$(DEPS)/msdfgen
|
||||
LDFLAGS_@(DATA)_$(win32) += -L$(BUILD)/msdfgen/$(CONFIG) -lmsdfgen
|
||||
LDFLAGS_@(DATA)_$(macos) += -L$(BUILD)/msdfgen -lmsdfgen
|
||||
LDFLAGS_@(DATA)_$(linux) += -L$(BUILD)/msdfgen -lmsdfgen
|
||||
LDFLAGS_@(DATA)_$(android) += -L$(BUILD)/raw/lib/arm64-v8a -lmsdfgen
|
||||
LDFLAGS_@(DATA)_$(web) += $(BUILD)/msdfgen/libmsdfgen.a
|
||||
LIBS_@(DATA)_$(win32) += $(BUILD)/msdfgen/$(CONFIG)/msdfgen.dll
|
||||
LIBS_@(DATA)_$(macos) += $(BUILD)/msdfgen/libmsdfgen.dylib
|
||||
LIBS_@(DATA)_$(linux) += $(BUILD)/msdfgen/libmsdfgen.so
|
||||
LIBS_@(DATA)_$(android) += $(BUILD)/raw/lib/arm64-v8a/libmsdfgen.so
|
||||
|
||||
# OpenVR
|
||||
CFLAGS_@(OPENVR) += -I$(DEPS)/openvr/headers
|
||||
LDFLAGS_@(OPENVR)_$(win32) += -L$(DEPS)/openvr/bin/win64 -lopenvr_api64
|
||||
LDFLAGS_@(OPENVR)_$(macos) += -L$(DEPS)/openvr/bin/osx32 -lopenvr_api
|
||||
LDFLAGS_@(OPENVR)_$(linux) += -L$(DEPS)/openvr/bin/linux64 -lopenvr_api
|
||||
LIBS_@(OPENVR)_$(win32) += $(DEPS)/openvr/bin/win64/openvr_api.dll
|
||||
LIBS_@(OPENVR)_$(macos) += $(DEPS)/openvr/bin/osx32/libopenvr_api.dylib
|
||||
LIBS_@(OPENVR)_$(linux) += $(DEPS)/openvr/bin/linux64/libopenvr_api.so
|
||||
|
||||
# ODE
|
||||
CFLAGS_@(PHYSICS) += -I$(DEPS)/ode/include -I$(BUILD)/ode/include
|
||||
LDFLAGS_@(PHYSICS)_$(win32) += -L$(BUILD)/ode/$(CONFIG) -lode
|
||||
LDFLAGS_@(PHYSICS)_$(macos) += -L$(BUILD)/ode -lode
|
||||
LDFLAGS_@(PHYSICS)_$(linux) += -L$(BUILD)/ode -lode
|
||||
LDFLAGS_@(PHYSICS)_$(android) += -L$(BUILD)/raw/lib/arm64-v8a -lode
|
||||
LDFLAGS_@(PHYSICS)_$(web) += $(BUILD)/ode/libode.a
|
||||
LIBS_@(PHYSICS)_$(win32) += $(BUILD)/ode/$(CONFIG)/ode.dll
|
||||
LIBS_@(PHYSICS)_$(macos) += $(BUILD)/ode/libode.dylib
|
||||
LIBS_@(PHYSICS)_$(linux) += $(BUILD)/ode/libode.so
|
||||
LIBS_@(PHYSICS)_$(android) += $(BUILD)/raw/lib/arm64-v8a/libode.so
|
||||
|
||||
# Oculus Audio
|
||||
CFLAGS_@(OCULUS_AUDIO) += -I@(OCULUS_AUDIO_PATH)/Include
|
||||
LDFLAGS_@(OCULUS_AUDIO)_$(win32) += -L@(OCULUS_AUDIO_PATH)/Lib/x64 -lovraudio64
|
||||
LDFLAGS_@(OCULUS_AUDIO)_$(linux) += -L@(OCULUS_AUDIO_PATH)/Lib/Linux64 -lovraudio64
|
||||
LDFLAGS_@(OCULUS_AUDIO)_$(android) += -L@(OCULUS_AUDIO_PATH)/Lib/Android/arm64-v8a -lovraudio64
|
||||
LIB_@(OCULUS_AUDIO)_$(win32) += @(OCULUS_AUDIO_PATH)/Lib/x64/ovraudio64.dll
|
||||
LIB_@(OCULUS_AUDIO)_$(linux) += @(OCULUS_AUDIO_PATH)/Lib/Linux64/libovraudio64.so
|
||||
LIB_@(OCULUS_AUDIO)_$(android) += @(OCULUS_AUDIO_PATH)/Lib/Android/arm64-v8a/libovraudio64.so
|
||||
|
||||
# Phonon
|
||||
CFLAGS_@(STEAM_AUDIO) += -I@(STEAM_AUDIO_PATH)/include
|
||||
LIBS_@(STEAM_AUDIO)_$(win32) += @(STEAM_AUDIO_PATH)/bin/Windows/x64/phonon.dll
|
||||
LIBS_@(STEAM_AUDIO)_$(macos) += @(STEAM_AUDIO_PATH)/lib/OSX/libphonon.dylib
|
||||
LIBS_@(STEAM_AUDIO)_$(linux) += @(STEAM_AUDIO_PATH)/lib/Linux/x64/libphonon.so
|
||||
LIBS_@(STEAM_AUDIO)_$(android) += @(STEAM_AUDIO_PATH)/lib/Android/arm64/libphonon.so
|
||||
endif
|
||||
|
||||
LIBS += $(LIBS_y) $(LIBS_y_y)
|
||||
CFLAGS += $(FLAGS) $(FLAGS_y) $(DISABLE_n) $(CFLAGS_y) @(EXTRA_CFLAGS)
|
||||
LDFLAGS += $(FLAGS) $(FLAGS_y) $(LDFLAGS_y) $(LDFLAGS_y_y) @(EXTRA_LDFLAGS)
|
||||
|
||||
## Macros
|
||||
!cc = |> ^o CC %b^ $(CC) $(CFLAGS) $(CFLAGS_%b) -o %o -c %f |>
|
||||
!ld = |> ^ LD %o^ $(CC) -o %o %f $(LDFLAGS) |>
|
||||
!xd = |> ^ XD %f^ xxd -i %f > %o |>
|
||||
!cp = |> ^ CP %b^ cp %f %o |>
|
|
@ -1,5 +1,7 @@
|
|||
#include "os.h"
|
||||
#define WIN32_LEAN_AND_MEAN
|
||||
#define WINVER 0x0600
|
||||
#define _WIN32_WINNT 0x0600
|
||||
#include <windows.h>
|
||||
#include <shellapi.h>
|
||||
#include <knownfolders.h>
|
||||
|
|
|
@ -9,7 +9,7 @@
|
|||
#define LOVR_VERSION_PATCH 0
|
||||
#define LOVR_VERSION_ALIAS "Government Goop"
|
||||
|
||||
#ifdef _WIN32
|
||||
#ifdef _MSC_VER
|
||||
#define LOVR_NORETURN __declspec(noreturn)
|
||||
#define LOVR_THREAD_LOCAL __declspec(thread)
|
||||
#define LOVR_RESTRICT __restrict
|
||||
|
|
|
@ -3,7 +3,7 @@
|
|||
|
||||
#pragma once
|
||||
|
||||
#ifndef _WIN32
|
||||
#ifndef _MSC_VER
|
||||
|
||||
#include <stdint.h>
|
||||
#include <stddef.h>
|
||||
|
@ -143,7 +143,7 @@ _Bool atomic_flag_clear_explicit(volatile atomic_flag*, memory_order);
|
|||
|
||||
#include <intrin.h>
|
||||
|
||||
typedef unsigned int atomic_uint;
|
||||
typedef volatile long atomic_uint;
|
||||
|
||||
#define atomic_fetch_add(p, x) _InterlockedExchangeAdd(p, x)
|
||||
#define atomic_fetch_sub(p, x) _InterlockedExchangeAdd(p, -(x))
|
||||
|
|
|
@ -215,10 +215,10 @@ static void onCapture(ma_device* device, void* output, const void* input, uint32
|
|||
static const ma_device_callback_proc callbacks[] = { onPlayback, onCapture };
|
||||
|
||||
static Spatializer* spatializers[] = {
|
||||
#ifdef LOVR_ENABLE_PHONON
|
||||
#ifdef LOVR_ENABLE_PHONON_SPATIALIZER
|
||||
&phononSpatializer,
|
||||
#endif
|
||||
#ifdef LOVR_ENABLE_OCULUS_AUDIO
|
||||
#ifdef LOVR_ENABLE_OCULUS_SPATIALIZER
|
||||
&oculusSpatializer,
|
||||
#endif
|
||||
&simpleSpatializer
|
||||
|
|
|
@ -1,79 +0,0 @@
|
|||
## LÖVR config
|
||||
# y is 'yes' and n is 'no'
|
||||
# Equal signs should not have spaces around them
|
||||
|
||||
## Options
|
||||
# CC: The "C Compiler" to use. Some common compilers are clang and gcc.
|
||||
# STRICT: Fail the build if there are any warnings.
|
||||
# DEBUG: Include debug symbols in the build, increasing file size.
|
||||
# OPTIMIZE: Make the executable faster and smaller, but compile slower.
|
||||
# SANITIZE: Add extra runtime checks to detect memory leaks and undefined behavior (adds overhead).
|
||||
# CMAKE_DEPS: If building dependencies with CMake, set this to the CMake build folder.
|
||||
# EXTRA_CFLAGS: Additional compiler flags (e.g. libraries, warnings).
|
||||
# EXTRA_LDFLAGS: Additional linker flags.
|
||||
# PLATFORM: The platform to compile for (win32, macos, linux, android, web, or blank to autodetect).
|
||||
CONFIG_CC=clang
|
||||
CONFIG_STRICT=y
|
||||
CONFIG_DEBUG=y
|
||||
CONFIG_OPTIMIZE=n
|
||||
CONFIG_SANITIZE=n
|
||||
CONFIG_CMAKE_DEPS=build
|
||||
CONFIG_EXTRA_CFLAGS=
|
||||
CONFIG_EXTRA_LDFLAGS=
|
||||
CONFIG_PLATFORM=
|
||||
|
||||
## Modules
|
||||
# The set of enabled Lua modules.
|
||||
# Disabling unneeded modules will reduce executable size and improve compile times.
|
||||
CONFIG_AUDIO=y
|
||||
CONFIG_DATA=y
|
||||
CONFIG_EVENT=y
|
||||
CONFIG_FILESYSTEM=y
|
||||
CONFIG_GRAPHICS=y
|
||||
CONFIG_HEADSET=y
|
||||
CONFIG_MATH=y
|
||||
CONFIG_PHYSICS=y
|
||||
CONFIG_SYSTEM=y
|
||||
CONFIG_THREAD=y
|
||||
CONFIG_TIMER=y
|
||||
|
||||
## Headset backends
|
||||
# Enabling headset backends adds support for more types of VR SDKs and hardware.
|
||||
# Some proprietary SDKs cannot be included in LÖVR, so the path to the SDK must be provided.
|
||||
CONFIG_SIMULATOR=y
|
||||
CONFIG_OPENVR=y
|
||||
CONFIG_OPENXR=n
|
||||
CONFIG_OCULUS=n
|
||||
CONFIG_VRAPI=n
|
||||
CONFIG_PICO=n
|
||||
CONFIG_WEBXR=n
|
||||
CONFIG_OCULUS_PATH=
|
||||
|
||||
## Spatializer backends
|
||||
CONFIG_STEAM_AUDIO=n
|
||||
CONFIG_STEAM_AUDIO_PATH=
|
||||
CONFIG_OCULUS_AUDIO=n
|
||||
CONFIG_OCULUS_AUDIO_PATH=
|
||||
|
||||
## LuaJIT
|
||||
CONFIG_LUAJIT=y
|
||||
|
||||
## Android settings
|
||||
# ANDROID_SDK: The path to the Android SDK
|
||||
# ANDROID_NDK: The path to the Android NDK
|
||||
# ANDROID_VERSION: The Android version to build against (usually 21 or 26)
|
||||
# ANDROID_BUILD_TOOLS_VERSION: The version of the Android build tools to use (in build-tools folder)
|
||||
# ANDROID_KEYSTORE: The path to the keystore (use keytool to generate)
|
||||
# ANDROID_KEYSTORE_PASS: The keystore password (use either pass:<string>, env:<var>, or file:<path>)
|
||||
# ANDROID_MANIFEST: Optional path to a custom Android manifest file (xml)
|
||||
# ANDROID_PACKAGE: Optional package id override (default is org.lovr.app, taken from manifest)
|
||||
# ANDROID_ASSETS: Optional path to a folder to embed as the assets folder of the apk
|
||||
CONFIG_ANDROID_SDK=
|
||||
CONFIG_ANDROID_NDK=
|
||||
CONFIG_ANDROID_VERSION=
|
||||
CONFIG_ANDROID_BUILD_TOOLS_VERSION=
|
||||
CONFIG_ANDROID_KEYSTORE=
|
||||
CONFIG_ANDROID_KEYSTORE_PASS=
|
||||
CONFIG_ANDROID_MANIFEST=
|
||||
CONFIG_ANDROID_PACKAGE=
|
||||
CONFIG_ANDROID_ASSETS=
|
Loading…
Reference in New Issue